1

フレームワークに基づいたプロジェクトがありTapestryます。HibernateORMライブラリとして使用します。

私のクラスは、を使用してデータベースにマップされますannotations

プロジェクトに統合Liquibaseして、データベースの状態を維持し、バージョンを更新できるようにしたいと思います。

この瞬間まで私がしたことは、次のステップです。

1)サービスペアを作成しました:LiquibaseService-> LiquibaseServiceImpl

LiquibaseSerivce構成からpublic void update()独立して作成し、最終的に実行するメソッドがありますDataSourcehibernate.cfg.xmlliquibase.update("production");

2)このサービスにバインディングを追加しましたAppModule

binder.bind(LiquibaseService.class, LiquibaseServiceImpl.class).eagerLoad();

3)更新を開始するinitMyApplicationメソッドを追加しました:AppModuleLiquibase

@Startup
public static void initMyApplication(Logger logger, LiquibaseService liquibaseService) {
    logger.info("Updating database by liquibase service...");
    liquibaseService.update();
    logger.info("update-db done.");
}

これはすべて、初期スキームがすでに作成されている本番環境で正常に機能します。テーブルや列などを快適にドロップできます。

しかし、問題は、Liquibaseアプリケーションを新しいサーバーにデプロイするときに、ゼロから(を使用して)新しいスキームを作成できないことです。Hibernate独立して起動し、スキームにクラスにマップされたテーブルがないという不満があります。

仕事が終わるそのHibernate瞬間まで、どうすれば開始を遅くすることができますか?Liquibase

4

1 に答える 1

2

@Startupを使用する代わりに、次のようなことができます

    public static void contributeRegistryStartup(
     final Logger logger, final LiquibaseService liquibaseService,
     OrderedConfiguration<Runnable> configuration)
    {
        configuration.add("Liquibase", new Runnable()
        {
            public void run()
            {
                logger.info("Updating database by liquibase service...");
                liquibaseService.update();
                logger.info("update-db done.");
            }
        }, "after:HibernateStartup");
    }
于 2013-01-17T14:07:08.460 に答える