Spring boot 在启动配置文件bean之前调用另一个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);

我有一个springboot应用程序,我在main类中配置了多个bean,我还为不同的环境设置了不同的配置文件。请参阅下面的代码:

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。