說明:所有的代碼基于SpringBoot 2.0.3版本
背景
在應用程式啟動後,可以自動執行建庫、建表等SQL腳本.下文中以要自動化執行people.sql腳本為例說明,腳本在SpringBoot工程中的路徑為:classpath:people.sql,腳本的具體内容如下:
CREATE TABLE IF NOT EXISTS people(
persion_id BIGINT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(20),
last_name VARCHAR(20),
PRIMARY KEY (persion_id)
);
實作核心
實作方法
-
前提
已經建構了DataSource Bean。
-
方法
通過@Configuration、@Bean和@Value三個注解實作自定義DataSourceInitializer Bean,現在Bean的定義中實作自動化執行腳本的業務邏輯。
- 代碼
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.init.DataSourceInitializer;
import org.springframework.jdbc.datasource.init.DatabasePopulator;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import javax.sql.DataSource;
@Configuration
public class BatchTaskDataSourceInitializer {
/**
* 建構Resource對象
*/
@Value("classpath:schema-all.sql")
private Resource businessScript;
/**
* 自定義Bean實作業務的特殊需求
* @param dataSource
* @return
*/
@Bean
public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) {
final DataSourceInitializer initializer = new DataSourceInitializer();
// 設定資料源
initializer.setDataSource(dataSource);
initializer.setDatabasePopulator(databasePopulator());
return initializer;
}
private DatabasePopulator databasePopulator() {
final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.addScripts(businessScript);
return populator;
}
}
歡迎關注微信公衆号:大資料從業者