Это примерно MyBatis-Migrations , верно?
Spring Boot не предоставляет встроенную поддержку, однако, кажется, можно написать пользовательский DatabasePopulator
.
Вот простая реализация.
Используется функция миграции Migrations .
import java.io.File;
import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.ibatis.migration.ConnectionProvider;
import org.apache.ibatis.migration.FileMigrationLoader;
import org.apache.ibatis.migration.MigrationException;
import org.apache.ibatis.migration.operations.UpOperation;
import org.springframework.jdbc.datasource.init.DatabasePopulator;
import org.springframework.jdbc.datasource.init.ScriptException;
import org.springframework.jdbc.datasource.init.UncategorizedScriptException;
public class MyBatisMigrationsPopulator implements DatabasePopulator {
private final DataSource dataSource;
private final String scriptsDir;
private final Properties properties;
private final DatabaseOperationOption options;
public MyBatisMigrationsPopulator(DataSource dataSource, String scriptsDir,
Properties properties, DatabaseOperationOption options) {
super();
this.dataSource = dataSource;
this.scriptsDir = scriptsDir;
this.properties = properties;
this.options = options;
}
@Override
public void populate(Connection connection) throws SQLException, ScriptException {
try {
new UpOperation().operate(new DataSourceConnectionProvider(dataSource),
createMigrationsLoader(), options, null);
} catch (MigrationException e) {
throw new UncategorizedScriptException("Migration failed.", e.getCause());
}
}
protected FileMigrationLoader createMigrationsLoader() {
URL url = getClass().getClassLoader().getResource(scriptsDir);
File dir = new File(url.getFile());
return new FileMigrationLoader(dir, "utf-8", properties);
}
}
Пример определения компонента DataSourceInitializer
:
@Bean
public DataSourceInitializer dataSourceInitializer(DataSource dataSource) {
// the directory that contains SQL scripts
String scriptsDir = "scripts";
String CHANGELOG_TABLE = "databaseChangelog";
Properties properties = new Properties();
properties.setProperty("changelog", CHANGELOG_TABLE);
DatabaseOperationOption options = new DatabaseOperationOption();
options.setChangelogTable(CHANGELOG_TABLE);
MyBatisMigrationsPopulator populator =
new MyBatisMigrationsPopulator(dataSource, scriptsDir, properties, options);
DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
dataSourceInitializer.setDataSource(dataSource);
dataSourceInitializer.setDatabasePopulator(populator);
return dataSourceInitializer;
}
Вот исполняемый файл демонстрационный проект .
Возможно, вам потребуется изменить настройки источника данных в application.properties
.
Надеюсь, это поможет!