前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在 Jar 包外管理 Spring Boot 应用的配置文件

如何在 Jar 包外管理 Spring Boot 应用的配置文件

作者头像
happyJared
发布2019-03-15 16:26:10
2.1K0
发布2019-03-15 16:26:10
举报
文章被收录于专栏:happyJaredhappyJared

常见的 spring boot 应用多是打包成 jar 包运行在服务器,这包含了一系列的配置文件以及第三方的依赖,不过这也引发了常见的思考:除application.properties之外的其它配置文件变动,是否需要重新打包再重新部署?如日志配置文件、mybatis 的 xml 文件。

先来看看 Spring Boot 是如何加载核心配置文件的,在org.springframework.boot.context.config.ConfigFileApplicationListener的内部类Loaderload()可以查看具体实现,以下优先级从高到低依次为:

  1. 通过启动命令指定:java -jar -Dspring.config.location=xxx/application.properties demo.jar
  2. Jar 包同级目录下的 config 目录
  3. Jar 包同级目录
  4. classpath (resources) 同级目录下的 config 目录
  5. classpath (resources) 目录

留意到这段代码定义:

代码语言:javascript
复制
    // 默认的搜索路径,对应了上面描述的优先级
    private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

而 classpath 路径是可以指定的,在Application启动类添加如下代码,来看看默认的 jar 应用程序对应的 resources 位置:

代码语言:javascript
复制
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        System.out.println(DemoApplication.class.getResource("/"));
    }

}

相应的输出结果为:jar:file:/C:/xxx/demo.jar!/BOOT-INF/classes!/

因为java -jar所指定及对应的优先级是最高的,所以启动时设定 classpath 就可以达到想要的效果:将配置文件从 Jar 包独立出来进行管理

以下是该对应扩展方式的几种说明:

  • -Xbootclasspath: 完全替换基本的 Java class 搜索路径(不常用)
  • -Xbootclasspath/p: 将 classpath 添加在核心class搜索路径前面(不常用,避免引起冲突)
  • -Xbootclasspath/a: 将classpath添加在核心class搜索路径后面 (常用

最后,这里通过指定当前目录下的resources文件夹进行了简单测试:java -jar -Xbootclasspath/a:./resources/ demo.jar,观察启动日志是否可以读取 logback 配置:

resources
resources

resources

相应的输出及日志为:file:/C:/xxx/demo-project/target/resources/,结果符合预期。

测试
测试

测试

参考链接

springboot项目实现jar包外配置文件管理 -jar参数运行应用时,设置classpath的方法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.03.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档