轉載自:https://www.jianshu.com/p/4bdbab893397
說明:所有的代碼基於SpringBoot 2.0.3版本
背景
在應用程序啟動后,可以自動執行建庫、建表等SQL腳本.下文中以要自動化執行people.sql腳本為例說明,腳本在SpringBoot工程中的路徑為:classpath:people.sql,腳本的具體內容如下:
1 CREATE TABLE IF NOT EXISTS people( 2 persion_id BIGINT NOT NULL AUTO_INCREMENT, 3 first_name VARCHAR(20), 4 last_name VARCHAR(20), 5 PRIMARY KEY (persion_id) 6 );
實現核心
在SpringBoot的架構中,DataSourceInitializer類可以實現自動執行腳本的功能。通過自定義DataSourceInitializer Bean就可以實現按照業務要求執行特定的腳本。
實現方法
- 前提
已經構建了DataSource Bean。 - 方法
通過@Configuration、@Bean和@Value三個注解實現自定義DataSourceInitializer Bean,現在Bean的定義中實現自動化執行腳本的業務邏輯。 - 代碼
1 import org.springframework.beans.factory.annotation.Value; 2 import org.springframework.context.annotation.Bean; 3 import org.springframework.context.annotation.Configuration; 4 import org.springframework.core.io.Resource; 5 import org.springframework.jdbc.datasource.init.DataSourceInitializer; 6 import org.springframework.jdbc.datasource.init.DatabasePopulator; 7 import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; 8 import javax.sql.DataSource; 9 @Configuration 10 public class BatchTaskDataSourceInitializer { 11 /** 12 * 構建Resource對象 13 */ 14 @Value("classpath:schema-all.sql") 15 private Resource businessScript; 16 17 /** 18 * 自定義Bean實現業務的特殊需求 19 * @param dataSource 20 * @return 21 */ 22 @Bean 23 public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { 24 final DataSourceInitializer initializer = new DataSourceInitializer(); 25 // 設置數據源 26 initializer.setDataSource(dataSource); 27 initializer.setDatabasePopulator(databasePopulator()); 28 return initializer; 29 } 30 31 private DatabasePopulator databasePopulator() { 32 final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); 33 populator.addScripts(businessScript); 34 return populator; 35 } 36 }
作者:大哥你先走
鏈接:https://www.jianshu.com/p/4bdbab893397
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。