一、为什么将配置文件放在java project外?
在java应用中经常会用到配置文件,配置文件中定义了程序运行所需要的一些配置信息,而配置文件既以放在java project内部(在给java project打jar包时将配置文件打在jar包内部),也可以放在java project外部。
在生产环境中比较可取的是:配置文件放在java project外部。这是因为:
当一个java程序运行在生产环境时,通常由运维人员来负责维护程序,如果有些配置信息需要修改,维护人员更改配置文件并重启程序即ok了。显而易见如果配置文件打包在jar包内部的话,修改配置文件就很繁琐,有时候甚至需要开发人员重新修改配置文件、重新打jar包并替换就jar。但是这种行为在生产环境中通常是不被允许的,因此就需要将配置文件放在jar包外部。
那么如何读取jar包外的配置文件呢?其和读取jar包内的配置文件不同。关于读取jar包内的配置文件方法可以参考:https://www.jianshu.com/p/bd7d7a2891f8
二、java读取jar包外的配置文件
2.1 在intellij idea中新建一个Java project(基于maven)
2.2 新建配置文件
step 1. intellij idea中选中工程(即图中的test123)并右击 --> new --> directory,输入目录名res(也可以是其他命名)。
step 2. 选中新建的res目录并右击 --> mark directory as --> resources root,即可得到图中的res目录(注意res右下角出现了黄色的横杠)。(该步骤很关键)
step 3. 选中res目录并右击 --> new ---> file,输入myCanal.properties(myCanal也可以改为其他),打开myCanal.properties并输入配置信息并保存,例如:
mysqlInstanceName=test1
mysqlSchemaName=alex
其中mysqlInstanceName和mysqlSchemaName都为属性的键key, test1和alex分别为其对应的属性值value。
2.3 读取配置文件的业务代码
import java.io.*;
import java.util.Properties;
public class Main {
public static void main(String[] args)throws IOException {
Properties prop =new Properties();
InputStream inputStream =null;
try {
prop.load(new FileInputStream("res/myCanal.properties"));
/* 注释:也可以直接在src/main/resources目录下新建配置文件,但是new FileInputStream("res/myCanal.properties")需要改为new FileInputStream("src/main/resources/myCanal.properties") */
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
System.out.println(prop.getProperty("mysqlSchemaName"));
System.out.println(prop.getProperty("mysqlInstanceName"));
}
}
2.4 maven打包jar(配置文件不需要打入jar包)
打jar包方法网上有很多
2.5 将打包好的jar和intellij idea的test123工程下的res文件夹(包含配置文件)复制到*同一级目录下*(服务器或本机上运行该程序的地方)
(注意是*同一级目录下*,这很关键,否则程序会找不到该配置文件)
2.6 启动jar读取配置文件
在jar所在的路径,运行下面命令即可:
java -classpath abc-1.0.jar Main
其中abc-1.0.jar为打包好的jar,Main为主类
当然主类也可以直接定义在pom.xml文件中,具体方法可以参考网上。