jar包读取jar包内部和外部的配置⽂件,springboot读取外部配置⽂件的⽅法jar包读取jar包内部和外部的配置⽂件,springboot读取外部配置⽂件的⽅法
⽤系统属性Property("user.dir")获得执⾏命令的⽬录(⽹上很多说是jar包的当前⽬录是错误的)
测试结果:
String path = Property("user.dir");
System.out.println(path);
String outpath = path + "/config/";
System.out.println(outpath);
Properties properties = new Properties();
InputStream in = new FileInputStream(new Property("user.dir")+File.separator+"config"+File.separator+"application.properties"));
try {
properties.load(in);
} catch (IOException e) {
e.printStackTrace();
}
String activemqConnection = Property("tion");
System.out.println(activemqConnection);
------------activemq重启命令
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 = Property("user.dir");
System.out.println(path);
Properties properties = Properties("application.properties");
String activemqConnection = Property("tion");
System.out.println(activemqConnection);
}
public static Properties getProperties(String fileName) {
try {
String outpath = Property("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.Message());
try {
Properties properties = new Properties();
InputStream in = ClassLoader().getResourceAsStream(fileName);//默认加载classpath的
properties.load(in);
return properties;
} catch (IOException es) {
System.out.Message());
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启动读取外部配置⽂件,只需要在外⾯加⼀层配置⽂件覆盖默认的即可,不⽤修改代码。