![](/img/trans.png)
[英]Spring boot application not reading environment specific yaml file when running on external tomcat as war
[英]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);
@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.