官方地址:
https://www.liquibase.org/documentation/changes/custom_change.html
官方的例子实在是 -_-!
1.change.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.8.xsd">
<changeSet author="zcg" id="5_test_customChange" runAlways="false" failOnError="true" >
<comment>自定义后台处理</comment>
<customChange class="com.example.springliquibasedemo.component.CreateTableTask">
<param name="param1" value="t1" />
<param name="file" value="/db/liquibase/test/user.csv" />
</customChange>
</changeSet>
</databaseChangeLog>
2.CustomTaskChange实现
public class CreateTableTask implements CustomTaskChange {
//xml参数配置
private String file;
private String param1;
private ResourceAccessor resourceAccessor;
public String getFile() {
return file;
}
public void setFile(String file) {
this.file = file;
}
public String getParam1() {
return param1;
}
public void setParam1(String param1) {
this.param1 = param1;
}
@Override
public void execute(Database database) throws CustomChangeException {
try
{
JdbcConnection connection = (JdbcConnection) database.getConnection();
DataSource dataSource = new SingleConnectionDataSource(connection.getUnderlyingConnection(), true);
JdbcTemplate template = new JdbcTemplate(dataSource, false);
Set<InputStream> streams = resourceAccessor.getResourcesAsStream(file);
BufferedReader in = new BufferedReader(new InputStreamReader(streams.iterator().next()));
//忽略头
String str = in.readLine();
while ((str = in.readLine()) != null && !str.trim().equals("")) {
//Do
}
in.close();
}
catch (Exception e)
{
throw new CustomChangeException(e);
}
}
@Override
public String getConfirmationMessage() {
return null;
}
@Override
public void setUp() throws SetupException {
}
@Override
public void setFileOpener(ResourceAccessor resourceAccessor) {
this.resourceAccessor = resourceAccessor;
}
@Override
public ValidationErrors validate(Database database) {
return null;
}
}