Spring Boot項目——項目啟動自動執行sql腳本


背景

  • 在項目上線前,需要提供一批測試數據到數據庫,數據需求是:每次修改缺陷重啟項目后,測試數據會初始化成最初的數據

核心思想

  • 在SpringBoot的架構中,DataSourceInitializer類可以在項目啟動后初始化數據,我們可以通過自動執行自定義sql腳本初始化數據。通過自定義DataSourceInitializer Bean就可以實現按照業務要求執行特定的腳本。

使用

  • 前提:項目數據源配置完成
  • 方法
    • 通過@Configuration、@Bean和@Value三個注解實現自定義DataSourceInitializer Bean,現在Bean的定義中實現自動化執行腳本的業務邏輯。
    • 代碼如下
package com.test.integration.rpc.initdata;

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;

/**
 * @author test
 * @Description: 自定義初始化數據源
 * @date 2020/4/11
 */
@Configuration
public class CustomizeDataSourceInitializer {


    @Value("classpath:testSql/test_farms.sql")
    private Resource functionScriptFarms;
    @Value("classpath:testSql/test_miners.sql")
    private Resource functionScriptMiners;
    @Value("classpath:testSql/test_pool_config.sql")
    private Resource functionScriptPoolConfig;

    @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(functionScriptFarms);
        populator.addScripts(functionScriptMiners);
        populator.addScripts(functionScriptPoolConfig);

        return populator;
    }

}
    • SQL腳本如下:例子test_pool_config.sql
delete from `pool_configs`;

INSERT INTO `pool_configs`(`pool_config_id`, `cdate`, `mdate`, `pool_config_mid` ) VALUES (1, '2020-04-10 18:02:54', '2020-04-10 18:02:54', 'bcf2a18a-b38b-4e3a-8852-7efbabc7954d');
INSERT INTO `pool_configs`(`pool_config_id`, `cdate`, `mdate`, `pool_config_mid` ) VALUES (2, '2020-04-10 18:02:54', '2020-04-10 18:02:54', 'bcf3a18a-b38b-4e3a-8852-7efbabc7954d');
INSERT INTO `pool_configs`(`pool_config_id`, `cdate`, `mdate`, `pool_config_mid` ) VALUES (3, '2020-04-10 18:02:54', '2020-04-10 18:02:54', 'bcf4a18a-b38b-4e3a-8852-7efbabc7954d');
INSERT INTO `pool_configs`(`pool_config_id`, `cdate`, `mdate`, `pool_config_mid` ) VALUES (4, '2020-04-10 18:02:54', '2020-04-10 18:02:54', 'bcf5a18a-b38b-4e3a-8852-7efbabc7954d');

 


免責聲明!

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



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