Spring Boot中自動執行sql腳本的方法實例

說明:所有的代碼基於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)
);

實現核心

在SpringBoot的架構中,DataSourceInitializer類可以實現自動執行腳本的功能。通過自定義DataSourceInitializer Bean就可以實現按照業務要求執行特定的腳本。

實現方法

  • 前提
    已經構建瞭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;
    }
}

註意

有兩點需要說明下:

  • db文件夾下的腳本可能有多個,所以,這裡要使用PathMatchingResourcePatternResolver,讀取多個.sql的文件;
  • 獲取文件的路徑是classpath*:script/db/*.sql,classpath後加個星號,意思是連jar包中的符合該規則的文件,都可以獲取到,因為該項目最終會打成jar包來運行,如果不使用這個星號,就會出現在開發的時,沒有問題,等到瞭測試或生產環境,就會出現找不到sql文件問題。當然,這裡的文件規則,需要自己定義好,不要掃到瞭本不應加載的其他包中的文件瞭。

總結

到此這篇關於Spring Boot中自動執行sql腳本的文章就介紹到這瞭,更多相關Spring Boot自動執行sql腳本內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: