java读取jar外部的配置文件

一、为什么将配置文件放在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文件中,具体方法可以参考网上。

你可能感兴趣的:(java读取jar外部的配置文件)