SpringBoot启动并初始化执行sql脚本问题

在SpringBoot项目中,我们可能需要在应用启动时自动执行一些SQL脚本,这个需求通常使用Spring Boot提供的initializer机制来实现,下面是详细的攻略。

添加SQL脚本文件

首先,在项目的classpath目录下新建一个名为data.sql或者schema.sql的文件(注意文件名不能错,如果选择了data.sql,那么执行的就是数据脚本,如果选择了schema.sql,那么执行的就是DDL脚本)。在这个文件中,可以写入一些需要执行的SQL语句,比如:

CREATE TABLE user (
  id int(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(20) NOT NULL,
  age int(3) NOT NULL,
  PRIMARY KEY (id)
);

INSERT INTO user (name, age) VALUES ('Tom', 20);
INSERT INTO user (name, age) VALUES ('Jerry', 22);

配置DataSource

要启动并初始化执行SQL脚本,我们需要首先配置数据源。在application.properties中添加如下配置:

# 数据库连接url
spring.datasource.url=jdbc:mysql://localhost:3306/test
# 数据库用户名
spring.datasource.username=root
# 数据库密码
spring.datasource.password=root
# 驱动类名
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

添加initializer类

最后,在项目的src/main/java下添加一个继承org.springframework.boot.ApplicationRunner接口的Java类,比如:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.init.ScriptUtils;

import javax.sql.DataSource;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.SQLException;

public class SqlScriptInitializer implements ApplicationRunner {

    @Value("classpath:data.sql")
    private Resource script;

    private DataSource dataSource;

    public SqlScriptInitializer(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public void run(ApplicationArguments args) throws SQLException {
        try (Connection connection = dataSource.getConnection()) {
            ScriptUtils.executeSqlScript(connection, script, StandardCharsets.UTF_8, false, false);
        }
    }
}

在这个类中,我们使用了Spring Boot提供的org.springframework.jdbc.datasource.init.ScriptUtils类来执行SQL脚本。其中的@Value("classpath:data.sql")注解表示读取classpath路径下的data.sql文件,DataSource实例一般使用Spring Boot自动配置好的。

启动应用

至此,整个初始化过程已经完成,只需要启动应用程序,就可以自动执行SQL脚本了。这里提供两个示例:

示例1:使用Maven启动

在项目根目录下执行mvn spring-boot:run即可启动应用程序。

示例2:使用启动器打包并执行

在项目根目录下执行mvn clean package会打包出一个可执行jar文件,执行如下命令即可启动程序,并自动执行SQL脚本:

java -jar your_application.jar

这样,我们就成功实现了SpringBoot启动并初始化执行sql脚本的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot启动并初始化执行sql脚本问题 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Oracle存储过程游标用法分析

    Oracle存储过程游标用法分析 什么是Oracle存储过程游标? 在Oracle中,存储过程是一个可重用的过程,它是一组预定义的PL/SQL代码块,可以在数据库中多次执行。存储过程可以显著提高性能,因为它们可以在单个调用中执行多个SQL语句,从而减少了网络流量和数据库访问时间。游标是一个PL/SQL指针,可以通过它来处理多个查询结果集,使存储过程变得灵活且…

    database 2023年5月21日
    00
  • SQL SERVER 触发器介绍

    下面是“SQL SERVER 触发器介绍”的完整攻略。 一、什么是SQL SERVER触发器 SQL SERVER 触发器是SQL SERVER数据库对象的一种类型,触发器与存储过程一样都是SQL语句的集合,触发器是由SQL SERVER对一种事件(INSERT、UPDATE、DELETE)进行处理后自动执行的代码块。 SQL SERVER触发器主要由触发器…

    database 2023年5月21日
    00
  • android设备不识别awk命令 缺少busybox怎么办

    Android设备不识别awk命令 缺少Busybox解决方案 在某些情况下,我们需要在Android设备上使用awk命令进行文本处理,但是发现设备不识别awk命令,这是因为Android本身并没有集成awk命令。要使用awk命令,我们需要安装busybox工具。 什么是Busybox Busybox是一个单一可执行文件的工具箱,它包含了常用Linux命令的…

    database 2023年5月22日
    00
  • VMware Workstation安装(Linux内核)银河麒麟图文教程

    VMware Workstation安装(Linux内核)银河麒麟图文教程 简介 VMware Workstation 是一款优秀的虚拟机软件,可以方便地创建虚拟机环境,并在其中运行不同操作系统。下面是银河麒麟系统中 VMware Workstation 安装的详细步骤。 步骤 1. 准备工作 首先需要在银河麒麟系统中安装必要的软件包,其中包括 gcc、ma…

    database 2023年5月22日
    00
  • 使用CentOS 7.5卸载自带jdk安装自己的JDK1.8的过程

    下面是使用CentOS 7.5卸载自带jdk安装自己的JDK1.8的完整攻略: 1. 确认当前系统自带的jdk版本号 我们需要确认当前系统自带的jdk版本号,以便正确卸载。在终端执行以下命令: java -version 如果输出的结果类似于以下内容,则表明当前系统自带的jdk版本号为1.7: java version "1.7.0_181&quo…

    database 2023年5月22日
    00
  • MySQL UNION操作符基础知识点

    当我们需要从两个或多个表中获取数据时,MySQL提供了Union操作符,可以用于合并两个或多个SELECT语句的结果集,且不会显示重复的行。在本文中,我们将介绍MySQL Union操作符的基础知识点,包括其语法、用法和示例。 语法 Union操作符的语法如下: SELECT column_name(s) FROM table1 UNION SELECT c…

    database 2023年5月22日
    00
  • Redis教程(十五):C语言连接操作代码实例

    接下来我将为您详细讲解《Redis教程(十五):C语言连接操作代码实例》的完整攻略。 1. 概述 本教程主要介绍如何使用C语言连接Redis数据库,包括连接Redis服务器、设置Redis密码等操作。 2. 连接Redis服务器 在C语言中连接Redis服务器的操作非常简单,只需要使用C语言的redisContext结构体定义一个连接,然后调用redisCo…

    database 2023年5月22日
    00
  • Mongodb 崩溃报错 Too many open files的问题解析

    首先让我们详细讲解“Mongodb 崩溃报错 Too many open files的问题解析”。 问题背景 在实际工作环境中,我们有时会遇到Mongodb服务出现问题的情况,例如在使用Mongodb进行大规模数据存储时,由于文件句柄过多导致系统无法及时关闭文件,最终导致Mongodb服务崩溃,有可能会出现以下报错信息: Failed to open &qu…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部