3.5 springboot与liquibase整合
2017-06-11 13:47:09
18,887
2
springboot内置了对liquibase整合的支持,我们只需要在项目中引入liquibase的依赖,进行配置即可。
pom.xml
<parent > <groupId> org.springframework.boot </groupId > <artifactId> spring-boot-starter-parent </artifactId> <version>1.4.1.RELEASE</version> </parent > <dependencies> <!--liquibase依赖--> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.24</version> </dependency> <!--测试依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId> org.springframework.boot </groupId > <artifactId> spring-boot-starter-web </artifactId> </dependency> </dependencies>
application.yml
liquibase: change-log: classpath:liquibase/master.xml user: root password: <your password> url: jdbc:mysql://localhost:3306/test enabled: true drop-first: false
classpath:liquibase/master.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-3.4.xsd"> <include file="classpath:liquibase/change_log/2017-06-10-init-schema.xml" relativeToChangelogFile="false"/> </databaseChangeLog>
classpath:liquibase/change_log/2017-06-10-init-schema.xml
<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.4.xsd"> <property name="autoIncrement" value="true" dbms="mysql"/> <changeSet id="init-schema" author="tianshouzhi" > <comment>init schema</comment> <createTable tableName="user"> <column name="id" type="bigint" autoIncrement="${autoIncrement}"> <constraints primaryKey="true" nullable="false"/> </column> <column name="nick_name" type="varchar(255)"> <constraints nullable="false"/> </column> <column name="email" type="varchar(255)"> <constraints nullable="false"/> </column> <column name="register_time" type="timestamp" defaultValueComputed="CURRENT_TIMESTAMP"> <constraints nullable="false"/> </column> </createTable> <modifySql dbms="mysql"> <append value="ENGINE=INNODB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci"/> </modifySql> </changeSet> </databaseChangeLog>
主类com.tianshouzhi.site.Application
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class,args); } }
启动程序后,我们就会发现数据库中的表已经建好。
除此之外,我们还可以通过自己创建SpringLiquibase的方式,来执行change-log文件中的内容。
@Configuration @EnableConfigurationProperties(LiquibaseProperties.class) public class DataSourceConfig { @Bean public DataSource dragonHADataSource() throws Exception { return new DragonHADatasourceBuilder().build("dragon/dragon-ha-config.xml"); } @Bean public SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) throws Exception{ SpringLiquibase liquibase=new SpringLiquibase(); liquibase.setDataSource(dataSource); liquibase.setChangeLog(liquibaseProperties.getChangeLog()); liquibase.setShouldRun(liquibaseProperties.isEnabled()); liquibase.setDropFirst(liquibaseProperties.isDropFirst()); return liquibase; } }
在这里我们为SpringLiquibase注入了一个数据源DragonHADataSource,这是笔者自己编写的一个读写分离数据源,感兴趣的读者可以参考:http://static.tianshouzhi.com/api/tutorials/dragon/361
SpringLiquibase实现InitializingBean接口,覆写了afterPropertiesSet()方法,这个方法是change-log文件处理的入口。