使用播放框架2.4.2,我必须连接到可以离线的远程数据库。
我试图在启动时避免“无法连接到数据库[distantdatabase]”异常。
在尝试了很多方法后,我决定手动创建一个EbeanServerFactory来访问这个远程数据库。
这是我的模特:
// Classes of distant database
List<Class<?>> saetrClasses = new ArrayList<Class<?>>();
saetrClasses.add(Vehicule.class);
// Access configuration to distant database
DataSourceConfig ds = new DataSourceConfig();
ds.setDriver("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost/distantdatabase");
ds.setUsername("stack");
ds.setPassword("overflow");
ServerConfig saetrServerConfig = new ServerConfig();
saetrServerConfig.setName("distantdatabase");
saetrServerConfig.setDefaultServer(false);
saetrServerConfig.setClasses(saetrClasses);
saetrServerConfig.setRegister(false);
saetrServerConfig.setDataSourceConfig(ds);
Logger.warn("EbeanServerFactory.create...");
EbeanServer saetrServer = EbeanServerFactory.create(saetrServerConfig);
saetrServer.find(Vehicule.class).where().gt("lastMaj", lastRequestTime).findList();
这就是我尝试访问数据的方式
lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean, PlayEnhancer)
build.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")
plugins.sbt
[warn] - application - EbeanServerFactory.create...
[error] - com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager - Error in deployment
java.lang.IllegalStateException: Bean class models.distantdatabase.Vehicule is not enhanced?
[...]
我收到以下错误
String numStars = extra.getString("numStars");
我不明白这个错误。我看了很多例子,但没找到我错过的东西。有什么想法吗?
编辑:我查看了ebean的源代码,我得到了这个错误,因为我的模型没有实现EntityBean接口。 如何强制执行此接口?
答案 0 :(得分:0)
您需要声明要增强的类。在application.conf中,添加以下内容:
html,
body {
height: 100%;
}
.header {
height: 200px;
background: red;
}
.sidebar {
height: 100%;
background: grey;
float: left;
width: 200px;
}
.main {
height: 100%;
background: orange;
float: left;
width: calc(100% - 200px);
}
我认为你需要确保<div class="header">1</div>
<div class="sidebar">2</div>
<div class="main">3</div>
被热切地创造(只是一个猜测,我之前没有尝试过你的方法)。
答案 1 :(得分:0)
我终于明白了,数据库模型并不是ebean所期望的。
为了解决这个问题,我在本地数据库中添加了application.conf参数:
ebean.distantdatabase="models.distantdatabase.*"
play.evolutions.db.distantdatabase.enabled=true
play.evolutions.db.distantdatabase.autoApply = true
db = {
saetr {
driver=com.mysql.jdbc.Driver
url="jdbc:mysql://localhost/distantdatabase"
username=play
password=framework
}
}
我在mySQl服务器上创建了一个空数据库“distantdatabase”。 我启动了一次应用程序。它在数据库中创建了表,并创建了表sql脚本(/conf/evolutions/distantdatabase/1.sql)。 使用此文件,您可以确切地知道ebean期望的数据库模型。
然后,要使用可能脱机的远程数据库,您不需要在application.conf中声明任何有关它的内容,并声明ServerConfig:
ServerConfig saetrServerConfig = new ServerConfig();
saetrServerConfig.setName("distantdatabase");
saetrServerConfig.setDdlGenerate(false); // ddlGenerate drops all tables and create new tables
saetrServerConfig.setDdlRun(false); // ddlRun run migration scripts
saetrServerConfig.setDefaultServer(false);
saetrServerConfig.setRegister(true);
saetrServerConfig.setDataSourceConfig(ds);
saetrServerConfig.setClasses(saetrClasses);
您可以从ebean测试中找到示例:https://github.com/ebean-orm/avaje-ebeanorm/blob/master/src/test/java/com/avaje/tests/basic/MainDbBoolean.java