我想在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);
}
}
但是当执行上面的代码实际上没有改变时,我认为只是在内存中。
如何设置数据库属性并强制播放!使用此属性以连接到正确的数据库onApplicationStart?
谢谢!
更新2012-01-29
可以通过插件解决方案。在这个插件中,我必须覆盖 onConfigurationRead(),并在那一刻将属性应用于配置文件。我会尽快发布一些代码。
答案 0 :(得分:1)
当您更改属性时,DB插件已经初始化。您需要编写一个插件并覆盖onConfigurationRead()方法,然后将新设置放在那里。 Paly的dbplugin将在稍后启动。
答案 1 :(得分:0)
你确定这是你真正打算做的吗? Play提供了在application.conf
中添加不同配置的可能性 例如,您可以:db.url=mydefaulturl
%uat.db.url=uaturl
%prod.db.url=produrl
%prod1.db.url=prod1url
然后以播放开始 - %uat 或播放开始 - %prod
启动应用答案 2 :(得分:0)
在 play 框架配置中使用该值之前,我需要在运行时以编程方式从 aws 秘密管理器获取值。您可以覆盖 application.conf 中的初始默认值并添加新值。
Work for play 框架 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"