Java / Gradle读取外部配置文件

时间:2017-02-17 21:40:12

标签: java gradle

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

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

    myproj\
            \src
                \main
                    \config
                        \com\my_app1\
                                    config.dev.properties
                                    config.qa.properties
                    \java
                        \com\myapp1\
                                    \model\
                                    \service\
                                    \util\
                                        Config.java
                \test              
    

    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();
            } 
        }   
    

4 个答案:

答案 0 :(得分:5)

答案1

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

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

更改

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

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

然而,请先阅读第二个答案。

Ans 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"]
            }
        }
     }
    

答案 1 :(得分:1)

你的问题有点模糊,但我觉得你希望配置文件存放在罐子的“外面”。

我建议你看看application plugin。这将创建应用程序的zip,并且还将生成启动脚本以启动它。我想你需要:

  1. 自定义distZip任务以为配置文件添加额外文件夹
  2. 自定义startScripts任务以将额外文件夹添加到启动脚本的类路径

答案 2 :(得分:1)

我不熟悉gradle,所以我只能就你的问题给出一些建议。我认为你可以将你的属性文件的完整路径作为FileInputStream的参数,然后使用prop.load加载它。

FileInputStream input = new FileInputStream("src/main/.../config.dev.properties");

Properties prop = new Properties()
prop.load(input);
// ....your code

答案 3 :(得分:0)

我能够读取外部(非资源)文件的解决方案是在应用程序的根目录下创建我的配置文件夹。

myproj/
      /configs

这样做让我可以使用' config / config.dev.properies'

来阅读配置文件