Java/Gradle读取外部配置文件

mik*_*010 11 java gradle

我的项目结构如下所示.我不希望将配置文件包含为资源,而是在运行时读取它,以便我们可以简单地更改设置而无需重新编译和部署.我的问题是两件事

  1. 尽管我尝试了各种方法,但阅读文件仍然无法正常工作(请参阅我正在尝试的下面的当前实现)
  2. 使用gradle时,我是否需要告诉它如何构建/或部署文件以及在哪里?我认为这可能是问题的一部分..在进行gradle构建或尝试在Eclipse中调试时,配置文件没有被部署.

我的项目结构:

myproj\
        \src
            \main
                \config
                    \com\my_app1\
                                config.dev.properties
                                config.qa.properties
                \java
                    \com\myapp1\
                                \model\
                                \service\
                                \util\
                                    Config.java
            \test              
Run Code Online (Sandbox Code Playgroud)

Config.java:

public Config(){
        try {
            String configPath = "/config.dev.properties"; //TODO: pass env in as parameter
            System.out.println(configPath);
            final File configFile = new File(configPath);
            FileInputStream input = new FileInputStream(configFile);

            Properties prop = new Properties()
            prop.load(input);
            String prop1 = prop.getProperty("PROP1");
            System.out.println(prop1);
        } catch (IOException ex) {
            ex.printStackTrace();
        } 
    }   
Run Code Online (Sandbox Code Playgroud)

VHS*_*VHS 5

答案1.

尽管我尝试了各种方法,但阅读文件仍然无法正常工作(请参阅我正在尝试的下面的当前实现)

根据您描述的配置文件的位置,

更改

String configPath = "/config.dev.properties";

String configPath = "src\main\config\com\my_app1\config.dev.properties";

但是请先阅读第二个答案.

答案2:

使用gradle时,我是否需要告诉它如何构建/或部署文件以及在哪里?我认为这可能是问题的一部分..在进行gradle构建或尝试在Eclipse中调试时,配置文件没有被部署.

你有两个选择:

  1. config目录重命名为resources.Gradle自动在"src/main/resources"目录下构建资源.
  2. 让Gradle知道要被视为资源的附加目录.

    sourceSets {
        main {
            resources {
                srcDirs = ["src\main\config\com\my_app1"]
                includes = ["**/*.properties"]
            }
        }
     }
    
    Run Code Online (Sandbox Code Playgroud)

  • 我认为海报不希望将文件打包在 jar 中,而是希望将其放在一个目录中,无需再次解压缩和压缩即可对其进行调整 (2认同)