0
点赞
收藏
分享

微信扫一扫

SpringBoot启动自动执行sql脚本


navicat导出sql脚本

SpringBoot启动自动执行sql脚本逻辑编写

大致逻辑:配置文件配置数据库连接;编写建表及新增记录sql脚本,编写@Configuration类读取并执行sql脚本;

项目总览图如下

SpringBoot启动自动执行sql脚本_spring_02

  • 编写sql脚本,置于resources/sql目录下

schema.sql

DROP TABLE IF EXISTS people;

CREATE TABLE IF NOT EXISTS people(
persion_id INT NOT NULL,
first_name VARCHAR(20),
last_name VARCHAR(20),
PRIMARY KEY (persion_id)
);

data.sql

INSERT INTO people VALUES (1, 'ashe', '弗雷尔卓德');
INSERT INTO people VALUES (2, 'annie', '班德尔城');
INSERT INTO people VALUES (3, 'akali', '均衡教派');

  • 配置数据库连接

spring.datasource.driver-class-name=org.sqlite.JDBC
spring.datasource.url=jdbc:sqlite:C:/Users/catface/Desktop/auto.db

  • 编写@Configuration配置类

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;

@Configuration
public class CustomizeDataSourceInitializer {

@Value("classpath:sql/schema.sql")
private Resource sqlScriptSchema;
@Value("classpath:sql/data.sql")
private Resource sqlScriptData;

@Bean
public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) {
DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
dataSourceInitializer.setDataSource(dataSource);
dataSourceInitializer.setDatabasePopulator(databasePopulator());
return dataSourceInitializer;
}

private DatabasePopulator databasePopulator() {
ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
resourceDatabasePopulator.addScript(sqlScriptSchema);
resourceDatabasePopulator.addScript(sqlScriptData);
resourceDatabasePopulator.setSeparator(";");//分隔符[默认;]
return resourceDatabasePopulator;
}
}

  • 项目运行后会立即执行sql脚本以测试


举报

相关推荐

0 条评论