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

时间:2018-01-11 00:43:31

标签: java spring spring-boot

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

编辑 - 我的个人资料将是dev,prod等。不是dev-kafka或prod-kafka。 对于每个配置文件和需要配置的每个组件,我想要一个特定于配置文件的文件。

所以application-dev-kafka,

应用-DEV-hazelcast,

应用-DEV-MySQL的。

应用PROD-卡夫卡,

应用PROD-hazelcast,

应用PROD-MySQL和

应用-INT-卡夫卡,

应用-INT-hazelcast,

应用-INT-MySQL的。

6 个答案:

答案 0 :(得分:0)

您可以使用spring.profiles.active来指定配置文件。例如,使用spring.profiles.active=dev来指定application-dev.properties。 enter image description here

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

java -jar myapp.jar --spring.profiles.active=prd

答案 1 :(得分:0)

根据回复更新了基础。

按照此处的示例: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

答案 2 :(得分:0)

@PropertySource("classpath:application-dev-kafka.properties")
class YourClassConfig {
    @Autowired
    private Environment env;

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

答案 3 :(得分:0)

根据需要添加用于加载属性文件的类。

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

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

enter image description here

如果您想通过不同的配置文件读取配置文件(-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{}
}

答案 4 :(得分:0)

所以,这就是我所做的。

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

还有可用的特定于环境的属性文件。因此,application-dev.properties,application-prod.properties等将由spring boot自动检测。

在我的应用程序中,我有一个用

注释的组件
      @PropertySource("classpath:${file-name}")

此处,property-file-name存在于所有特定于环境的属性文件中。因此,根据您运行的配置文件,Spring引导会自动检测到2个属性文件。例如 -

如果使用profiles dev运行,它将检测application.properties和application-dev.properties。然后,根据application-dev.properties中file-name的值,它将检测application-dev-kafka.properties。

答案 5 :(得分:0)

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

enter image description here

通过使用以下代码,您将获得弹簧活动轮廓的值,

@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);