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‘);

原文地址:https://www.cnblogs.com/zuiyue_jing/p/12681815.html

时间: 2024-10-10 21:34:40

Spring Boot使用——项目启动自动执行sql脚本的相关文章

一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式

前言 有时候我们需要在应用启动时执行一些代码片段,这些片段可能是仅仅是为了记录 log,也可能是在启动时检查与安装证书 ,诸如上述业务要求我们可能会经常碰到 Spring Boot 提供了至少 5 种方式用于在应用启动时执行代码.我们应该如何选择?本文将会逐步解释与分析这几种不同方式 CommandLineRunner CommandLineRunner 是一个接口,通过实现它,我们可以在 Spring 应用成功启动之后 执行一些代码片段 @Slf4j @Component @Order(2)

Spring boot mybatis项目启动后一直刷日志的bug修复……

最近接手一个项目,使用的框架是springboot+mybatis: 其中持久层是使用mybatis集成的,sql是配置在mapper.xml文件中: 然后呢,有时候做新功能的时候,往xml文件中增加新的sql逻辑的时候,总会因为疏忽,或者手误 等原因,造成一些错误 具体表现就是:eclipse的控制台一直在快速的刷日志,也没有看到什么报错的东西,就是刷一些加载class文件的内容: 百度之后说是xml配置文件错的,还有一些文章是说要去 源码中的某个抛错的地方增加断点,可是每次加了断点之后 启动

【Spring框架】 ? 项目启动时执行特定处理及ApplicationListener源码分析

1.背景 在一些业务场景中,在容器启动完成后,需要处理一些诸如:kafka业务注册,数据处理,初始化缓存等的操作. 本文重点介绍如何在服务启动中,或启动完成时执行相关处理. 2.针对上述场景,有如下实现方法 A:实现基于javaweb的ServletContextListener接口,重写contextInitialized()接口   B:实现基于javaweb的javax.servlet包下的Filter接口,重写init(FilterConfig filterConfig)接口   C:继

spring boot 一个项目启动多个实例

0.前言 在开发中,我们经常需要以不同端口启动同一个项目的多个实例,IDEA中启动多个实例很简单 1.方法 1.1.在项目中,选择编辑配置,然后点选允许并行运行,如下图: 1.2.调出RunDashboard面板方便我们查看,调出方法: 在项目的.idea文件夹下找到workspace.xml文件, 打开,找到RunDashboard节点,添加如下选项,如下 <option name="configurationTypes"> <set> <option

spring boot 配置启动后执行sql, 中文乱码

spring.datasource.schema指定启动后执行的sql文件位置. 我发现中文乱码,原因是没有指定执行sql script encoding: spring: datasource: url: "jdbc:h2:mem:test" username: "sa" password: "" schema: database/import.sql sql-script-encoding: utf-8 type: com.alibaba.d

使用Spring Boot开发者工具进行自动重启和页面自动刷新

简介 大家可能都听说过开发Node.js应用时可以使用多种工具对开发者提供便利,如WebPack提供了开发者服务器来支持js应用动态更替,并在保存文件时自动刷新浏览器.Spring Boot也提供了相似的开发者工具,让我们更快速.更舒心的开发Spring Boot应用.大家看完本教程就可以学会如何如用Spring Boot开发者工具进行自动重启和自动刷新页面. 自动重启原理 Spring Boot的开发者工具会为应用创建两个classloader.一个是用来加载不会变动的类,称为base cla

自定义的Spring Boot starter如何设置自动配置注解

本文首发于个人网站:自定义的Spring Boot starter如何设置自动配置注解 在Spring Boot实战之定制自己的starter一文最后提到,触发Spring Boot的配置过程有两种方法: spring.factories:由Spring Boot触发探测classpath目录下的类,进行自动配置: @Enable:有时需要由starter的用户触发*查找自动配置文件的过程. 实战 接着上篇文章的例子,首先将spring.factories中的内容注释掉 #org.springf

IDEA新建SpringBoot+MySQL+MyBatis+Lombok+Spring Boot DevTools项目

一,IDEA新建SpringBoot+MySQL+MyBatis+Lombok+Spring Boot DevTools项目 1,新建项目的选中项 2,新建后我们需要配置勾选这个自动编译 3,按住shift+alt+ctrl+/,然后选中registry 4,然后选中这个选项 5,然后在 pom.xml文件添加以下代码,开启热部署工具,不配置不生效 <build> <plugins> <plugin> <groupId>org.springframework

涨姿势:Spring Boot 2.x 启动全过程源码分析

上篇<Spring Boot 2.x 启动全过程源码分析(一)入口类剖析>我们分析了 Spring Boot 入口类 SpringApplication 的源码,并知道了其构造原理,这篇我们继续往下面分析其核心 run 方法. [toc] SpringApplication 实例 run 方法运行过程 上面分析了 SpringApplication 实例对象构造方法初始化过程,下面继续来看下这个 SpringApplication 对象的 run 方法的源码和运行流程. public Conf