繁体   English   中英

Spring Boot读取自定义环境特定文件

[英]Spring Boot Reading a Custom Environment specific file

我有以下问题,我想阅读特定于环境的自定义文件。 因此,像application-dev-kafka.properties,application-prod-kafka.properties等,然后绑定属性。 我知道弹簧轮廓。 我曾考虑过使用@propertysource,但我又不确定在文件名方面要指定什么。 任何帮助表示赞赏。

对于我来说,EDIT-配置文件将是dev,prod等。不是dev-kafka或prod-kafka。 对于每个配置文件和每个需要配置的组件,我想要一个特定于配置文件的文件。

所以application-dev-kafka

application-dev-hazelcast,

应用程序-dev-mysql。

application-prod-kafka,

application-prod-hazelcast,

application-prod-mysql,

application-int-kafka,

application-int-hazelcast,

application-int-mysql。

所以,这就是我所做的。

我正在使用spring配置文件,并在application.properties文件中添加了spring.profiles.active = dev。

也提供特定于环境的属性文件。 因此,application-dev.properties,application-prod.properties等将由Spring Boot自动检测。

在我的应用程序中,我有一个带有注释的组件

      @PropertySource("classpath:${file-name}")

在此,所有环境特定的属性文件中都存在属性文件名。 因此,根据您运行的配置文件,spring boot将自动检测2个属性文件。 因此,例如-

如果使用配置文件dev运行,它将检测到application.properties和application-dev.properties。 然后,根据application-dev.properties中的文件名值,它将检测到application-dev-kafka.properties。

根据响应进行了更新。

遵循此处的示例: https : //docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

在application.properties文件中包含以下内容。

list of your normal properties
---
spring.profiles: prod
spring.profiles.include:
  - prod-kafka
----
spring.profiles: dev
spring.profiles.include:
  - dev-kafka

添加一个类以根据需要加载属性文件。

@Configuration
public class AppConfig {
    @Configuration
    @PropertySource("dev.properties")
    static class dev{}

    @Configuration
    @PropertySource("prod.properties")
    static class prod{}
}

在此处输入图片说明

如果要通过其他配置文件(-Dspring.profiles.active)读取配置文件

@Configuration
public class AppConfig {
    @Profile("dev")
    @Configuration
    @PropertySource("dev1.properties")
    static class dev1{}

    @Profile("dev")
    @Configuration
    @PropertySource("dev2.properties")
    static class dev2{}

    @Profile("prod")
    @Configuration
    @PropertySource("prod1.properties")
    static class prod1{}

    @Profile("prod")
    @Configuration
    @PropertySource("prod2.properties")
    static class prod2{}
}

将与配置相关的环境特定的kafka文件放入资源包中,

在此处输入图片说明

通过使用以下代码,您将获得spring active profile的值,

@Autowired
private Environment environment;

String activeProfile = environment.getActiveProfiles()[0];

因此,您可以在activeProfile变量中获得有效配置文件(例如dev,uat或prod)的价值,只需使用以下方式创建特定于环境的文件名:

private String ACTIVE_PROFILES_KAFKA_FILE = activeProfile + "_kafka.yml";

因此,您将获得特定的kafka文件名,例如dev的dev_kafka,prod的prod_kafka等等,以及相应的环境,然后按以下代码加载文件。

MainClass.class.getClassLoader()
                            .getResourceAsStream(ACTIVE_PROFILES_KAFKA_FILE);

您可以使用spring.profiles.active来指定配置文件。 例如,使用spring.profiles.active=dev来指定application-dev.properties。 在此处输入图片说明

您还可以在运行应用程序时指定配置文件,例如:

java -jar myapp.jar --spring.profiles.active=prd
@PropertySource("classpath:application-dev-kafka.properties")
class YourClassConfig {
    @Autowired
    private Environment env;

    //some method
    env.getProperty("your.property");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM