• springboot配置


    一、配置文件的加载顺序

     SpringApplication从以下位置的application.properties文件加载属性,并将它们添加到Spring Environment中去,优先级如下:

    1. 当前目录的/config子目录(src\config)
    2. 当前目录(跟src目录同级别)
    3. classpath /config包(是指src\main\resources\config)
    4. classpath 路径(跟src\main\resources目录)

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

    二、切换别的配置文件

          如果不喜欢application.properties作为配置文件名,则可以通过指定spring.config.name环境属性来切换到另一个文件名。您还可以使用spring.config.location环境属性(以逗号分隔的目录位置或文件路径列表)来引用显式位置。以下示例显示如何指定其他文件名:

    $ java -jar myproject.jar --spring.config.name=myproject
    

    以下示例显示如何指定两个位置:

    $ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
    

    三、属性中的占位符

      application.properties中的值在使用时通过现有的Environment进行过滤,因此您可以返回先前定义的值(例如,从系统属性中)。

    1. app.name=MyApp
    2. app.description=${app.name} is a Spring Boot application

    四、使用ymal

     YAML是JSON的超集,因此是用于指定分层配置数据的便捷格式。只要在类路径上有SnakeYAML库,SpringApplication类就会自动支持YAML作为属性的替代 。

    Spring Framework提供了两个方便的类,可用于加载YAML文档。YamlPropertiesFactoryBean将YAML加载为PropertiesYamlMapFactoryBean将YAML加载为Map

    例如:

    1. environments:
    2. dev:
    3. url: http://dev.example.com
    4. name: Developer Setup
    5. prod:
    6. url: http://another.example.com
    7. name: My Cool App

    前面的示例将转换为以下属性:

    1. environments.dev.url=http://dev.example.com
    2. environments.dev.name=Developer Setup
    3. environments.prod.url=http://another.example.com
    4. environments.prod.name=My Cool App

    YAML列表表示为具有[index]解除引用的属性键。例如,考虑以下YAML:

    1. my:
    2. servers:
    3. - dev.example.com
    4. - another.example.com

    前面的示例将转换为这些属性:

    1. my.servers[0]=dev.example.com
    2. my.servers[1]=another.example.com

    绑定到实体类上:

    1. @ConfigurationProperties(prefix="my")
    2. public class Config {
    3. private List servers = new ArrayList();
    4. public List getServers() {
    5. return this.servers;
    6. }
    7. }

    缺点:

    无法使用@PropertySource注释加载YAML文件。因此,如果您需要以这种方式加载值,则需要使用属性文件。

    五、对象配置

    例如,假设一个MyPojo对象,其namedescription属性默认为null。以下示例公开了来自AcmePropertiesMyPojo对象的列表:

    1. @ConfigurationProperties("acme")
    2. public class AcmeProperties {
    3. private final List list = new ArrayList<>();
    4. public List getList() {
    5. return this.list;
    6. }
    7. }

    配置:

    1. acme:
    2. list:
    3. - name: my name
    4. description: my description
    5. ---
    6. spring:
    7. profiles: dev
    8. acme:
    9. list:
    10. - name: my another name

    对于Map属性,您可以绑定从多个源中提取的属性值。但是,对于多个源中的相同属性,使用具有最高优先级的属性。以下示例从AcmeProperties公开Map

    1. @ConfigurationProperties("acme")
    2. public class AcmeProperties {
    3. private final Map map = new HashMap<>();
    4. public Map getMap() {
    5. return this.map;
    6. }
    7. }

    请考虑以下配置:

    1. acme:
    2. map:
    3. key1:
    4. name: my name 1
    5. description: my description 1
    6. ---
    7. spring:
    8. profiles: dev
    9. acme:
    10. map:
    11. key1:
    12. name: dev name 1
    13. key2:
    14. name: dev name 2
    15. description: dev description 2

  • 相关阅读:
    产品经理-需求分析(三)
    mybatisplus入门
    剑指offer 52 两个链表的第一个公共结点
    大数据之就业岗位
    《Mycat分布式数据库架构》之高可用集群
    Visual Studio 2022 设置 PySide6 扩展工具
    Orphaned pod found - but volume paths are still present on disk的处理
    java158-线程的常用方法yield,优先级
    ReentrantLock与synchronized区别之比较(面试)
    亚马逊云科技大语言模型下的六大创新应用功能
  • 原文地址:https://blog.csdn.net/weixin_42172472/article/details/133777064