Dan*_*iel 19 java spring properties-file spring-boot
我有一个Spring-Boot-Application作为maven中的multimodule-Project.结构如下:
Parent-Project
|--MainApplication
|--Module1
|--ModuleN
Run Code Online (Sandbox Code Playgroud)
在MainApplication项目中有main()方法类注释用@SpringBootApplication等等.此项目一如既往地自动加载application.properties文件.所以我可以使用@Value注释访问值
@Value("${myapp.api-key}")
private String apiKey;
Run Code Online (Sandbox Code Playgroud)
在我的Module1中,我也想使用属性文件(称为module1.properties),其中存储了模块配置.只能在模块中访问和使用此文件.但是我无法加载它.我尝试过@Configuration,@PropertySource但没有运气.
@Configuration
@PropertySource(value = "classpath:module1.properties")
public class ConfigClass {
Run Code Online (Sandbox Code Playgroud)
如何使用Spring-Boot加载属性文件并轻松访问这些值?找不到有效的解决方案.
我的配置
@Configuration
@PropertySource(value = "classpath:tmdb.properties")
public class TMDbConfig {
@Value("${moviedb.tmdb.api-key}")
private String apiKey;
public String getApiKey() {
return apiKey;
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
Run Code Online (Sandbox Code Playgroud)
调用配置
@Component
public class TMDbWarper {
@Autowired
private TMDbConfig tmdbConfig;
private TmdbApi tmdbApi;
public TMDbWarper(){
tmdbApi = new TmdbApi(tmdbConfig.getApiKey());
}
Run Code Online (Sandbox Code Playgroud)
当我自动装备warper时,我在构造函数中得到一个NullPointerException.
用于现场注入:
在调用任何配置方法之前,在构造bean之后立即注入字段.这样的配置字段不必是公共的.请参阅自动连接注释以获取完整用法.在这种情况下使用构造函数注入,如下所示:
@Component
public class TMDbWarper {
private TMDbConfig tmdbConfig;
private TmdbApi tmdbApi;
@Autowired
public TMDbWarper(final TMDbConfig tmdbConfig){
this.tmdbConfig = tmdbConfig;
tmdbApi = new TmdbApi(tmdbConfig.getApiKey());
}
Run Code Online (Sandbox Code Playgroud)
(要么)
使用@PostConstruct初始化象下面这样:
@Component
public class TMDbWarper {
@Autowired
private TMDbConfig tmdbConfig;
private TmdbApi tmdbApi;
@PostConstruct
public void init() {
// any initialisation method
tmdbConfig.getConfig();
}
Run Code Online (Sandbox Code Playgroud)
在创建对象之后执行自动装配(在通过反射调用构造函数之后).因此NullPointerException,在构造函数中,期望在构造函数的tmdbConfig调用期间字段为null
您可以使用@PostConstruct回调方法解决此问题,如下所示:
@Component
public class TMDbWarper {
@Autowired
private TMDbConfig tmdbConfig;
private TmdbApi tmdbApi;
public TMDbWarper() {
}
@PostConstruct
public void init() {
tmdbApi = new TmdbApi(tmdbConfig.getApiKey());
}
public TmdbApi getTmdbApi() {
return this.tmdbApi;
}
}
Run Code Online (Sandbox Code Playgroud)
其余的配置似乎对我来说是正确的.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
7363 次 |
| 最近记录: |