Liquibase使用

1. Liquibase使用背景:

現實中數據庫沒法保證一成不變,如如有改動,測試和開發都有些許不便,改動的工做多是重複的而且手工改動也可能形成數據不一致。 在這種狀況下,使用Liquibase將有利於咱們更好地管理數據。java

2. Liquibase具有以下特性:

  • 不依賴於特定的數據庫,目前支持包括Oracle/Sql Server/DB2/MySql/Sybase/PostgreSQL/Caché等12種數據庫,這樣在數據庫的部署和升級環節可幫助應用系統支持多數據庫。
  • 提供數據庫比較功能,比較結果保存在XML中,基於該XML你可用Liquibase輕鬆部署或升級數據庫。
  • 以XML存儲數據庫變化,其中以做者和ID惟一標識一個變化(ChangSet),支持數據庫變化的合併,所以支持多開發人員同時工做。
  • 在數據庫中保存數據庫修改歷史(DatabaseChangeHistory),在數據庫升級時自動跳過已應用的變化(ChangSet)。
  • 提供變化應用的回滾功能,可按時間、數量或標籤(tag)回滾已應用的變化。經過這種方式,開發人員可輕易的還原數據庫在任什麼時候間點的狀態。
  • 可生成數據庫修改文檔(HTML格式)
  • 提供數據重構的獨立的IDE和Eclipse插件

3. Liquibase優勢:

  1. 將全部數據庫的變化保存在xml文件中
  2. 不損害現有數據庫,只須要少許配置,便能與spring項目集成。
  3. ChangeSet的ID+修改ChangeSet的做者標示+包含ChangeSet的文件名標識,能夠避免多人協同開發的衝突

4. 工程結構

這裏寫圖片描述

5. 須要引入jar包

這裏寫圖片描述

6. Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	
	<!-- spring 配置 begin -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-context.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- spring 配置 end -->
	
</web-app>

7. Spring-context.xml

<!-- 引用資源文件 -->
	<context:property-placeholder location="classpath:jdbc.properties" />

<!-- 配置數據源 dbcp -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	
<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
		<property name="dataSource" ref="dataSource" />
		<property name="changeLog" value="classpath:Changelog.xml" />
	</bean>

8. Changelog.xml

<?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-2.0.xsd">

	<!-- 執行sql -->
	<changeSet id="sql_file" author="anniweiya">
		<sqlFile path="anniweiya.sql" />
	</changeSet>

	<!-- 新建表 -->
	<changeSet id="create_table" author="anniweiya">
		<createTable tableName="t_anniweiya_test">
			<column name="id" type="int">
				<constraints primaryKey="true" nullable="false" />
			</column>
			<column name="user" type="varchar(255)">
				<constraints nullable="false" />
			</column>
			<column name="updatetime" type="date">
				<constraints nullable="false" />
			</column>
		</createTable>
	</changeSet>

	<!-- 新增列 -->
	<changeSet id="add_column" author="anniweiya">
		<addColumn tableName="t_anniweiya_test">
			<column name="password" type="varchar(255)">
				<constraints nullable="false" />
			</column>
		</addColumn>
	</changeSet>

	<!-- 修改列類型 -->
	<changeSet id="modify_datatype" author="anniweiya">
		<modifyDataType tableName="t_anniweiya_test" columnName="password" newDataType="varchar(55)" />
	</changeSet>

	<!-- 刪除列 -->
	<changeSet id="drop_column" author="anniweiya">
		<dropColumn tableName="t_anniweiya_test" columnName="updatetime" />
	</changeSet>

	<!-- 修更名 -->
	<changeSet id="modify_name" author="anniweiya">
		<renameColumn tableName="t_anniweiya_test" oldColumnName="password" newColumnName="password1" columnDataType="varchar(255)" />
	</changeSet>

	<!-- 執行sql語句 -->
	<changeSet id="t_anniweiya_test_sql" author="anniweiya">
		<preConditions onFail="MARK_RAN">
			<not>
				<columnExists tableName="t_anniweiya_test" columnName="fcreator_id" />
			</not>
		</preConditions>
		<sql>ALTER TABLE `t_anniweiya_test` Add COLUMN fcreator_id int not null AFTER `user` </sql>
	</changeSet>


</databaseChangeLog>

9. Main入口函數

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UpDataBase {
	
public static void main(String[] args) {
		
		System.out.println("start");
		ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "spring-context.xml"});
		System.out.println("ok");
	}
	
}
相關文章
相關標籤/搜索