覆盖作为jar的一部分的application.properties中的spring属性

时间:2016-09-13 22:20:09

标签: spring-boot jar spring-cloud

我正在开发一个spring boot应用程序(让我们调用这个MyLib)。它使用spring-cloud-stream。我的想法是,这个应用程序将被另一个Java应用程序用作jar(让我们称之为MyApp。它可能不是一个弹簧启动)。我尝试做的是MyApp将指定MyLib中代码将使用的spring.cloud.stream.bindings.<channel>.destination

这可以实现吗?

1 个答案:

答案 0 :(得分:0)

从外部jar加载application.properties

我不知道具体是spring.cloud.stream.bindings,但是Spring Boot应用程序可以从类路径上的多个位置加载application-${profile}.properties

Spring Boot documentation

  

SpringApplication将从application.properties加载属性   将文件放在以下位置并将它们添加到Spring中   环境:

     
      
  • 当前目录的A / config子目录。
  •   
  • 当前目录
  •   
  • 类路径/配置包
  •   
  • 类路径根
  •   
     

列表按优先顺序排列(在位置中定义的属性)   列表中的较高值会覆盖较低位置中定义的值。

     

...

     

默认搜索路径   classpath:,classpath:/ config,file :, file:config /总是使用,   与spring.config.location

的值无关

换句话说,application-${profile}.properties文件必须位于./内的./config/MyApp.jar

您还可以使用spring.config.location定义其他查找文件夹,但这必须在运行时完成:

  很早就会使用

spring.config.namespring.config.location来确定哪些文件   必须加载,因此必须将它们定义为环境   属性(通常是OS env,系统属性或命令行参数)。

查询订单

你提到过 :

  

覆盖application.properties中的spring属性

考虑属性的顺序如下(from spring documentation):

  
      
  • @TestPropertySource测试注释。
  •   
  • 命令行参数。
  •   
  • 来自SPRING_APPLICATION_JSON的属性(嵌入在环境变量或系统属性中的内联JSON)
  •   
  • ServletConfig init参数。
  •   
  • ServletContext init参数。
  •   
  • 来自java:comp / env。
  • 的JNDI属性   
  • Java系统属性(System.getProperties())。
  •   
  • 操作系统环境变量。
  •   
  • 一个只有随机属性的RandomValuePropertySource。*。
  •   
  • 打包jar之外的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)
  •   
  • 打包在jar中的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)
  •   
  • 打包jar之外的应用程序属性(application.properties和YAML变体)。
  •   
  • 打包在jar中的应用程序属性(application.properties和YAML变体)。
  •   
  • @Configuration类上的@PropertySource注释。
  •   
  • 默认属性(使用SpringApplication.setDefaultProperties指定)。
  •