Properties 是否更改application.conf运行时?

Properties 是否更改application.conf运行时?,properties,playframework,Properties,Playframework,我想在运行时为我的Play项目设置数据库连接。我知道我可以使用以下代码设置属性运行时: @OnApplicationStart public class Bootstrap extends Job { @Override public void doJob() { // now set the values in the properties file Play.configuration.setProperty("db.driver", dbDriver);

我想在运行时为我的Play项目设置数据库连接。我知道我可以使用以下代码设置属性运行时:

@OnApplicationStart public class Bootstrap extends Job
{
   @Override public void doJob()
   {
     // now set the values in the properties file
     Play.configuration.setProperty("db.driver", dbDriver);
     Play.configuration.setProperty("db.url", dbUrl);
     Play.configuration.setProperty("db.user", dbUsername);
     Play.configuration.setProperty("db.pass", dbPassword);
   }
}
但是当执行上面的代码时,文件实际上没有改变,我认为只是在内存中

如何设置数据库属性和强制播放!要使用此属性连接到ApplicationStart上的正确数据库,请执行以下操作:

谢谢

更新2012-01-29


解决方案是可能的,通过一个插件。在这个插件中,我必须覆盖onConfigurationRead(),并在此时将属性应用于配置文件。我会尽快发布一些代码。

当您更改属性时,DB插件已经初始化。您需要编写一个插件并覆盖onConfigurationRead()方法,然后将新设置放在那里。Paly的dbplugin稍后将初始化

你确定这是你真正想要做的吗? Play提供了在application.conf中添加不同配置的可能性

例如,您可以:

db.url=mydefaulturl
%uat.db.url=uaturl
%prod.db.url=produrl
%prod1.db.url=prod1url

然后使用播放开始--%uat播放开始--%prod

启动应用程序。在播放框架配置中使用该值之前,我必须在运行时以编程方式从aws secret manager获取值。您可以覆盖application.conf中的初始默认值并添加新值

为游戏而工作框架v2.7.3

import com.typesafe.config.ConfigValueFactory;
import play.api.Configuration;
import play.api.inject.guice.GuiceApplicationBuilder;
import play.api.inject.guice.GuiceApplicationLoader;

public class ExtendedGuiceApplicationLoader extends GuiceApplicationLoader {
    
    @Override
    public GuiceApplicationBuilder builder(Context context) {

        Configuration configuration = new Configuration(
            context.initialConfiguration().underlying()
                .withValue("db.default.username",
                     ConfigValueFactory.fromAnyRef("aws.secret.db.username"))
                .withValue("db.default.password",
                     ConfigValueFactory.fromAnyRef("aws.secret.db.password"))
        );

        return super.builder(
                new Context(context.environment(),
                            configuration,
                            context.lifecycle(),
                            context.devContext())
        );
    }
}
不要忘记将此字符串添加到application.conf

play.application.loader="youpackage.ExtendedGuiceApplicationLoader"

这对我不起作用,因为我将向客户交付此应用程序。它们都有自己的连接设置。此设置也可能随时间而更改。我希望避免我的客户必须解包.war文件(deploy在tomcat上)并更改conf文件。我将尝试创建像green这样的独立插件。谢谢