javascript
bean覆盖 springboot_Springboot配置加载覆盖值顺序
Springboot允許您將配置外部化,以便在不同的環境中使用相同的應用程序代碼。可以使用properties文件、yaml文件、環境變量和命令行參數來外部化配置。屬性值可以通過使用@Value注釋直接注入bean,通過Spring的環境抽象訪問,或者通過@ConfigurationProperties綁定到結構化對象。
Springboo使用了一個非常特殊的 PropertySource 順序,該順序設計為允許合理地覆蓋值。屬性按以下順序考慮:
1、開發工具主目錄上的全局設置屬性(~/.spring-boot-devtools.properties,當開發工具處于活動狀態時)
2、測試中的@TestPropertySource注解
3、測試的屬性。在@SpringBootTest和測試注釋上提供,用于測試應用程序的特定部分。
4、命令行參數
5、SPRING_APPLICATION_JSON的屬性(嵌入在環境變量或系統屬性中的內聯json)。
6、ServletConfig 初始化參數
7、ServletContext 初始化參數
8、java:comp/env的JNDI參數
9、Java系統屬性(System.getProperties()).
10、操作系統環境變量.
11、RandomValuePropertySource,其屬性僅為random.*。
12、在打包的JAR之外配置特定的應用程序屬性(application-{profile}.properties和yaml變量)。
13、在打包的JAR之中配置特定的應用程序屬性(application-{profile}.properties和yaml變量)
14、打包JAR之外的應用程序屬性(application.properties和yaml變量)。
15、打包JAR之內的應用程序屬性(application.properties和yaml變量)。
16、@PropertySource注解在你的@Configuration 類.
17、默認屬性(通過設置SpringApplication.setDefaultProperties指定)。
為了提供一個具體的示例,假設您開發了一個使用name屬性的@Component,如下例所示:
import org.springframework.stereotype.*;
import org.springframework.beans.factory.annotation.*;
@Component
public class MyBean{
@Value("${name}")
private String name;
// ...
}
在應用程序類路徑(例如,在JAR中)上,可以有一個application.properties文件,該文件為name提供了一個合理的默認屬性值。在新環境中運行時,可以在jar外部提供application.properties文件來覆蓋名稱。對于一次性測試,您可以使用特定的命令行開關(例如,java -jar app.jar --name="Spring")啟動。
可以在命令行上使用環境變量提供SPRING_APPLICATION_JSON屬性。例如,可以在un*x shell中使用以下行:
$ SPRING_APPLICATION_JSON='{"acme":{"name":"test"}}' java -jar myapp.jar
在前面的示例中,您將在Spring環境中得到 acme.name=test。您還可以在系統屬性中以spring.application.json的形式提供json,如下例所示:
$java -Dspring.application.json='{"name":"test"}' -jar myapp.jar
還可以使用命令行參數提供JSON,如下例所示:
$java -jar myapp.jar --spring.application.json='{"name":"test"}'
您還可以將JSON提供為JNDI變量,如下:java:comp/env/spring.application.json
總結
以上是生活随笔為你收集整理的bean覆盖 springboot_Springboot配置加载覆盖值顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: melon是什么意思(melon是什么意
- 下一篇: springboot 注解动态赋值_ja