【问题标题】:Flyway and JPA integrationFlyway 和 JPA 集成
【发布时间】:2012-08-16 06:32:48
【问题描述】:

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

感谢 google 网站,所以有我可以指望的文件。但不幸的是,关于与JPA 集成的讨论并不多。

所以问题是:

  1. 如何将 Flyway 与 persistence.xml 集成?它是如何工作的?每次 JPA 提供程序都会 auto generate 架构更新,那么我们如何在此之前或之后运行脚本?

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

感谢任何提示。提前致谢。

【问题讨论】:

    标签: java spring flyway


    【解决方案1】:

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

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

    更新:虽然没有直接支持 框架,但您可以轻松地integrate it with existing Spring application。这种方法已被证明适用于生产并且运行良好:

    <bean id="flyway" class="com.googlecode.flyway.core.Flyway" init-method="migrate">
      <property name="dataSource" ref="..."/>
      ...
    </bean>
    

    奖励:它也适用于 Java 配置(使用 Scala):

    @Bean(initMethod = "migrate")
    def flyway() = {
        val fly = new Flyway()
        fly.setDataSource(dataSource)
        fly
    }
    

    【讨论】:

    • 谢谢。我没有看到 Flyway 对 JPA 的支持,但它甚至不支持 Spring?这真的让业界客户失望,所以基本上 Flyway 不是 J2EE 的选择?
    • 嗯,这并不完全准确。它与 Spring 很好地集成在一起。您可以在这里看到一个适合您需求的示例:code.google.com/p/flyway/wiki/ApplicationIntegration。它还将检测 Spring 的存在并允许使用 JdbcTemplate 进行 Java 迁移(如果找到)。
    • @Subarule:对不起,我的意思是 Flyway 中没有对 Spring 的额外支持,但是库可以很容易地与之集成。查看我的更新。
    • @Subarule:JPA 提供者足够聪明,可以根据 JPA 模型的变化更新数据库模式(使用 SQL)。但是在使用 FlyWay 时,必须使用原始 SQL 查询,FlyWay 对 JPA 一无所知。
    • @iamrohitbanga 我们最终选择了 liquibase 而不是 Flyway,因为要求我们每次都向客户端提交一个脚本升级脚本,所以我们希望有些东西可以生成这样的脚本差异。我们的应用程序也没有在 Hibernate 上运行。似乎 Liquibase 更强大,与 Spring 的集成更好。但老实说,这两款产品都没有提供太多文档让人们了解其与 Spring 集成的详细信息。
    猜你喜欢
    • 2018-11-07
    • 2015-05-29
    • 2023-04-04
    • 2013-03-04
    • 2011-10-12
    • 2012-11-01
    • 2014-02-18
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多