如何将Flyway整合到JPA + OSGi中?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (75)

在我目前的项目中,我已经将JPA集成到OSGi独立应用程序中。为了整合,我采用了以下OSGi规范实现:

  • OSGi R7平台(Equinox 3.13.0)
  • JPA 2.2(Eclipselink 2.7.1)
  • JPA容器
  • Apache Aries JPA Container 2.7.0
  • Apache Aries JPA Eclipselink adapter 2.7.0
  • JDBC服务(PAX JDBC MariaDB 1.3.0)

这种整合非常完美。

下一步—— Flyway整合。数据库迁移脚本应该直接打包到Persistence Bundle中。现在我想在创建DataSource时立即触发迁移,在EntityManagerFactory和EntityManagerFactoryBuilder Services将被注册之前。在这一刻,我应该有权访问Persistence Bundle类加载器,我应该有一个初始化的数据源。我发现唯一的解决方案是重构Apache区域JPA容器并将Flyway迁移调用放入AriesEntityManagerFactoryBuilder.dataSourceReady。Flyway触发器存储在JPA属性中的位置,如下所示:

    <property name="org.flywaydb.Locations" value="classpath:com/hrrm/budget/domain/account/migrations"/>

但它没有与OSGi JPA服务规范1.1进行确认,而是作为Apache Aries JPA容器的钩子实现的。

提问于
用户回答回答于
@Component(property="name=persondb")
public class Migrator implements PreHook {
    public void prepare(DataSource ds) throws SQLException {
        // Put your migration calls here
    }
}

扫码关注云+社区

领取腾讯云代金券