在Global.beforeStart中加载DB驱动程序

时间:2014-03-21 09:52:57

标签: postgresql jdbc playframework ebean

我想在每次启动时实现一些数据库清理(在开发环境中完全删除模式和重新创建)。

我在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);

为什么?

1 个答案:

答案 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) {
}

请注意,此处您不需要另外包含数据库配置,您可以在此处使用与控制器相同的模型。