Java spring引导属性,具有来自依赖项的配置文件

Java spring引导属性,具有来自依赖项的配置文件,java,spring,spring-boot,Java,Spring,Spring Boot,问题: 我在软件中有3个部分: 客户服务 客户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/reso

问题:

我在软件中有3个部分:

  • 客户服务
  • 客户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找到配置。连接器类已加载,但问题是它未加载属性文件

研究

我发现多个属性文件不能具有相同的名称(例如,客户端应用程序-{profile}.properties与连接器中的属性冲突),因此我尝试将targetConnector的应用程序-{profile}.properties重命名为应用程序连接器-{profile}.properties
属性仍然没有加载(这是有意义的,因为我没有例如连接器开发配置文件,但我的配置文件只是命名为开发

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

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

问题

我的问题实际上有三层:

  • 如何在依赖项jar中加载属性文件
  • 如果属性文件的名称与application.properties不同,如何加载属性文件的配置文件版本?e、 g.应用程序-连接器特性
  • 如何将问题1和问题2的答案结合起来,在jar中加载属性的概要版本 如果需要进一步解释,请询问

    回答

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

    为了使用特定的配置文件运行,您可以使用选项
    -spring.profiles.active=dev
    运行

    如果您没有使用配置文件运行,它将在
    application.properties
    中加载您似乎没有的默认配置文件

    此外,建议始终使用application.properties,并将公共属性和默认值放入其中,您将在其他属性文件中覆盖这些属性


    另一个错误是如何使用
    @Value
    注释分配属性,例如,您需要使用
    @Value(${PROPERTY\u FROM\u properties\u FILE}”)
    为了使用特定的配置文件运行,您可以使用选项
    -spring.profiles.active=dev
    运行

    如果您没有使用配置文件运行,它将在
    application.properties
    中加载您似乎没有的默认配置文件

    此外,建议始终使用application.properties,并将公共属性和默认值放入其中,您将在其他属性文件中覆盖这些属性


    另一个错误是如何使用
    @Value
    注释分配属性,您需要使用
    @Value(${PROPERTY\u FROM\u properties\u FILE}”)

    您使用的是@Configuration annotated类。也许每个个人资料你都可以有一个。下面是一个例子:

    @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(“”)


    一旦你有了配置类,Spring将使用你想要的配置类,只需填写-Spring.profiles.active=profileA(或者你在@profile(“”)注释中写的配置文件的名称)

    你正在使用@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(“”)


    一旦你有了配置类,Spring就会使用你想要的配置类,只需填写-Spring.profiles.active=profileA(或者你在@profile(“”)注释中写的配置文件的名称)

    我想这行@PropertySource({“classpath*:application-connector-dev.properties”})中有一个输入错误
    请删除星号进行检查。

    我认为@PropertySource({“classpath*:application-connector-dev.properties})这一行中有一个输入错误
    请通过删除星号进行检查。

    在显式加载示例中,您是否尝试删除
    *
    类路径之后的
    ,即
    @PropertySource({“classpath:application-connector-dev.properties”})
    在显式加载示例中,您是否尝试删除
    *
    类路径之后的
    ,ie
    @PropertySource({“classpath:application-connector-dev.properties”})
    我用你的方法配置一个包含所需值的简单类并从中创建bean,现在它工作正常了我用你的方法配置一个包含所需值的简单类并从中创建bean,现在,它可以很好地删除星号,spring找到了文件,感谢您将此指向外部,同时删除星号,spring找到了文件,感谢您的指向