Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从动态更新的Application.properties读取_Java_Spring - Fatal编程技术网

Java 从动态更新的Application.properties读取

Java 从动态更新的Application.properties读取,java,spring,Java,Spring,我有一个应用程序属性文件,我正在使用maven构建步骤动态更新它 mvn clean-Dusername=user1-Durl=xxxx-Dpassword=xxxx-DskipTests 安装 我正在configuration类中读取这些属性 @Configuration @ImportResource("classpath:/spring-beans.xml") @PropertySource("classpath:/application.properties") public clas

我有一个应用程序属性文件,我正在使用maven构建步骤动态更新它

mvn clean-Dusername=user1-Durl=xxxx-Dpassword=xxxx-DskipTests 安装

我正在configuration类中读取这些属性

@Configuration 
@ImportResource("classpath:/spring-beans.xml")
@PropertySource("classpath:/application.properties")
public class ApplicationConfiguration {

  @Value("${jdbc.url}")
  private String url;

 @Value("${jdbc.username}")
  private String username;

 @Value("${jdbc.password}")
 private String password;

@Bean(name = "c3p0DataSource")
public ComboPooledDataSource dataSource() throws PropertyVetoException, 
IOException {

logger.info("Creating Datasource for {}",System.getenv("SPRING_DATASOURCE_URL"));
// logger.info("Creating Datasource for username {}", 
prop.getProperty("username"));
logger.info("Creating Datasource for {}", System.getenv("username"));
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");

logger.info("User Name :" + username);//returning $username instead of user1

logger.info("password :" + password);

System.out.println("User name : " + username);

dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
return dataSource;  }   }
我没有得到更新的值,而是得到$username,$password作为值,有人能帮我解决我这里缺少的问题吗

我修改的属性文件如下所示

jdbc.url=xxxx
jdbc.username=user1
jdbc.password=xxxx

我建议您不要使用Spring的应用程序属性,而是使用另一个属性文件,将其存储在文件系统中,并使用org.apache.commons.configuration.PropertiesConfiguration类从该文件加载值

org.apache.commons.configuration.PropertiesConfiguration能够在更改时重新加载属性文件

如果您使用的是maven,请在下面添加依赖项

<dependency>
    <groupId>commons-configuration</groupId>
    <artifactId>commons-configuration</artifactId>
    <version>1.10</version>
</dependency>

共用配置
共用配置
1.10

当你说“动态更新”时,在我看来,你只是指在构建时更新,而不是在运行时更新。如果是这样的话,那么这就是您应该运行的spring引导文档的c部分

mvn clean -Djdbc.username=user1 -Djdbc.url=xxxx -Djdbc.password=xxxx -DskipTests install

我尝试过手动初始化数据,这很有效。你也可以试一试

您可以尝试以下代码:

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Configuration;


@Configuration
@PropertySource("classpath:application.properties")
public class ApplicationConfiguration {

    private Properties properties = new Properties();
    public static String driverClass;
    public static String dataSourceUrl;
    public static String dataSourceUser;
    public static String dataSourcePassword;

    public ApplicationConfiguration() throws IOException {
        properties.load(new InputStreamReader(ApplicationConfiguration.class.getResourceAsStream("/application.properties")));    
        driverClass = properties.getProperty("spring.datasource.driver-class-name");
        dataSourceUrl = properties.getProperty("spring.datasource.url");
        dataSourceUser = properties.getProperty("spring.datasource.username");
        dataSourcePassword = properties.getProperty("spring.datasource.password");
  }

  // Other Code Details

}
现在我可以轻松地使用它,如:
ApplicationConfiguration.driverClass
ApplicationConfiguration.dataSourceUser

我也很少使用application.properties中的其他资源,这些资源不是手动初始化的,而且在构建jar时也不是必需的。因此,只有我使用
@PropertySource(“classpath:application.properties”)
来使用其他资源,而无需手动初始化


试一下,它可能会对您有所帮助:)

我只是在构建时使用资源,正如您所说,更新的jar包含修改的属性文件,但仍然无法读取。您可以更新问题,或者提供要点或代码链接,因为问题当前与文档中的示例不匹配?更新的问题希望它有助于您添加pom中配置Maven资源插件的部分?以及Pom属性部分中属性的定义?另外,您是否没有像docs那样使用@语法?请参阅,如果您解释了为什么这样可以解决问题,这会有所帮助。
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Configuration;


@Configuration
@PropertySource("classpath:application.properties")
public class ApplicationConfiguration {

    private Properties properties = new Properties();
    public static String driverClass;
    public static String dataSourceUrl;
    public static String dataSourceUser;
    public static String dataSourcePassword;

    public ApplicationConfiguration() throws IOException {
        properties.load(new InputStreamReader(ApplicationConfiguration.class.getResourceAsStream("/application.properties")));    
        driverClass = properties.getProperty("spring.datasource.driver-class-name");
        dataSourceUrl = properties.getProperty("spring.datasource.url");
        dataSourceUser = properties.getProperty("spring.datasource.username");
        dataSourcePassword = properties.getProperty("spring.datasource.password");
  }

  // Other Code Details

}