navicat导出sql脚本

右键数据库>转储SQL文件>结构和数据…(包含建表语句和数据库已有记录的数据插入语句等)

SpringBoot启动自动执行sql脚本_sql脚本

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

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

项目总览图如下

SpringBoot启动自动执行sql脚本_sql_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脚本以测试