在SpringBoot项目中,我们可能需要在应用启动时自动执行一些SQL脚本,这个需求通常使用Spring Boot提供的initializer机制来实现,下面是详细的攻略。
首先,在项目的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);
要启动并初始化执行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
最后,在项目的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脚本了。这里提供两个示例:
在项目根目录下执行mvn spring-boot:run
即可启动应用程序。
在项目根目录下执行mvn clean package
会打包出一个可执行jar文件,执行如下命令即可启动程序,并自动执行SQL脚本:
java -jar your_application.jar
这样,我们就成功实现了SpringBoot启动并初始化执行sql脚本的功能。
本文链接:http://task.lmcjl.com/news/14043.html