我有应用程序属性文件,该文件正在使用maven构建步骤动态更新。
mvn clean -Dusername = user1 -Durl = xxxx -Dpassword = xxxx -DskipTests 安装
jdbc.url=${url}
jdbc.username=${username}
jdbc.password=${password}
我正在配置类中读取这些属性
@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
答案 0 :(得分:0)
我建议您不要使用Spring的application属性,而建议您使用另一个属性文件,将其存储在文件系统上,并使用org.apache.commons.configuration.PropertiesConfiguration类从该文件中加载值。
org.apache.commons.configuration.PropertiesConfiguration能够在更改时重新加载属性文件。
https://commons.apache.org/proper/commons-configuration/userguide/howto_properties.html
如果您使用的是maven,请添加以下依赖项。
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.10</version>
</dependency>
答案 1 :(得分:0)
在我看来,“动态更新”是指在构建时而非运行时进行更新。如果是这样,那么you need to use the maven resources plugin, define the maven variables and use a different syntax in the properties file.是Spring Boot文档的c overed in the properties and configuration section
答案 2 :(得分:0)
您应该跑步
mvn clean -Djdbc.username=user1 -Djdbc.url=xxxx -Djdbc.password=xxxx -DskipTests install
答案 3 :(得分:0)
我尝试过手动初始化数据,这可以工作。您也可以尝试一下。
您可以尝试以下代码:
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中也使用了很少的其他资源,这些资源不是我手动进行初始化的,在building jar
期间也不需要。因此,只有我使用@PropertySource("classpath:application.properties")
来使用其他资源,而无需手动初始化。
尝试一次,它可能会对您有帮助:)