Spring Boot(2.0版后)中自動執行sql腳本


轉載自: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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM