开发者

SpringBoot修改yml配置和加载顺序规则的示例详解

目录
  • Spring Boot 的配置加载顺序规则
    • 1. 格式优先级高于Profile
    • 2. 配置加载顺序
  • 配置方案
    • 参数形式
    • 使用配置文件(推荐,最清晰、最易维护)
    • 使用Shell脚本或BATch文件(Windows批处理)
    • 使用环境变量
  • 最佳实践建议

    Spring Boot 的配置加载顺序规则

    Spring Boot 有非常明确的配置加载顺序和优先php级规则:

    1. 格式优先级高于Profile

    对于相同名称的配置文件文件格式的优先级是固定的,与加载顺序无关:

    .properties > .yml > .yaml

    也就是说,如果同时存在 application-vipsoft.propertiesapplication-vipsoft.yml

    • application-vipsoft.properties 中的配置会覆盖 application-vipsoft.yml 中的相同配置
    • 这是由Spring Boot的设计决定的,properties文件的优先级永远高于yml/yaml文件

    2. 配置加载javascript顺序

    Spring Boot 按以下顺序加载配置(后面的覆盖前面的):

    • Jar包内的 application.yml (或application.properties)
    • Jar包内的 application-{profile}.yml
    • Jar包外(同一目录)的 application.yml
    • Jar包外(同一目录)的 application-{profile}.yml
    • Jar包外(同一目录)的 application.properties
    • Jar包外(同一目录)的 application-{profile}.properties ← 优先级最高
    • 命令行参数
    • 环境变量

    配置方案

    有时候运行好多年的系统,突然要改个配置。新的程序可能会产生BUG,那如何更新已有 yml 的值,有如下操作

    参数形式

    适合改动较少的情况

    echo on
    REM 后续命令使用的是:UTF-8编码
    echo chcp 65001
    
    title HIS API DEV 8090
    
    "%Java_HOME%\bin\java" -Dloader.path=D:\Software\JavaLib -Dfile.encoding=UTF-8 -jar his-web-1.0.0.jar --server.port=8090 --spring.profiles.active=vipsoft
    
    pause
    

    使用配置文件(推荐,最清晰、最易维护)

    这是Spring Boot应用的首选方式。将那些不常改变的参数(尤其是数据库连接、API地址等)移动到配置文件中。

    1.创建/修改 application-vipsoft.yml 文件

    由于您已经指定了 --spring.profiles.active=vipsoft,Spring Boot会自动加载 application-vipsoft.yml。将这个文件放在与您的jar包同一目录下

    server:
      port: 22588
    
    his:
      api-url: http://192.168.0.1/webservice/service.asmx?wsdl
    
    spring:
      datasource:
        his:
          url: http://192.168.0.1/webservice/service.asmx?wsdl
          username: username
          password: pwd
    
    

    2.简化后的启动命令

    现在,启动命令变得非常干净,只需要关注核心的JVM参数和配置文件激活。

    echo on
    REM 后续命令使用的是:UTF-8编码
    echo chcp 65001
    
    title HIS API DEV 8090
    
    "%JAVA_HOME%\bin\java" -Dloader.path=D:\Software\JavaLib -Dfile.encoding=UTF-8 -jar his-web-1.0.0.jar --server.port=8090 --spring.profiles.active=vipsoft
    
    pause
    

    优点:

    • 命令极其简洁,不易出错。
    • 配置与代码分离,安全性更高(尤其是密码)。
    • 修改配置无需重新打包jar文件。
    • 不同环境(如测试、生产)可以轻松使用不同的配置文件。

    使用Shell脚本或Batch文件(Windows批处理)

    对于Windows,创建一个 startup.bat 文件。

    @echo off
    title HIS API DEV 8090
    
    set JAVA_OPTS=-Dloader.path=D:\Software\JavaLib -Dfile.encoding=UTF-8
    sethttp://www.devze.com SPRING_OPTS=--spring.profiles.active=vipsoft --server.port=8090
    set HIS_OPTS=--his.api-url=http://192.168.0.1/webservice/service.asmx?wsdl
    set DS_OPTS=--spring.datasource.his.url="jdbc:sqlserver://192.168.0.2:1433;DatabaseName=XXX" --spring.datasource.his.username=username --spring.datasource.his.password=pwd
    
    echo Starting application...
    "%JAVA_HOME%\bin\java" %JAVA_OPTS% -jar his-web-1.0.0.jar %SPRING_OPTS% %HIS_OPTS% %DS_OPTS%
    
    pause
    

    优点:

    • 逻辑清晰,参数被分类设置。
    • 一键启动,避免了每次输入长命令。
    • 易于维护和修改参数。

    使用环境变量

    Spring Boot可以从环境变量中读取配置,这是一种非常云原生的做法。

    1.设置环境变量(可以在批处理文件中设置,也可以在系统高级设置中设置)

    set SPRING_DATASOURCE_HIS_URL=jdbc:sqlserver://192.168.0.2:1433;DatabaseName=XXX
    set SPRING_DAThttp://www.devze.comASOURCE_HIS_USERNAME=username
    set SPRING_DATASOURCE_HIS_PASSWORD=pwd
    set HIS_API_URL=http://192.168.0.1/webservice/service.asmx?wsdl
    

    注意:Spring Boot将大写环境变量中的 _ 视为配置中的 .,例如 SPRING_DATASOURCE_HIS_URL 对应 spring.datasource.his.url。

    2. 启动命令

    echo on
    REM 后续命令使用的是:UTF-8编码
    echo chcp 65001
    
    title HIS API DEV 8090
    
    "%JAVA_HOME%\bin\java" -Dloader.path=D:\Software\JavaLib -Dfile.http://www.devze.comencoding=UTF-8 -jar his-web-1.0.0.jar --server.port=8090 --spring.profiles.active=vipsoft
    
    pause
    

    优点:

    • 安全性高,敏感信息(如密码)不出现在命令行或配置文件中。
    • 配置非常灵活,特别适合docker、Kubernetes等容器化部署。

    最佳实践建议

    • 检查jar包内:先用解压软件查看jar包内是否已有 application-vipsoft.yml
    • 保持一致:外部配置文件格式尽量与内部保持一致
    • 外部配置优先:将需要修改的配置放在jar包外部的配置文件中,这样升级jar包时配置不会丢失
    • 敏感信息处理:密码等敏感信息最好不要写在配置文件中,而是通过环境变量或命令行参数传入

    最终建议:检查jar包内的配置格式,然后在外部使用相同格式的配置文件,这样最清晰易懂。

    到此这篇关于SpringBoot修改yml配置和加载顺序规则的示例详解的文章就介绍到这了,更多相关SpringBoot修改配置加载顺序内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜