Kyl*_*yle 1 java playframework ebean
我需要一些初始数据(从csv文件)到数据库.我正在使用Ebean和Play!框架.我读了文档.它说使用YAML文件存储数据并调用Ebean.save().这是在测试中完成的.
我的问题:
我应该在哪里插入数据?(测试可能不是理想的地方,因为这些数据应该用于生产)
我可以编写自己的代码来从现有的csv文件中获取数据,而不是使用YAML文件吗?
任何建议或文档链接将不胜感激.
谢谢!
一个Play Framework 2.4解决方案,使用Ebean在应用程序启动时加载初始数据:
首先,创建一个要执行初始数据加载的类.根据文档,这必须在构造函数中.
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"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我使用Yaml的load(InputStream is, ClassLoader classloader)方法而不是它的load(String resourceName)方法,因为它不起作用.我相信这是因为它使用了Play.application(),因为在应用程序启动之前它不可用.来源在这里
其次,根据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();
}
}
Run Code Online (Sandbox Code Playgroud)
确保将MainModule类添加到application.conf中
# modules
play.modules.enabled += "module.MainModule"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3021 次 |
| 最近记录: |