zoukankan      html  css  js  c++  java
  • jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法

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

  • 相关阅读:
    游戏引擎架构笔记之开篇
    Hacker(六)----黑客藏匿之地--系统进程
    Hacker(五)----黑客专用通道--->端口
    Hacker(四)----查看计算机的IP地址
    Hacker(三)之黑客定位目标---IP
    黑客必备技能
    黑客和骇客
    上海公积金提取办法(外地购房,公积金在上海)
    Python入门-----Windows安装
    Python入门-----介绍
  • 原文地址:https://www.cnblogs.com/zdz8207/p/java-jar-springboot-config.html
Copyright © 2011-2022 走看看