我的项目结构如下所示。我不想将配置文件包含为资源,而是在运行时读取它,以便我们可以简单地更改设置而无需重新编译和部署。我的问题是两件事
我的项目结构:
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();
}
}
答案 0 :(得分:5)
答案1 。
尽管我尝试了各种方法,但是阅读文件仍然无法正常工作 (见下面我正在尝试的当前实施)
根据您描述的配置文件的位置,
更改
String configPath = "/config.dev.properties";
到
String configPath = "src\main\config\com\my_app1\config.dev.properties";
然而,请先阅读第二个答案。
Ans 2 :
使用gradle时,我是否需要告诉它如何构建/或部署文件 在哪里?我认为这可能是问题的一部分..配置 执行gradle构建或尝试时,文件未部署 在Eclipse中调试。
您有两种选择:
config
目录重命名为resources
。 Gradle自动在“src / main / resources”目录下构建资源。让Gradle知道要被视为资源的附加目录。
sourceSets {
main {
resources {
srcDirs = ["src\main\config\com\my_app1"]
includes = ["**/*.properties"]
}
}
}
答案 1 :(得分:1)
你的问题有点模糊,但我觉得你希望配置文件存放在罐子的“外面”。
我建议你看看application plugin。这将创建应用程序的zip,并且还将生成启动脚本以启动它。我想你需要:
distZip
任务以为配置文件添加额外文件夹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'
来阅读配置文件