关键词

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脚本的功能。

本文链接:http://task.lmcjl.com/news/14043.html

展开阅读全文