java - 如何在 Play Framework 中使用 Ebean 将初始数据加载/插入数据库?

标签 java playframework ebean

我需要将一些初始数据(来自 csv 文件)存入数据库。我在 Play 中使用 Ebean!框架。我读了doc .它说使用 YAML 文件存储数据并调用 Ebean.save()。这是在测试中完成的。

我的问题:

  1. 我应该在哪里插入我的数据? (测试可能不是理想的地方,因为这些数据应该用于生产)

  2. 我可以编写自己的代码来从现有的 csv 文件中获取数据,而不是使用 YAML 文件吗?

任何建议或文档链接将不胜感激。

谢谢!

最佳答案

使用 Ebean 在应用程序启动时加载初始数据的 Play Framework 2.4 解决方案:

首先,创建一个要在其中执行初始数据加载的类。根据文档,这 has to be in the constructor.

public class InitialData {
    public InitialData() {

        if (Ebean.find(User.class).findRowCount() == 0) {
            InputStream is = this.getClass().getClassLoader().getResourceAsStream("initial-data.yml");

            @SuppressWarnings("unchecked")
            Map<String, List<Object>> all = 
                (Map<String, List<Object>>)Yaml.load(is, this.getClass().getClassLoader());

            //Yaml.load("initial-data.yml"); //calls Play.application() which isn't available yet
            Ebean.save(all.get("users"));
        }
    }
}

注意:我在其 load(String resourceName) 方法上使用了 Yaml 的 load(InputStream is, ClassLoader classloader) 方法,因为它不起作用。我相信这是因为它使用了 Play.application(),因为在应用程序启动之前这是不可用的。 Source Here

其次,根据 Play 文档,要在启动前执行代码,请使用 Eager-bindings.这将导致执行 InitialData 构造函数中的代码。

public class MainModule extends AbstractModule implements AkkaGuiceSupport {
    @Override
    protected void configure() {
        //this is where the magic happens
        bind(InitialData.class).asEagerSingleton();
    }
}

确保将您的 MainModule 类添加到 application.conf

# modules
play.modules.enabled += "module.MainModule"

关于java - 如何在 Play Framework 中使用 Ebean 将初始数据加载/插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26934354/

相关文章:

scala - Play 框架和自动生成的演变

java - 在某些情况下忽略 Ebean 版本

java - hibernate 与 ebean 作为可扩展的、高性能的 ORM

java - JMeter 无法使用 JDBC 连接连接到 Phoenix

java - Play Framework 自定义验证错误与多个字符串参数

java - 前 1000 个素数之和不正确?怎么了?

java - Play 在刷新时重新编译所有文件?

java - Play Framework 2.7 授权获取用户

java - 如何在这里使用锁/同步

java - JNI - 自动将所有新生成的线程从进程附加到 JVM?