gpt4 book ai didi

java - Liquibase 与 Tapestry 和 Hibernate 集成 : initial schema creation step

转载 作者:行者123 更新时间:2023-11-30 04:32:12 26 4
gpt4 key购买 nike

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

我的类使用注释映射到数据库。

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

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

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

LiquibaseSerivce 具有方法 public void update(),该方法从 hibernate.cfg.xml 创建独立的 DataSource配置并最终执行 liquibase.update("product");

2) 我已在 AppModule 中添加了对此服务的绑定(bind):

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

3) 我已将 initMyApplication 方法添加到 AppModule 中,该方法启动 Liquibase 更新:

@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 完成其工作?

最佳答案

您可以这样做,而不是使用@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");
}

关于java - Liquibase 与 Tapestry 和 Hibernate 集成 : initial schema creation step,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14375949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com