0

嗨,我对在 spring 中使用配置文件有点困惑。我的场景是我有一个自定义属性文件。它是每个环境的值更改(dev、test、prod)。我对每个环境使用相同的 bean。但我想更改每个环境的值。在此属性文件中,所有键都是相同的,只有它们的值不同。

mydev.properties 
mytest.properties
myprod.properties

那么我应该如何在我的场景中为我的代码实现配置文件逻辑(Bean 相同,值不同)

//Here is my bean
@Component
@PropertySource("my.properties")
@ConfigurationProperties(prefix = "my")
public class MyProperties
{
....

我会将“spring.profiles.active”添加到我的 propertysource 中,这就足够了吗?

//I plan to add spring.profiles.active

 @Component
 @PropertySource("my${spring.profiles.active}.properties")
@ConfigurationProperties(prefix = "my")
public class MyProperties
{
....
4

1 回答 1

1

请仔细阅读 Spring Boot 参考:第2.4 节。配置文件特定的属性

除了 application.properties 文件之外,还可以使用以下命名约定定义特定于配置文件的属性:application-{profile}.properties。

需要在其中定义配置文件特定属性application-{profile}.properties 并声明活动配置文件

您可以使用spring.profiles.active Environment属性来指定哪些配置文件处于活动状态。

为了回答您的问题,当前活动配置文件的属性值将被连接到 bean。另请注意

特定于配置文件的属性从与标准 application.properties 相同的位置加载,特定于配置文件的文件总是覆盖非特定文件,无论特定于配置文件的文件是在打包的 jar 内部还是外部。

如果指定了多个配置文件,则应用最后获胜策略。例如,由 spring.profiles.active 属性指定的配置文件添加在通过 SpringApplication API 配置的配置文件之后,因此具有优先权。

在您的情况下,定义配置文件特定属性的理想方法是

应用程序-dev.properties

应用程序-test.properties

应用程序-prod.properties

于 2020-03-11T06:41:43.590 回答