【问题标题】:Accessing the application.conf properties from java class with Play! 2.0使用 Play 从 java 类访问 application.conf 属性! 2.0
【发布时间】:2012-04-08 07:55:05
【问题描述】:

我想将一个对象添加到全局范围,并且为了构造它,我需要将它传递给一个文件的路径。 我不想硬编码源中的文件路径,所以我想从 application.conf 中获取该路径。

问题是我不知道如何从 java 类中访问这些属性。 我试过这个:

Configuration.root().getString("file.path")

但它以 NullPointerException 结束。

假设我可以使用一个全局配置实例,我错了吗? 谢谢。

【问题讨论】:

    标签: java configuration playframework playframework-2.0


    【解决方案1】:

    试试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,因此它还可以提供一些见解。

    【讨论】:

    • Play.application() 不存在了:/
    • 小心导入,你使用play.Play而不是play.api.Play
    • @nightograph 你能详细说明一下吗?我刚刚创建了一个全新的 2.0 java 项目,添加了以下行 'String key = Play.application().configuration().getString("key");返回 ok(index.render(key));'并在 conf 文件中添加了一个密钥。我得到了 conf 文件中的文本值。
    • @nightograph,这是个好消息,我担心情况会更糟 :) 小心,每个以 play.api 开头的类都用于 Scala 控制器。
    • Play.application() 现在已弃用。所以更新答案会很好。
    【解决方案2】:

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

    玩 2.0 和 2.1

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

    玩 2.2 和 +

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

    使用 Typesafe 配置

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

    【讨论】:

    • 谢谢,我用的是java而不是scala
    • 为什么不能使用current
    • Play.current.configuration.getString("your.key") 似乎是 Play 2.2.2 中的方式
    【解决方案3】:

    来自Play 2.4 and +最好使用依赖注入来访问配置:

    import play.Configuration;
    import javax.inject.Inject;
    
    
    @Inject
    private Configuration configuration;
    
    ...
    
    String value = configuration.getString("your.key");
    

    【讨论】:

    • 由于 Play 2.6.0 配置已弃用,您需要改为注入 com.typesafe.config.Config。
    【解决方案4】:

    由于 Play 2 使用 Typesafe 配置库,我在 application.conf 中访问了我的变量,如下所示:

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

    【讨论】:

    • 是的!这种变体比其他变体要好得多。它也适用于过滤器(在全局对象初始化之前)。
    • 注意这会加载默认配置文件,但是如果你之后在 Global 中加载了其他文件(例如 application.dev.conf),则不会被考虑在内。发现困难的方式:(
    【解决方案5】:

    在剧中java是:

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

    【讨论】:

      【解决方案6】:

      如下使用(在 Play 1.2.5 中测试)

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

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

      【讨论】:

      • 我正在寻找那个 +1
      • 正是我想要的 +1
      【解决方案7】:

      作为从模板访问它的参考(用于播放

      play.configuration['your.key']
      

      【讨论】:

        【解决方案8】:

        正如人们所说,Play.application.configuration 不再存在。

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

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

        【讨论】:

          【解决方案9】:

          在 Play 1.2.x 中

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

          其中第二个参数是默认值

          【讨论】:

            【解决方案10】:

            导入这个

            import com.typesafe.config.Config;
            

            并写下以下几行

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

            【讨论】:

              【解决方案11】:

              import play.Play; String myVal = Play.configuration.getProperty("your.key").toString();

              我在我的应用程序中使用它并且它有效

              别忘了导入 play.Play。希望对你有所帮助

              【讨论】:

                【解决方案12】:

                从 2.5 版本开始请使用 play.Application 类,该类应该被注入然后 application.config().getString("your.property.here")

                【讨论】:

                  【解决方案13】:

                  对于 Java Playframework:

                  Application.conf 中,你可以这样写:

                  email="example@gmail.com.pe"

                  某类:

                  导入播放。播放;

                  String email = Play.application().configuration().getString("key") // key ->email

                  【讨论】:

                    猜你喜欢
                    • 2019-02-11
                    • 1970-01-01
                    • 2013-01-17
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-04-09
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-09-29
                    相关资源
                    最近更新 更多