在播放模块配置上访问application.conf

时间:2018-03-23 09:33:04

标签: java playframework guice

我尝试使用Guice配置数据库客户端实例来创建AbstractModule,但我无法使用依赖注入来访问application.conf,因为尚未创建注入器。

这是我的代码

@Singleton
public class DatastoreModule extends AbstractModule {

    @Inject
    private Config config;

    @Override
    public void configure() {

        MongoClient mongo = new MongoClient(
                config.getString("mongodb.host"),
                config.getInt("mongodb.port")
        );

        Morphia morphia = new Morphia();

        Datastore datastore = morphia.createDatastore(
                mongo,
                config.getString("mongodb.databaseName")
        );

        bind(Datastore.class).toInstance(datastore);
    }
}

如何在不使用已弃用的Play.configuration API的情况下访问配置?

1 个答案:

答案 0 :(得分:1)

您可以在构造函数中传递它(在Scala中)。这是我项目的例子

class Guard(environment: Environment, configuration: Configuration) extends AbstractModule{

在Java中它是相同的:

public class DatastoreModule extends AbstractModule {

  private final Environment environment;
  private final Config config;

  public DatastoreModule(Environment environment, Config config) {
    this.environment = environment;
    this.config = config;
  }

  ...

}

更多详情:https://www.playframework.com/documentation/2.6.x/JavaDependencyInjection#Configurable-bindings

不要过度使用它:

  

在大多数情况下,如果在创建组件时需要访问Config,则应将Config对象注入组件本身或组件的Provider中。然后,您可以在创建组件时阅读Config。在为组件创建绑定时,通常不需要读取Config。

我很少使用它。将配置注入组件本身总是好的。