liquibase在maven下的操作指南
--step 1:配置maven下的liquibase插件
配置方法一:不用配置文件
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.0.5</version>
<configuration>
--下一行为数数据库变更日志文件
<changeLogFile>${basedir}/src/main/resources/liquibase/changeLogs.sql</changeLogFile>
--以下为数据库连接参数
<driver>oracle.jdbc.OracleDriver</driver>
<url>jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.23)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = PDBDEMO)(INSTANCE_NAME=DEMO)))</url>
<username>cms</username>
<password>cms</password>
<!--配置参数禁用弹出的对话框确认迁移在非本地数据库-->
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
<executions>
<execution>
--配置什么时候执行数据库变更日志中的SQL脚本
<phase>process-resources</phase>
<goals>
--执行类型
<goal>update</goal>
</goals>
</execution>
</executions>
</plugin>
配置方法二:用配置文件,简化pom文件的配置
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.0.5</version>
<configuration>
--下一行为liquibase的配置文件路径
<propertyFile>${basedir}/src/main/resources/liquibase/liquibase.properties</propertyFile>
<!--配置参数,以禁用弹出的对话框,该对话框将确认非本地数据库上的迁移-->
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
<executions>
<execution>
--配置什么时候执行数据库变更日志中的SQL脚本
<phase>process-resources</phase>
<goals>
--执行类型
<goal>update</goal>
</goals>
</execution>
</executions>
</plugin>
--以下为src/main/resources/liquibase/liquibase.properties文件的配置内容
changeLogFile:src/main/resources/liquibase/changeLogs.sql
driver:oracle.jdbc.OracleDriver
url:jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.23)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = PDBDEMO)(INSTANCE_NAME=DEMO)))
username:cms
password:cms
--step 2:创建上述配置文件中对应的数据库变更日志文件
--step 3:编辑数据库变更日志
--step 4:启动程序,maven会自动运行liquibase中的update命令,依次执行配置文件中指定的数据库变更日志中的SQL脚本
有待摸索验证的问题:
1:配置中更多参数的含义和功能
2:尝试多个数据库变更日志文件分开,由一个总的文件来汇总
3:如何执行rollback命令
4:确定已经执行过的脚本,再次执行时是否会自动忽略
5:确定先决条件失败后,如何能不执行,而非直接报错
6:确定先决条件的作用域
7:确定changeset的注解comment中更多的参数意义和使用方法
8:尝试更多的DLL SQL脚本,形成模板
9:尝试两种配置liquibase插件的方法:配置文件和直接在pom中配置 (已实现)
10:如何使用一个全局配置文件来配置多个项目
--step 1:配置maven下的liquibase插件
配置方法一:不用配置文件
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.0.5</version>
<configuration>
--下一行为数数据库变更日志文件
<changeLogFile>${basedir}/src/main/resources/liquibase/changeLogs.sql</changeLogFile>
--以下为数据库连接参数
<driver>oracle.jdbc.OracleDriver</driver>
<url>jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.23)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = PDBDEMO)(INSTANCE_NAME=DEMO)))</url>
<username>cms</username>
<password>cms</password>
<!--配置参数禁用弹出的对话框确认迁移在非本地数据库-->
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
<executions>
<execution>
--配置什么时候执行数据库变更日志中的SQL脚本
<phase>process-resources</phase>
<goals>
--执行类型
<goal>update</goal>
</goals>
</execution>
</executions>
</plugin>
配置方法二:用配置文件,简化pom文件的配置
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.0.5</version>
<configuration>
--下一行为liquibase的配置文件路径
<propertyFile>${basedir}/src/main/resources/liquibase/liquibase.properties</propertyFile>
<!--配置参数,以禁用弹出的对话框,该对话框将确认非本地数据库上的迁移-->
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
<executions>
<execution>
--配置什么时候执行数据库变更日志中的SQL脚本
<phase>process-resources</phase>
<goals>
--执行类型
<goal>update</goal>
</goals>
</execution>
</executions>
</plugin>
--以下为src/main/resources/liquibase/liquibase.properties文件的配置内容
changeLogFile:src/main/resources/liquibase/changeLogs.sql
driver:oracle.jdbc.OracleDriver
url:jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.23)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = PDBDEMO)(INSTANCE_NAME=DEMO)))
username:cms
password:cms
--step 2:创建上述配置文件中对应的数据库变更日志文件
--step 3:编辑数据库变更日志
--step 4:启动程序,maven会自动运行liquibase中的update命令,依次执行配置文件中指定的数据库变更日志中的SQL脚本
使用中遇到的坑:
1:启动程序时一直提示:waiting for changelog lock......
最后报:liquibase update failed:could not acuire change log lock
原因是:数据库中表:DATABASECHANGELOGLOCK有一条记录中锁了database;
解决办法当然是:删除该条数据,或者将该条数据更新:LOCKED=0,LOCKGRANTED=null,LOCKEDBY=null
什么情况下出现该问题,或者如何避免,目前还没梳理出来。
有待摸索验证的问题:
1:配置中更多参数的含义和功能
2:尝试多个数据库变更日志文件分开,由一个总的文件来汇总
3:如何执行rollback命令
4:确定已经执行过的脚本,再次执行时是否会自动忽略
5:确定先决条件失败后,如何能不执行,而非直接报错
6:确定先决条件的作用域
7:确定changeset的注解comment中更多的参数意义和使用方法
8:尝试更多的DLL SQL脚本,形成模板
9:尝试两种配置liquibase插件的方法:配置文件和直接在pom中配置 (已实现)
10:如何使用一个全局配置文件来配置多个项目
在Maven项目中使用Liquibase时遇到数据库锁问题,表现为'waiting for changelog lock',导致更新失败。解决方法是删除DATABASECHANGELOGLOCK表中的锁定记录或更新其LOCKED字段。如何避免此类问题的具体原因和预防措施尚未明确。
1083

被折叠的 条评论
为什么被折叠?



