Spring-Boot多模块项目加载属性文件

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.

Sub*_*h J 6

用于现场注入:

在调用任何配置方法之前,在构造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)


ska*_*dya 5

在创建对象之后执行自动装配(在通过反射调用构造函数之后).因此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)

其余的配置似乎对我来说是正确的.

希望这可以帮助.