springboot oracle 集成liquebase

        Sql语句在由开发环境发布到其他环境时,也是个老大难的问题,用过文档记录、sql代码git管理都不是很满意,毕竟都要手动记录哪些sql执行了,哪些没执行,没执行的还要手动执行,尤其是在内网环境,sql文件可能还需要找人转手执行。

         无意中发现了liquebase 和flyway ,一开始选的flyway,毕竟入手快,用mysql执行正常,但与自己的oracle不兼容,所以改用liquebase,研究后,发现基本功能还是比较好入手的,推荐下。

开始下手,简单分3个步骤:

1,pom文件加配置

2,application.properties(yml)加下配置

3,添加对应的基本配置文件(目的是告诉liquebase 要怎么执行sql)

4,程序启动

1,pom文件加配置

		<dependency>
			<groupId>org.liquibase</groupId>
			<artifactId>liquibase-core</artifactId>
			<version>4.5.0</version>
		</dependency>


			<plugin>
				<groupId>org.liquibase</groupId>
				<artifactId>liquibase-maven-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<propertyFile>src/main/resources/db/liquibase.properties</propertyFile>
					<propertyFileWillOverride>true</propertyFileWillOverride>
					<outputChangeLogFile>src/main/resources/db/changelog/changelog_init.xml</outputChangeLogFile>
				</configuration>
			</plugin>

2,application.properties(yml)加下配置

#liquebase
spring.liquibase.enabled=true
spring.liquibase.change-log=classpath:db/changelog-master.xml

spring.liquibase.change-log  :这个不配置也行,但就会走默认路径:src/main/resources/db/changelog/db.changelog-master.yaml

3,添加对应的基本配置文件

(目的是告诉liquebase 要怎么执行sql)

(1)如果在第二部配置了spring.liquibase.change-log=classpath:db/changelog-master.xml,就看这个:直接用的sql语句的

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
            https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.5.xsd">
<!--    <include file="classpath:db/changelog/changelog_init.xml"/>-->
    <include file="classpath:db/changelog/changelog_v1.0.xml"/>
    <include file="classpath:db/changelog/changelog_v2.0.xml"/>
</databaseChangeLog>

前几行就是个固定格式,可以先忽略,重点看下:

<include file="classpath:db/changelog/changelog_v1.0.xml"/>

这个是我把要执行的sql 单独拎出来了,可以分多个文件(组团开发时,可以按小组/人拆分;多个版本迭代时,也可以按版本进行拆分)。

然后看下changelog_v1.0.xml

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                   https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.5.xsd">
    <!--
    changeset:一个changelog可以包含多个changeset标签,每个changeset都由id、author、filepath属性唯一标识,
            当liquibase执行数据库changeLog时,他会按顺序读取changeSet,并针对每个changeSet检查databasechangelog表,
            已查看是否已经运行过id/author/filepath的组合,如果已运行且没有runAlways标签则会跳过该changeSet
        author:作者
        id:最好使用<项目名-时间戳>来命名区分
        runAlways:执行每次运行时设置的更改,即使之前已经运行过了
        context:灵活控制脚本在哪些环境中执行
    -->
    <changeSet id="reference-20231020-2101" author="y">
        <sql>
            alter table AA10
            add TEST_LI2 VARCHAR2(20);
        </sql>
    </changeSet>

    <changeSet id="reference-20231020-001" author="y">
        <sql>
            alter table AA10
            add TEST_LI3 VARCHAR2(20);
            alter table AA10
            add TEST_LI4 VARCHAR2(20);
        </sql>
    </changeSet>


</databaseChangeLog>

开头是固定格式,直接看 changeset就行,id建议有一定规则,author 不能为空,可以写自己的名字代号,sql里就是要执行的sql,

(2)如果跳过了第二步骤,也可以

就看默认的路径文件:db.changelog-master.yaml,注意不能为空

databaseChangeLog:
  - include:
      file: db/changelog/changelog_v1.0.xml
  -  changeSet:
       id:  1
       author:  zktest
       changes:
         -  createTable:
              tableName:  person01
              columns:
                -  column:
                     name:  stu_name
                     type:  varchar(50)
                -  column:
                     name:  stu_no
                     type:  varchar(50)
                     constraints:
                       nullable:  false
                -  column:
                     name:  state
                     type:  char(2)

include:file 是引用了另一个配置文件,这个文件往上一点也有写,里面内容不用动,这样就可以执行这个文件里的配置了。

再往下就是一个建表的配置,表名person01,有3个字段信息

其他的配置可以自己再搜搜,个人感觉还是喜欢直接用sql

4,最后,程序启动,sql也自动执行了。

呜呜呜,火车来了, 同时数据库里会自动创建2个表:DATABASECHANGELOG、DATABASECHANGELOGLOCK

DATABASECHANGELOG:会记录sql的执行情况

注意:已经执行过的sql配置不要动,DATABASECHANGELOG表中存对应的md5加密的值,如果sql配置改了,对应的md5的值就和数据库里存的不一样了,就报错了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值