文档

§Java 配置 API 迁移

play.Configuration 已弃用,建议直接使用 Typesafe Config。因此,您现在必须使用 com.typesafe.config.Config,而不是 play.Configuration。例如

之前

import play.Configuration;
public class Foo {
    private final Configuration configuration;

    @javax.inject.Inject
    public Foo(Configuration configuration) {
        this.configuration = configuration;
    }
}

之后

import com.typesafe.config.Config;

public class Foo {
    private final Config config;

    @javax.inject.Inject
    public Foo(Config config) {
        this.config = config;
    }
}

§配置值应始终定义

Configplay.Configuration API 之间的主要区别在于如何处理默认值。Typesafe Config 建议 在您的 .conf 文件中声明所有配置键,包括默认值。

Play 本身使用 reference.conf 文件来声明所有可能配置的默认值。为了避免处理缺失值的麻烦,如果您正在分发库,也可以这样做。读取配置时,application.conf 文件会叠加在 reference.conf 配置之上。例如

之前 (configurationplay.Configuration)

// Here we have the default values inside the code, which is not the idiomatic way when using Typesafe Config.
Long timeout = configuration.getMilliseconds("my.service.timeout", 5000); // 5 seconds

之后

# This is declared in `conf/reference.conf`.
my.service.timeout = 5 seconds

最终可以在您的 application.conf 文件中覆盖该值

# This will override the value declared in reference.conf
my.service.timeout = 10 seconds

这在创建模块时特别有用,因为您的模块可以提供易于覆盖的参考值。然后您的 Java 代码将如下所示

Long timeout = config.getDuration("my.service.timeout", TimeUnit.MILLISECONDS);

其中 config 是您的 com.typesafe.config.Config 实例。

§手动检查值

如果您不想或由于某种原因无法拥有默认值,可以使用 Config.hasPathConfig.hasPathOrNull 在访问值之前检查它是否已配置。如果需要配置但无法提供参考 (默认) 值,这是一个更好的选择

import com.typesafe.config.Config;
import com.typesafe.config.ConfigException;

public class EmailServerConfig {

    private static final String SERVER_ADDRESS_KEY = "my.smtp.server.address";

    private final Config config;

    @javax.inject.Inject
    public EmailServerConfig(Config config) {
        this.config = config;
    }

    // The relevant code is here. First use `hasPath` to check if the configuration
    // exists and, if not, throw an exception.
    public String getSmtpAddress() {
        if (config.hasPath(SERVER_ADDRESS_KEY)) {
            return config.getString(SERVER_ADDRESS_KEY);
        } else {
            throw new ConfigException.Missing(SERVER_ADDRESS_KEY);
        }
    }
}

下一步:Play 2.5


在文档中发现错误? 此页面的源代码可以在这里找到 这里。 阅读完 文档指南 后,请随时贡献拉取请求。 有问题或建议要分享? 前往 我们的社区论坛 与社区交流。