我使用以下beean更新spring上下文中的方案和初始数据:
<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
<property name="dataSource" ref="dataSource" />
<property name="changeLog" value="classpath:db/changelog/db.changelog-master.xml" />
<property name="dropFirst" value="true" />
</bean>
我还使用Maven liquibase插件生成sql脚本,以便查看创建了哪些表等。
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>2.0.5</version>
<configuration>
<!--mvn initialize liquibase:updateSQL-->
<propertyFile>src/main/resources/db/config/liquibase-gensql-data-access.properties</propertyFile>
<changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile>
</configuration>
</plugin>
db.changelog-master.xml
文件包含子liquibase changelog文件。问题是,如何从主人那里引用它们。当我使用Spring时,我必须通过classpath使用以下路径:
<include file="classpath:/db/changelog/db.changelog-1.0.xml"/>
使用Maven时,路径为:
<include file="src/main/resources/db/changelog/db.changelog-1.0.xml"/>
我希望两种情况都有相同的配置。我该如何存档?
答案 0 :(得分:9)
我评论了伊戈尔的回答,他的解决方案似乎没有用。
为了解决这个问题,我只是将补丁推送到Liquibase:https://github.com/liquibase/liquibase/pull/187。这应该在3.0.6-SNAPSHOT中合并,因此很快就会在3.0.6中提供。
通过此更改,您现在可以使用以下附加行配置SpringLiquibase
:
<property name="ignoringClasspathPrefix" value="true" />
可以在此处找到需要此更改的另一个示例/用例:https://github.com/LateralThoughts/spring-liquibase-extensions。
答案 1 :(得分:8)
我想如果你从
改变你的Maven路径<changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile>
到
<changeLogFile>db/changelog/db.changelog-master.xml</changeLogFile>
并更新所有包含文件的db.changelog-master.xml文件以使用相对于src / main / resources目录的路径,它将解决问题。
我通过在Spring,maven和集成测试中使用相同的路径来改变日志文件来解决这个问题,该测试调用Liquibase。我的所有changelog文件都位于项目中某个Maven模块的/ src / main / resources / db目录下。
运行Liquibase的Maven配置文件,注意路径:db / masterChangeLog.xml
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>*** Install a last major release version of db ***</id>
<phase>process-resources</phase>
<goals>
<goal>update</goal>
</goals>
<configuration>
<changeLogFile>db/masterChangeLog.xml</changeLogFile>
<contexts>dbBuildContext, dmlDevContext</contexts>
<propertyFile>db/liquibase-${user.name}.properties</propertyFile>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
<logging>debug</logging>
</configuration>
</execution>
db / masterChangeLog.xml文件包含以下文件:
<include file="db/install.xml"/>
<include file="db/update.xml"/>
db / install.xml文件包含其他更改日志文件(update.xml也是如此):
<includeAll path="db/install/seq"/>
<includeAll path="db/install/tab"/>
<includeAll path="db/install/cst"/>
<includeAll path="db/latest/vw" />
Spring上下文在应用启动时执行相同的db脚本集,如下所示:
<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
<property name="dataSource" ref="baseCostManagementDataSource" />
<property name="changeLog" value="classpath:db/masterChangelog.xml" />
<property name="contexts" value="dbBuildContext, dmlDevContext" />
</bean>
答案 2 :(得分:1)
在每个databaseChangeLog文件中指定logicalFilePath属性。见http://www.liquibase.org/documentation/databasechangelog.html
答案 3 :(得分:0)
Maven插件在最新版本中具有配置属性changeLogDirectory。
因此设置<changeLogDirectory>src/main/resources</changeLogDirectory>
应该可以实现您想要的。