具有依赖项配置文件的spring boot属性

时间:2019-04-05 16:24:41

标签: java spring spring-boot

问题:

我在软件中包含3个部分:

  • 客户A服务
  • 客户B服务
  • 目标C服务

我想从A和B连接到C
我用以下设置编写了一个库:

  • / src / main / java / pkg ... / TargetConnector.java
  • / src / main / java / pkg ... / TargetConfig.java
  • /src/main/resources/application-dev.properties
  • /src/main/resources/application-tst.properties
  • /src/main/resources/application-prd.properties

我的客户A和B都有自己的来源和属性:

  • / src / main / java / pkg ... / Client {A / B} Service.java
  • / src / main / java / pkg ... / Client {A / B} Config.java
  • /src/main/resources/application-dev.properties
  • /src/main/resources/application-tst.properties
  • /src/main/resources/application-prd.properties

连接器的属性包含该服务的一些登录信息,例如

target.url=https://....
target.usr=blablabla
target.key=mySHAkey

在TargetConfig中用于预配置连接器,例如

@Value("target.url")
String url;
@Value("target.usr")
String usr;
@Value("target.key")
String key;

@Bean
public TargetConnector connector() {
  return new TargetConnector(url, usr, key);
}

现在,当我在客户端中使用连接器jar时,可以通过packagescan找到配置。连接器类已加载,但问题是它没有加载属性文件。

研究

我发现多个属性文件不能具有相同的名称(例如,客户端application- {profile} .properties与连接器中的名称冲突),因此我尝试重命名 application- {profile} .properties 到 application-connector- {profile} .properties
不管谁仍然不被加载的属性(这很有意义,因为我没有例如 connector-dev 配置文件,但是我的配置文件仅被命名为 dev )。

此外,即使我尝试使用以下方法从连接器显式加载属性文件之一:

@PropertySource({"classpath*:application-connector-dev.properties"}) 

找不到

问题

我的问题实际上是3层:

  1. 如何将属性文件完全加载到依赖项jar中?
  2. 如果属性文件的名称与application.properties不同,如何加载属性文件的概要文件版本?例如application-connector.properties
  3. 我如何结合问题1和2的答案,以将配置文件的特性加载到jar中?

如果需要进一步的解释,请询问。

答案

我接受了公认答案中给出的方法。 我刚刚为dev,tst,prd配置文件创建了3个包含所需值的配置文件,并用正确的配置文件注释了配置文件。

3 个答案:

答案 0 :(得分:1)

您正在使用@Configuration带注释的类。也许每个配置文件可以有一个。这是一个例子:

@Configuration
@Profile("profileA")
@PropertySource({"classpath:application-profileA.properties"})
public class ConfigurationProfileA{
 @Value("${target.url}")
 String url;
 @Value("${target.usr}")
 String usr;
 @Value("${target.key}")
 String key;

 @Bean
 public TargetConnector connector() {
   return new TargetConnector(url, usr, key);
 }
}

对配置文件B进行相同的操作(也许您可以更好地进行结构化,但是这里的关键点是注释@Profile(“”)和@PropertySource(“”))

一旦有了config类,Spring将通过填充-spring.profiles.active = profileA(或您在@Profile(“”)批注中编写的配置文件的名称)来使用所需的Configuration类。< / p>

答案 1 :(得分:1)

I think there is a typo in this line @PropertySource({"classpath*:application-connector-dev.properties"}) Please check by removing the asterik.

答案 2 :(得分:0)

要使用特定的配置文件运行,例如,可以使用选项:q!运行

如果不使用配置文件,它将在您似乎没有的-spring.profiles.active=dev中加载默认配置文件。

此外,建议您始终拥有一个application.properties并将通用属性和您将在其他属性文件中覆盖的默认值放入其中。

另一个错误是如何使用application.properties批注分配属性,您需要使用@Value