在我当前的项目中,我已经将JPA集成到了OSGi独立应用程序中。对于集成,我采用了以下OSGi规范实现:
<代码>H19Apache Aries JPA Eclipselink适配器JPA
这种集成工作得很完美。
go的下一步- Flyway集成。数据库迁移脚本应该直接打包到Persistence Bundle中。现在,我想在创建DataSource时触发迁移,就在注册EntityManagerFactory和EntityManagerFactoryBuilder服务之前。此时,我应该可以访问Persistence Bundle类加载器,并且应该有一个初始化的数据源。我找到的唯一解决方案是重构Apache Areas容器,并将一个Flyway迁移调用放入AriesEntityManagerFactoryBuilder.dataSourceReady.Flyway触发器存储为JPA属性中的位置,如下所示:
<property name="org.flywaydb.Locations" value="classpath:com/hrrm/budget/domain/account/migrations"/>
这个解决方案在调用的最佳时机放置是正确的。但是它不符合Apache服务规范1.1,并作为一个钩子实现到OSGi JPA容器中。
有没有其他更完美和规范确认的解决方案来将Flyway集成到我的项目中?
发布于 2018-05-28 20:17:08
要挂接DataSource创建,您可以使用pax-jdbc docs中描述的PreHook服务。
你可以找到一个example here。
@Component(property="name=persondb")
public class Migrator implements PreHook {
public void prepare(DataSource ds) throws SQLException {
// Put your migration calls here
}
}
https://stackoverflow.com/questions/50565786
复制相似问题