Java 从动态更新的Application.properties读取
我有一个应用程序属性文件,我正在使用maven构建步骤动态更新它 mvn clean-Dusername=user1-Durl=xxxx-Dpassword=xxxx-DskipTests 安装 我正在configuration类中读取这些属性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
@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
}