1. 程式人生 > 程式設計 >Spring Boot中自動執行sql指令碼的實現

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;
  }
}

到此這篇關於Spring Boot中自動執行sql指令碼的實現的文章就介紹到這了,更多相關SpringBoot自動執行sql內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!