使用Play! 2.0从Java类访问application.conf属性

63
我想将一个对象添加到全局范围中,并且为了构造它,我需要传递一个文件的路径。 我不想在源代码中硬编码文件路径,因此我想从application.conf文件中获取路径。
问题是我不知道如何从Java类中访问这些属性。 我尝试了这个:
Configuration.root().getString("file.path")

但是最终会出现NullPointerException的错误。

我是否错误地假设存在一个全局的Configuration实例可以使用?谢谢。

13个回答

83

尝试使用Play.application().configuration().getString("your.key")

请注意评论(nico_ekito)中提到,请使用play.Play而不是play.api.Playplay.api.Play适用于Scala控制器(请参见Marcus biesior Biesioroff的评论)

此外,play在幕后使用https://github.com/typesafehub/config,因此它也可以提供一些见解。


6
Play.application() 不再存在。:/ - Cyril N.
6
注意导入时使用 play.Play 而不是 play.api.Play - ndeverge
1
@nightograph,你能详细说明一下吗?我刚刚创建了一个全新的2.0 Java项目,添加了以下代码行 'String key = Play.application().configuration().getString("key"); return ok(index.render(key));' 并在配置文件中添加了一个键。我可以获取到配置文件中的文本值。 - Nasir
3
Play.application() 现在已经过时,请进行更新。更新后的答案会更好。 - Lasitha Yapa
1
仍然适用于2.5版本。我不知道为什么一个简单的配置读取突然需要依赖注入。 :/ - Karlth
显示剩余11条评论

55

即使看起来很简单,这里是从配置文件获取属性的scala方式:

Play 2.0和2.1

import play.api.Play.current
...
Play.application.configuration.getString("your.key")

Play 2.2 及以上版本

import play.api.Play.current
...
current.configuration.getString("your.key")

使用 Typesafe Config

import com.typesafe.config.ConfigFactory
...
ConfigFactory.load().getString("your.key");

谢谢,不过我正在使用Java而不是Scala。 - Nitzan Tomer
1
为什么不能使用 current - cdmckay
1
在Play 2.2.2中,Play.current.configuration.getString("your.key")似乎是一种方式。 - Jeroen Kransen

39

Play 2.4及以上版本开始,最好使用依赖注入来访问配置:

import play.Configuration;
import javax.inject.Inject;


@Inject
private Configuration configuration;

...

String value = configuration.getString("your.key");

3
自 Play 2.6.0 起,Configuration 已被弃用,您需要注入 com.typesafe.config.Config 来代替。 - Spenhouet

12

由于Play 2使用Typesafe config库,所以我像这样访问了我的应用程序配置文件中的变量:

ConfigFactory.load().getString("my.var");

1
是的!这个变量比其他的好多了。它也可以在过滤器中使用(在全局对象初始化之前)。 - vdshb
7
请注意,这将加载默认配置文件,但如果您在Global中之后加载了其他文件(例如application.dev.conf),则不会考虑其中的内容。 我曾经吃过亏 :( - redent84

3

在这个场景中,Java是:

import play.Play;
...
Play.application().configuration().getString("key")

2

以下是使用方法(已在Play 1.2.5中测试):

${play.configuration.getProperty('my.var')}

在application.conf文件中应指定my.var


我正在寻找那个 +1。 - gabby
对于我正在寻找的内容,+1。 - Ihor Patychenko

1

作为从模板访问它的参考(适用于play < 2)

play.configuration['your.key']

1

正如其他人所提到的,Play.application.configuration已不再存在。

在Play Scala 2.3.x中,要从conf/application.conf读取一个值,您可以执行以下操作:

import play.api.Play.current
...
current.configuration.getString("key")

0

在 Play 1.2.x 中

import play.Play;
...


String version  = Play.configuration.getProperty("application.version.number", "1.1.1");

第二个参数是默认值


0

导入这个

import com.typesafe.config.Config;

并编写以下行

private Config config;
this.config = ConfigProvider.config();
String value = this.config.getString("fieldFromConfigFile");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接