如何在Play Framework中设置2个MySQL数据库?

时间:2013-07-29 12:48:50

标签: java mysql playframework ebean

我需要设置2个独立的数据库。一个用于Test类,另一个用于TestTwo类,但我不知道如何配置application.conf文件。

application.conf(第1部分):

db.default.driver=com.mysql.jdbc.Driver 
db.default.url="jdbc:mysql://localhost/dbone?characterEncoding=UTF-8" 

db.dbtwo.driver=com.mysql.jdbc.Driver 
db.dbtwo.url="jdbc:mysql://localhost/dbtwo?characterEncoding=UTF-8" 


尝试失败1:两个类都保存到数据库1(dbone):
application.conf(第2部分):

ebean.default="*"
ebean.dbtwo="models.TestTwo"


尝试失败2:尝试保存时出错:

[PersistenceException: The type [class models.TestTwo] is not a registered entity? If you don't explicitly list the entity classes to use Ebean will search for them in the classpath. If the entity is in a Jar check the ebean.search.jars property in ebean.properties file or check ServerConfig.addJar().]

application.conf(第2部分):

ebean.default="models.Test"
ebean.dbtwo="models.TestTwo"


如何进行设置以便将测试对象保存到dbone和TestTwo对象到dbtwo?


编辑:TestTwo类按要求(没什么特别的;我没有手动分配Ebean服务器,除了在application.conf文件中):

package models;
import javax.persistence.*;
import play.db.ebean.*;
import play.data.validation.Constraints.Required;

@Entity
public class TestTwo extends Model{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long id;

    @Required
    public String testString;

    public static Model.Finder<Long, TestTwo> find = new Model.Finder<Long, TestTwo>(Long.class, TestTwo.class);

    public static TestTwo create (String testString){
        TestTwo test = new TestTwo();
        test.testString = testString;
        test.save();
        return test;
    }
}

2 个答案:

答案 0 :(得分:0)

我有同样的问题,这个问题是我能在任何地方找到的唯一相关主题。我做的解决方法并不是很漂亮,但是我将所有属于非默认ebean服务器的模型类覆盖了save() - ,delete() - 和update() -方法。这些覆盖分别调用super.save(dbname)super.delete(dbname)super.update(dbname),其中dbname是ebean服务器的名称。

启动时,我将名称从配置中删除并保存,以便它们不会被硬编码。虽然看起来很冗余,但它解决了我的问题。我希望它可以帮助那些多年后像我一样徘徊在这个问题上的其他人!

答案 1 :(得分:0)

你写过进化脚本了吗?如果不是,您需要在conf>evolutions>default>1.sql

中写一个

创建表&#39; testtwo&#39;:

create table testtwo(
    id          bigint auto_increment not null,
    testString      varchar(100) not null,
    constraint t1_testTwo primary key(id)
);

此外:

SET FOREIGN_KEY_CHECKS=0;

drop table if exists testto;

SET FOREIGN_KEY_CHECKS=1;

当您刷新浏览器时,播放将询问&#34;应用evolution&#34;,这将创建&#39; testtwo&#39;数据库中的表,您可以在其中保存实体。