Spring boot 在启动配置文件bean之前调用另一个bean
我有一个springboot应用程序,我在main类中配置了多个bean,我还为不同的环境设置了不同的配置文件。请参阅下面的代码:Spring boot 在启动配置文件bean之前调用另一个bean,spring-boot,properties-file,Spring Boot,Properties File,我有一个springboot应用程序,我在main类中配置了多个bean,我还为不同的环境设置了不同的配置文件。请参阅下面的代码: private static String propertiesFilePath; public static void main(String[] args) { LOGGER.info("Starting app..!!"); SpringApplication.run(Application.class, args);
private static String propertiesFilePath;
public static void main(String[] args) {
LOGGER.info("Starting app..!!");
SpringApplication.run(Application.class, args);
}
@Bean
@Profile("local")
public String localBean() {
propertiesFilePath = "application-local.properties";
return propertiesFilePath;
}
@Bean
public static CommandLineRunner init() {
return (args) -> {
try {
LOGGER.info("Starting ..");
CommonUtil.initializeCacheManager(propertiesFilePath);
} catch (Exception e) {
LOGGER.info("CommonUtil.initializeCacheManager :" + e.getMessage());
}
};
}
@Bean
public BroadcastHandler createBroadcastHandler() {
return new BroadcastHandler();
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
在这段代码中,首先调用其他bean,然后调用带有@Profile注释的bean,我可以在下面的日志行中看到:
以下配置文件处于活动状态:本地
由于Spring容器正在尝试初始化其他bean,因此在没有首先初始化属性的情况下,应用程序无法启动
是否有任何原因导致没有调用@Profile的bean,以及如何修复它?尝试添加
spring.profiles.active=local
在您的application.properties文件中。Spring boot不能像您在问题的代码片段中介绍的那样处理概要文件 它自动解析所有配置文件解析并加载相应的bean(用
@Profle
注释注释):
运行应用程序时,将--spring.profiles.active=local
添加到执行java应用程序的命令中
这将指示spring boot查找应用程序本地.properties
(或yaml),并将从那里解析所有属性,就像它在默认情况下处理通常的应用程序.properties
一样
默认情况下,如果将属性文件放入src/main/resources
或src/main/resources/config
文件夹,则会解析属性文件
还有一种方法可以从java代码(使用环境后置处理器)自动启用配置文件,但这超出了问题的范围。我在application.properties文件中有这一行,这就是为什么我在日志中看到这一行“以下配置文件处于活动状态:本地”您不必显式地告诉spring应用程序加载application-local.properties文件。任何带有@Profile(“local”)注释的内容都肯定会从application-local.properties获取其配置。尝试删除localBean和CommandLineRunner bean。