1

我有基于Tapestry框架的项目。它Hibernate用作 ORM 库。

我的类使用annotations.

我想集成Liquibase到我的项目中,以便能够维护数据库状态,进行版本更新。

到目前为止,我所做的是以下步骤:

1)我创建了服务对:LiquibaseService-> LiquibaseServiceImpl

LiquibaseSerivcehas 方法public void update(),它独立DataSourcehibernate.cfg.xml配置创建并最终执行liquibase.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 回答