下面我会详细讲解“SpringBoot整合liquibase及liquibase生成初始化脚本的方式”的完整攻略。
1. 概述
Liquibase是一个用于数据库架构迁移的开源工具,可以与Spring进行很好的整合。在使用SpringBoot进行开发时,我们可以使用Liquibase来管理数据库版本控制,以及进行数据库迁移操作。在这里,我们将学习如何使用SpringBoot整合Liquibase,以及如何使用Liquibase生成初始化脚本。
2. SpringBoot整合Liquibase
在SpringBoot中,通过添加Liquibase依赖和Liquibase插件,即可快速地实现Liquibase与SpringBoot的整合,实现数据库的版本控制。
首先,我们需要在pom.xml文件中添加Liquibase依赖:
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.3.5</version>
</dependency>
接下来,我们需要配置Liquibase插件。这里我们使用Maven插件来配置Liquibase,打开pom.xml文件,在build标签下添加如下插件:
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>4.3.5</version>
<configuration>
<propertyFile>src/main/resources/liquibase.properties</propertyFile>
</configuration>
<executions>
<execution>
<phase>process-resources</phase>
<goals>
<goal>update</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.6.0.0</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
在这里,我们配置了Liquibase插件的执行版本以及相关配置,其中propertyFile属性指定了Liquibase的配置文件。此处使用的是liquibase.properties文件,我们需要在resources目录下创建并配置liquibase.properties文件,内容如下:
changeLogFile=classpath:/db/changelog/db.changelog-master.xml
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:ORCL
username=liquibase_dev
password=123456
liquibase.defaultSchemaName=liquibase_dev
liquibase.contexts=dev
在这里,我们配置了数据库的连接信息,包括数据库的url、用户名和密码,以及Liquibase的默认数据库Schema和Context。其中,changeLogFile属性指定了Liquibase的changelog文件,这个文件用于存储和跟踪数据库变更的历史。
下面,我们可以使用Liquibase插件来生成一个changelog文件,在pom.xml文件中添加如下插件:
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>4.3.5</version>
<executions>
<execution>
<id>generate-changelog</id>
<phase>process-resources</phase>
<goals>
<goal>generateChangeLog</goal>
</goals>
<configuration>
<outputFile>src/main/resources/db/changelog/changelog.xml</outputFile>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.6.0.0</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
在这里,我们使用Liquibase插件的generateChangeLog目标,生成一个changelog文件,将数据库的当前状态生成一个变更历史文件。在执行该插件后,Liquibase会读取数据库的当前状态,生成一个变更历史文件,并保存到指定目录中。
3. 自动生成初始化脚本
在实际开发中,我们可能需要频繁地在本地数据库中新建数据库,进行初始化操作,此时我们可以使用Liquibase来自动生成初始化脚本。这样就不需要手动新建数据库和初始化数据,不仅可以提高工作效率,也可以减少出错的概率。
在pom.xml文件中添加生成初始化脚本的插件:
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>4.3.5</version>
<executions>
<execution>
<id>generate-database</id>
<phase>process-resources</phase>
<goals>
<goal>generateDb</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/liquibase</outputDirectory>
<outputDatabaseChangeLog>true</outputDatabaseChangeLog>
<defaultSchemaName>liquibase_dev</defaultSchemaName>
<referenceUrl>offline:oracle?catalog=none&defaultSchemaName=liquibase_dev&outputLiquibaseSql=true</referenceUrl>
<referenceUsername>liquibase_dev</referenceUsername>
<referencePassword>123456</referencePassword>
<classpathScope>runtime</classpathScope>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.6.0.0</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
然后执行mvn liquibase:generateDb,Liquibase就会自动生成一个新的初始化脚本,在上面的配置中会自动生成在target/generated-sources/liquibase/db.changelog-master.xml。
4. 示例说明
示例一:生成一个新的changelog
首先,在项目中创建一个名为“db.changelog-1.0.xml”的新文件,并将其添加到“classpath:db.changelog-master.xml”文件中。
然后,在“db.changelog-1.0.xml”中添加Liquibase changeSet,以创建一个新的表和一些初始数据。
<?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 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
<changeSet id="create-test-table" author="test">
<createTable tableName="test">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(255)"/>
</createTable>
</changeSet>
<changeSet id="initialize-test-data" author="test">
<insert tableName="test">
<column name="id" value="1"/>
<column name="name" value="test data"/>
</insert>
</changeSet>
</databaseChangeLog>
现在运行Spring应用程序,Liquibase将在数据库中创建test表及其初始数据。
示例二:使用Liquibase从一个Oracle数据库生成一个新的DDL脚本
假设我们的应用程序需要从一个Oracle数据库迁移到一个新的数据库。在这个例子中,我们将使用Liquibase自动生成迁移的DDL脚本。
首先,我们需要从Oracle数据库中生成一个DDL,可以使用下面的Maven命令来实现:
mvn liquibase:generateChangeLog -Dliquibase.referenceUrl="jdbc:oracle:thin:@[host]:[port]/[database]" -Dliquibase.referenceUsername=[username] -Dliquibase.referencePassword=[password] -Dliquibase.driver=oracle.jdbc.OracleDriver -Dliquibase.outputFile=/path/to/ddl/output/file/ddl.sql
在这里我们需要注意一下几点:
- referenceUrl:必须指向Oracle数据库的主机名、端口、数据库名等信息。
- driver:必须指向相应的数据库驱动。
- outputFile:DDL文件输出的位置。
当我们执行该命令后,Liquibase将自动生成从Oracle数据库迁移到新数据库所需的DDL脚本文件“ddl.sql”。
5. 总结
通过上述讲解,我们已经掌握了如何在SpringBoot项目中使用Liquibase进行数据库版本控制,以及如何使用Liquibase自动生成初始化脚本和DDL脚本。Liquibase是一个非常强大的开源工具,可以大大提高我们开发过程中的效率和便利性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合liquibase及liquibase生成初始化脚本的方式 - Python技术站