我有以下问题, 我想阅读特定于环境的自定义文件。所以,像 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的。
答案 0 :(得分:0)
您可以使用spring.profiles.active
来指定配置文件。例如,使用spring.profiles.active=dev
来指定application-dev.properties。
您还可以在运行应用程序时指定配置文件,如:
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{}
}
如果您想通过不同的配置文件读取配置文件(-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文件放入资源包中,
通过使用以下代码,您将获得弹簧活动轮廓的值,
@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);