我想在每次启动时实现一些数据库清理(在开发环境中完全删除模式和重新创建)。
我在Global.beforeStart中这样做。而且因为它在开始之前确实 我需要自己加载数据库驱动程序。
代码是:
@Override
public void beforeStart(Application app){
System.out.println("IN beforeStart");
try{
Class.forName("org.postgresql.Driver");
System.out.println("org.postgresql.Driver LOADED");
} catch (ClassNotFoundException cnfe){
System.out.println("NOT LOADED org.postgresql.Driver");
cnfe.printStackTrace();
}
ServerConfig config = new ServerConfig();
config.setName("pgtest");
DataSourceConfig postgresDb = new DataSourceConfig ();
postgresDb.setDriver("org.postgresql.Driver");
postgresDb.setUsername("postgres");
postgresDb.setPassword("postgrespassword");
postgresDb.setUrl("postgres://postgres:postgrespassword@localhost:5432/TotoIntegration2");
config.setDataSourceConfig(postgresDb);
config.setDefaultServer(true);
EbeanServer server = EbeanServerFactory.create(config);
SqlQuery countTables = Ebean.createSqlQuery("select count(*) from pg_stat_user_tables;");
Integer numTables = countTables.findUnique().getInteger("count");
System.out.println("numTables = " + numTables);
if(numTables>2){
DbHelper.cleanSchema();
}
System.out.println("beforeStart EXECUTED");
//DbHelper.cleanSchema();
}
Class.forName(“org.postgresql.Driver”)在没有异常的情况下通过,但后来我得到了:
com.avaje.ebeaninternal.server.lib.sql.DataSourceException:java.sql.SQLException:找不到适合postgres的驱动程序
在EbeanServer服务器= EbeanServerFactory.create(config);
行为什么?
答案 0 :(得分:1)
使用onStart
代替它,它在beforeStart
之后执行,但它是在数据库上运行的自然候选者(在生产模式下它不等待第一个请求),javadoc为它们:
/**
* Executed before any plugin - you can set-up your database schema here, for instance.
*/
public void beforeStart(Application app) {
}
/**
* Executed after all plugins, including the database set-up with Evolutions and the EBean wrapper.
* This is a good place to execute some of your application code to create entries, for instance.
*/
public void onStart(Application app) {
}
请注意,此处您不需要另外包含数据库配置,您可以在此处使用与控制器相同的模型。