Flyway和JPA集成

Dre*_*mer 7 java spring flyway

我目前的Spring 3.0项目正在与Flyway集成.

感谢谷歌网站,所以有我可以指望的文件.但不幸的是,没有太多关于与之融合的讨论JPA.

所以问题是:

  1. 如何整合Flyway persistence.xml?它是如何工作的?JPA提供程序每次都会进行auto generate架构更新,以便我们在之前或之后运行脚本?

  2. 我想到目前为止flyway的查询不支持HQL,那么是否有任何示例代码,然后我可以了解如何集成迁移事件?设计拦截器或新方面?在域级别上做什么?

任何提示都表示赞赏.提前致谢.

Tom*_*icz 9

Flyway不支持JPA 和春天.它基本上按顺序运行您的SQL(而不是HQL)脚本并跟踪它们.并且做得好.它仍然与您如何使用数据库以及如何生成升级脚本无关.

但是,有希望.您的持久性提供程序很可能支持更新现有模式(我知道可以),在启动时运行ALTER和CREATE语句.迁移SQL脚本并不完美,它并不总是有效,但它是一个良好的开端.记录这些脚本,收集到SQL文件中,清理并用作V_*.sql提供给Flyway的文件.

更新:虽然没有对框架的直接支持,但您可以轻松地将其与现有的Spring应用程序集成.事实证明,这种方法适用于生产并且可以很好地发挥作用:

<bean id="flyway" class="com.googlecode.flyway.core.Flyway" init-method="migrate">
  <property name="dataSource" ref="..."/>
  ...
</bean>
Run Code Online (Sandbox Code Playgroud)

额外奖励:它在Java配置(使用Scala)方面也很有用:

@Bean(initMethod = "migrate")
def flyway() = {
    val fly = new Flyway()
    fly.setDataSource(dataSource)
    fly
}
Run Code Online (Sandbox Code Playgroud)

  • @iamrohitbanga我们最终选择liquibase而不是Flyway,因为要求我们每次都要向客户端提交一个脚本升级脚本,所以我们期望有些东西可以生成这样的脚本差异.我们的应用程序也没有在Hibernate上运行.似乎Liquibase更强大,更好地与Spring集成.但老实说,这两个产品都没有提供太多的文档让人们知道它与Spring集成的细节. (3认同)