博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法
阅读量:4635 次
发布时间:2019-06-09

本文共 3236 字,大约阅读时间需要 10 分钟。

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

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

测试结果:

String path = System.getProperty("user.dir");System.out.println(path);String outpath = path + "/config/";System.out.println(outpath);Properties properties = new Properties();InputStream in = new FileInputStream(new File(System.getProperty("user.dir")+File.separator+"config"+File.separator+"application.properties"));try {    properties.load(in);} catch (IOException e) {    e.printStackTrace();}String activemqConnection = properties.getProperty("activemq.connection");System.out.println(activemqConnection);------------D:\javaworkspace\jar>java -jar atomintl-sendemail-0.0.1-SNAPSHOT.jarD:\javaworkspace\jarD:\javaworkspace\jar/config/tcp://192.168.24.15:61616D:\javaworkspace\jar>cd ..D:\javaworkspace>java -jar jar/atomintl-sendemail-0.0.1-SNAPSHOT.jarD:\javaworkspaceD:\javaworkspace/config/Exception in thread "main" java.io.FileNotFoundException: D:\javaworkspace\config\application.properties (系统找不到指定的路径。)

实例代码

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启动读取外部配置文件,只需要在外面加一层配置文件覆盖默认的即可,不用修改代码。

 

转载于:https://www.cnblogs.com/zdz8207/p/java-jar-springboot-config.html

你可能感兴趣的文章
android viewpage预加载和懒加载问题
查看>>
android 去掉标题栏、状态栏、横屏
查看>>
android studio : clang++.exe: error: invalid linker name in argument '-fuse-ld=bfd
查看>>
VMware安装Centos7后有线线缆被拔出
查看>>
关于在smarty中实现省市区三级联动
查看>>
用数据辅助设计-搜索中的实践
查看>>
光荣之路测试开发面试linux考题之四:性能命令
查看>>
计算本年 本月 本周的起始日期
查看>>
hdu 3177贪心
查看>>
leetcode 268
查看>>
Module 的语法
查看>>
linux
查看>>
多线程的使用
查看>>
k-means k均值聚类的弱点/缺点
查看>>
《离散数学》双语专业词汇表 名词术语中英文索引
查看>>
Python初步
查看>>
【MFC】vs2013_MFC使用文件之15.mfc 按钮CBitmapButton的使用
查看>>
QGLViewer 编译安装步骤
查看>>
配置Mysql实现主从复制与读写分离
查看>>
易货Beta版本发布说明
查看>>