Java Liquibase与Tapestry和Hibernate集成:初始模式创建步骤
我有一个基于Java Liquibase与Tapestry和Hibernate集成:初始模式创建步骤,java,hibernate,tapestry,liquibase,Java,Hibernate,Tapestry,Liquibase,我有一个基于Tapestry框架的项目。它使用Hibernate作为ORM库 我的类使用注释映射到数据库 我想将Liquibase集成到我的项目中,以便能够维护数据库状态,进行版本更新 到目前为止,我所做的是以下步骤: 1) 我已经创建了服务对:LiquibaseService->LiquibaseService-impl liquibase.serivce具有方法public void update(),该方法从hibernate.cfg.xml配置创建独立的数据源,最后执行liquibase
Tapestry
框架的项目。它使用Hibernate
作为ORM库
我的类使用注释映射到数据库
我想将Liquibase
集成到我的项目中,以便能够维护数据库状态,进行版本更新
到目前为止,我所做的是以下步骤:
1) 我已经创建了服务对:LiquibaseService
->LiquibaseService-impl
liquibase.serivce
具有方法public void update()
,该方法从hibernate.cfg.xml
配置创建独立的数据源,最后执行liquibase.update(“生产”)代码>
2) 我已在AppModule
中为此服务添加了绑定:
binder.bind(LiquibaseService.class,LiquibaseService.impl.class)代码>
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
独立启动,并抱怨方案中没有任何映射到我的类的表
我如何才能放慢休眠
的速度,直到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");
}
公共静态无效贡献者注册启动(
最终记录器,最终液化服务液化服务,
OrderedConfiguration(配置)
{
add(“Liquibase”,new Runnable())
{
公开募捐
{
info(“通过liquibase服务更新数据库…”);
liquibaseService.update();
info(“更新数据库完成”);
}
},“之后:HibernateStartup”);
}
你的意思是,Tapestry
将自动注入Logger
和LiquibaseService
,是吗?TapestryOC将所有参数注入AppModule#contribute方法,并且您始终可以从内部匿名类访问最终变量。是的,它确实有效,我检查了它。谢谢,这是一个有趣的决定。我将+1您的答案,但我仍然对如何使用注释来实现这一点感兴趣。或者这是不可能的?你还不能做。不过你可以提交一份jira