JAR包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法(优先级配置)_jar包怎样读取外配置文件application.properties-程序员宅基地

技术标签: JAVA  Nginx  spring boot  java  jar  SpringBoot  

jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法 

用系统属性System.getProperty("user.dir")获得执行命令的目录(网上很多说是jar包的当前目录是错误的

实例源码:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class TestConfigPath {

    public static void main(String[] args) {
        String path = System.getProperty("user.dir");
        System.out.println(path);
        Properties properties = TestConfigPath.getProperties("application.properties");
        String activemqConnection = properties.getProperty("activemq.connection");
        System.out.println(activemqConnection);
    }

    public static Properties getProperties(String fileName) {
        try {
            String outpath = System.getProperty("user.dir")+File.separator+"config"+File.separator;//先读取config目录的,没有再加载classpath的
            System.out.println(outpath);
            Properties properties = new Properties();
            InputStream in = new FileInputStream(new File(outpath + fileName));
            properties.load(in);
            return properties;
        } catch (IOException e) {
            System.out.println(e.getMessage());
            try {
                Properties properties = new Properties();
                InputStream in = TestConfigPath.class.getClassLoader().getResourceAsStream(fileName);//默认加载classpath的
                properties.load(in);
                return properties;
            } catch (IOException es) {
                System.out.println(es.getMessage());
                return null;
            }
        }
    }
}

注:如果在docker里面运行在jar同目录下放config目录也是读取不到的,Dockerfile里需要加上一句:ADD config/ /config/

然后读出来的路径是://config/application.properties

/config/application.properties
/config/application.properties (No such file or directory)

docker config里面的配置文件优先级比jar包的高,会覆盖jar包里默认的配置,部署到其他服务器环境只需要修改对应配置就可以了
Dockerfile配置里需要加上:ADD config/ /config/

springboot读取外部配置文件的方法,如下优先级:
第一种是在执行命令的目录下建config文件夹。(在jar包的同一目录下建config文件夹,执行命令需要在jar包目录下才行),然后把配置文件放到这个文件夹下。
第二种是直接把配置文件放到jar包的同级目录。
第三种在classpath下建一个config文件夹,然后把配置文件放进去。
第四种是在classpath下直接放配置文件。
springboot默认是优先读取它本身同级目录下的一个config/application.properties 文件的。
在src/main/resources 文件夹下创建的application.properties 文件的优先级是最低的

所以springboot启动读取外部配置文件,只需要在外面加一层配置文件覆盖默认的即可,不用修改代码。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bj_chengrong/article/details/103185706

智能推荐

Linux期末考试题库(超全)-程序员宅基地

文章浏览阅读8w次,点赞339次,收藏2.4k次。Linux期末考试题库选择题在创建Linux分区时,一定要创建( D )两个分区A. FAT/NTFS  B. FAT/SWAP  C. NTFS/SWAP  D.SWAP/根分区在Red Hat Linux 9 中,系统默认的(A)用户对整个系统拥有完全的控制权。A. root  B. guest  C. administrator  D.supervistor.当登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么( B )A. NID B. PID _linux期末考试题库

WIN10下VS+Fortran+Intel MPI安装、配置、运行笔记_ivf 2018-程序员宅基地

文章浏览阅读2w次,点赞30次,收藏143次。引子笔者因项目需求,需要做Fortran77代码的MPI并行,因此在 WIN10 下安装了 VS2017 和 Intel Parallel Studio XE 2018 Update 3 Cluster Edition for Windows(以下简称IVF2018Cluster) ,并做相应配置,最终以MPI并行的Hello World程序单机环境运行验证。IVF2018Cluster 版本..._ivf 2018

Optimizing Program Performance-- Capability and limitation of Optimizing Compilers_capability andlimitation-程序员宅基地

文章浏览阅读759次。编译器优化代码的时候, 并不是所有的代码都可以优化的。 有下面两种情况,不能优化。 1. Memory aliasing2. function call 例子11 void twiddle1(int *xp, int *yp)2 {3 *xp += *yp;4 *xp += *yp;5 }67 _capability andlimitation

mysql链接远程报错10061_mysql远程连接报10061-程序员宅基地

文章浏览阅读1.9k次。安装mysql后本地链接可以,远程无法连接。1进入mysql2切换mysql3查看root信息最后发现原因是root用户的权限设置是localhost即只允许本地连接。1更新用户表2刷新权限之后再查看发现root用户的权限已经是 % 了,代表所有访问权限。之后再连接就可以连接了。..._mysql远程连接报10061

Win10 VS2019情况下 安装Caffe_vs 需要安装caffe-程序员宅基地

文章浏览阅读5k次。在VS2019下选择安装MSVC v140 生成工具(VS2015的生成工具还是要安装一下的,比较省事。)安装Windows 8.1 SDK(需要这个SDK,否则要改一堆东西吧。)安装cmake,最新版即可。打开VS2015 x64 native cmd设置环境变量set path=c:\Program Files (x86)\Microsoft Visual Studio\2019\..._vs 需要安装caffe

WARNING: Logging before InitGoogleLogging() is written to STDERR 解决办法-程序员宅基地

文章浏览阅读1.2w次。这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar_warning: logging before initgooglelogging() is written to stderr

随便推点

mysql必知必会第5版pdf_每周一书《SQL必知必会 (第4版)》分享-程序员宅基地

文章浏览阅读8.1k次。内容简介SQL语法简洁,使用方式灵活,功能强大,已经成为当今程序员不可或缺的技能。本书是深受世界各地读者欢迎的SQL经典畅销书,内容丰富,文字简洁明快,针对Oracle、SQL Server、MySQL、DB2、PostgreSQL、SQLite等各种主流数据库提供了大量简明的实例。与其他同类图书不同,它没有过多阐述数据库基础理论,而是专门针对一线软件开发人员,直接从SQL SELECT开始,讲述...

通过域名访问路由器配置界面的功能实现_用域名访问路由器 原理-程序员宅基地

文章浏览阅读2.2k次。需求背景:目前路由器的配置界面是通过输入网关IP来访问,市面上其他的路由器可以通过域名来访问,例如腾达路由器的配置界面地址 routendawifi.com。所以我们也希望支持域名访问路由器的配置界面。如在浏览器中输入www.9344base.cn 就可以访问路由器界面。实现原理:一次正常的域名访问流程如下:(1) 客户端向DNS服务器发送域名解析请求,该请求会先发到路由器。(2) 路由器收到DNS请求后会对其进行转发,发给外网的DNS服务器。(3) 外网的DNS服务器收到请求后,进行解析,之_用域名访问路由器 原理

UE4 动画系统 源码及原理剖析_updatemorphvertexbuffer-程序员宅基地

文章浏览阅读1.4w次,点赞33次,收藏105次。UE4 动画系统 动画基础概念 3D模型动画的基本原理是让模型中各顶点的位置随时间变化。主要种类有Morph(变形)动画,关节动画和骨骼蒙皮动画(SkinnedMesh)。从动画数据的角度来说,三者一般都采用关键帧技术,即只给出关键帧的数据,其他帧的数据使用插值得到。但由于这三种技术的不同,关键帧的数据是不一样的。Morph(渐变,变形)动画是直接指定动画每一帧的顶点位置,其动画关键中存储的是Mesh所有顶点在关键帧对应时刻的位置。 关节动画的模型不是一个整体的Mesh,而是分成很多部分(_updatemorphvertexbuffer

求数组最小的k个数_求长度为n的数组最小k的个数-程序员宅基地

文章浏览阅读350次。目录1. 利用partition函数的O(n)解法实现时间复杂度分析优缺点2. 利用最大堆的O(nlogk)解法实现时间复杂度分析优缺点写两种聪明的解法(更推荐第二种,原因见优缺点)。计数或者排序这些朴素的解法就不说了。1. 利用partition函数的O(n)解法实现定义partition函数,partition函数必须满足:传入一个数组和一个范围,返回一个index,在index左边..._求长度为n的数组最小k的个数

Spring MVC手动注册requestMapping_spring如何注册actuator接口到requestmapping-程序员宅基地

文章浏览阅读4.8k次,点赞3次,收藏18次。 之前写过一个Api Mock的小工具,没有什么高大上的技术,比较值得一提的是手动注册requestMapping。一般情况下,controller都是提前写好的,例如: /** * 检查接口序号是否已经占用 * */ @RequestMapping(value = "/getApiInfoByIndex.do", method = RequestMet..._spring如何注册actuator接口到requestmapping

使用Nodejs 的http-proxy 模块做代理服务器的尝试_nodejs 使用http-proxy-middleware代理中间件怎么过滤options请求-程序员宅基地

文章浏览阅读1.3w次。我今天突然想到一个问题,如果使用nginx 作为nodejs 的代理服务器,那么如果nodejs的应用需要进行升级的话,如何实现热更新。 第一种办法:使用nodejs搭建一个代理服务器,通过对请求的监听来判断当前的nodejs服务实例的工作情况(有多少未处理完的请求)来过滤请求,比如我有三个服务实例,1,2,3,我现在想进行升级,需要对服务进行重启,但是三个实例不能同时重启,这个时候,就需要_nodejs 使用http-proxy-middleware代理中间件怎么过滤options请求

推荐文章

热门文章

相关标签