Spring boot Spring启动属性解析
我正在使用此配置代码初始化数据源:Spring boot Spring启动属性解析,spring-boot,Spring Boot,我正在使用此配置代码初始化数据源: @Bean(destromethod=“close”) 数据源数据源(环境环境){ HikariConfig数据源配置=新HikariConfig(); dataSourceConfig.setDriverClassName(env.getRequiredProperty(PROP_DB_DRIVER_CLASS)); dataSourceConfig.setJdbcUrl(env.getRequiredProperty(PROP_DB_URL)); data
@Bean(destromethod=“close”)
数据源数据源(环境环境){
HikariConfig数据源配置=新HikariConfig();
dataSourceConfig.setDriverClassName(env.getRequiredProperty(PROP_DB_DRIVER_CLASS));
dataSourceConfig.setJdbcUrl(env.getRequiredProperty(PROP_DB_URL));
dataSourceConfig.setUsername(env.getRequiredProperty(PROP_DB_USER));
dataSourceConfig.setPassword(env.getRequiredProperty(PROP_DB_PASSWORD));
返回新的HikariDataSource(dataSourceConfig);
}
“env”是:“org.springframework.core.env.Environment”
现在,当我在Eclipse中运行Spring Boot应用程序时,我希望这段代码能够从类路径(project/src/main/resources)中的application.properties中获取属性,但它使用的是project/config中的另一个application.properties,为什么会发生这种情况,我如何防止这种行为?(project/config中的文件是用于其他环境的文件,而不是dev)。在Spring Boot中,要从project/src/main/resources/application.properties获取配置值,可以使用@Value
@Value("${PROP_DB_DRIVER_CLASS}")
private String drivercClass;
@Value("${PROP_DB_URL}")
private String dbUrl;
@Value("${PROP_DB_USER}")
private String dbUser;
@Value("${PROP_DB_PASSWORD}")
private String dbPassword;
@Bean(destroyMethod = "close")
DataSource dataSource() {
HikariConfig dataSourceConfig = new HikariConfig();
dataSourceConfig.setDriverClassName(drivercClass);
dataSourceConfig.setJdbcUrl(dbUrl);
dataSourceConfig.setUsername(dbUser);
dataSourceConfig.setPassword(dbPassword);
return new HikariDataSource(dataSourceConfig);
}
Spring的
@Value
注释提供了一种将属性值注入组件的方便方法
基本语法:
@Value("${some.key:my default value}")
private String stringWithDefaultValue;
如果无法解析some.key
,则stringWithDefaultValue将设置为默认值“我的默认值”
类似地,您必须注入所需的所有属性,并在创建bean时使用这些属性
更多细节您无法阻止您看到的行为。
application.properties
文件的优先顺序为:
SpringApplication
从以下位置的application.properties
文件加载属性,并将它们添加到Spring环境中:
/config
子目录/config
包project/config
中的文件在上面的列表中是1,而project/src/main/resources
中的文件在列表中是4。因此,预计将使用project/config
中的文件中的值
project/config
中的文件是其他环境的文件,而不是dev
这似乎意味着您认为<>代码>文件SRC/main /Reals<代码>是为了开发。默认情况下,它将被打包在应用程序的jar文件中。因此,该位置更适合应用程序在开发之后使用的属性
您可以反向使用这两个位置。将您的开发时属性放在project
或project/config
中的一个文件中,并将其他环境的属性放在src/main/resources
中的一个文件中。我想只有在部署应用程序时才会使用“/config”位置。我只是将它重命名为“conf”,然后我会做什么。关于你的建议,不,我不能逆转:我的默认属性在src/main/resources中,我的config/*。属性只覆盖一些属性。