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.jar
D:\javaworkspace\jar
D:\javaworkspace\jar/config/
tcp://192.168.24.15:61616 D:\javaworkspace\jar>cd .. D:\javaworkspace>java -jar jar/atomintl-sendemail-0.0.1-SNAPSHOT.jar
D:\javaworkspace
D:\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启动读取外部配置文件,只需要在外面加一层配置文件覆盖默认的即可,不用修改代码。

jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法的更多相关文章

  1. jar包调用jar包内部和外部的配置文件

    http://blog.csdn.net/lpftobetheone/article/details/32689467 **************************************** ...

  2. jar包中的类如何读取包内和包外的配置文件

    最近将代码打包成jar包,关于如何处理读取配置文件的问题特此记录一下. out.properties a.jar -com -a.class -in.properties 如上所示,out.prope ...

  3. 解决springboot读取jar包中文件的问题

    转载自: https://www.oschina.net/question/2272552_2269641 https://stackoverflow.com/questions/25869428/c ...

  4. 拒绝FileNotFoundException!总结了这几个读取jar包外配置文件的知识点

    前言 相信很多人遇到过这个问题:本地运行的好好的程序,怎么部署到线上就报找不到配置呢? 初识getResource 案例一 FieldMapConfig.class.getResource(" ...

  5. 读取Jar包中的资源问题探究

    最近在写一个可执行jar的程序,程序中包含了2个资源包,一个是images,一个是files.问题来了,在Eclipse里开发的时候,当用File类来获取files下面的文件时,没有任何问题.但是当程 ...

  6. 读取jar包里面的文件

    一.最近做项目的时候,师兄要求读取jar包里面的java文件.在网上查了各种文件以后,终于完成了,在这里和各位朋友分享一下. (一)找到jar包所在的位置. String path="XXX ...

  7. 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)

    转自:https://www.cnblogs.com/sxdcgaq8080/p/7727249.html   接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p ...

  8. SpringBoot读取war包jar包Resource资源文件解决办法

    SpringBoot读取war包jar包Resource资源文件解决办法 场景描述 在开发过程中我们经常会碰到要在代码中获取资源文件的情况,而我在最近在SpringBoot项目中时碰到一个问题,就是在 ...

  9. 如何读取jar包外的properties文件和log4j.properties

    http://jrails.iteye.com/blog/1705464 ***************************************' 一般在项目中使用properties配置文件 ...

随机推荐

  1. 【JMeter】获取JDBC响应做接口关联

    1:从sql表中将需要取的数据查出来 2:我们需要把这个id为4451的数据从sql里面取出来,传到下一个sql里面,执行删除 3:写一个接口的传参有些不同,变成了var_id_1.var_id是之前 ...

  2. Always On 集群监听创建失败问题

    创建SQL Server Always On监听失败如下 需要增加:1.登陆服务器的域账号创建计算机对象的权限,2.集群名称账号在域环境中创建计算机对象的权限 如果是重建监听:需要3.先删除原先的监听 ...

  3. 显示日历的指令:cal

    1.显示日历的指令:cal (1)参数: (2)实例:

  4. 论文阅读-使用隐马模型进行NER

    Named Entity Recognition in Biomedical Texts using an HMM Model  2004年,引用79 1.摘要 Although there exis ...

  5. 【LeetCode每天一题】Median of Two Sorted Arrays(两数组中的中位数)

    There are two sorted arrays nums1 and nums2 of size m and n respectively.  Find the median of the tw ...

  6. print()与println()区别

    print 不会换行,println会换行 例如:print(a):print(b):结果为: abprintln(a):println(b):结果为: a b

  7. myloader原理介绍

    myloader恢复主要流程   1.首先由myloader主线程完成建库建表,依次将备份目录下建库和建表文件执行应用到目标数据库实例中:   2.接着myloader主线程会生成多个工作线程,由这些 ...

  8. cocos游戏开发小白教程网站

    <Quick-Cocos2d-x v3.3小白书系列教程> <Quick-Cocos2d-x初学者游戏教程>

  9. Oracle如何查询当前的crs/has自启动状态

    我们知道在某些停机测试场景,是需要人为禁用crs/has的自启动的,防止过程中主机反复重启对数据库集群造成影响. 使用crsctl disable/enable crs命令可以禁用/启用crs的自启动 ...

  10. MACD 下0轴后,强力=7上0轴的实例:

    MACD 下0轴后,强力=7上0轴的实例: 虽然再上0轴,但是由于是强力上,必须有缓解期.缓解期后MACD开始收口,虽然没有下0轴,但是开始趋向死叉. 由于并没有很强的做多市场环境,MACD只是略高于 ...