spring-boot版本1中初始化sql语句
application.properties配置:
spring.datasource.initialize=true spring.datasource.schema=classpath:schema-mysql.sql spring.datasource.data=classpath:data-mysql.sql
再在resource目录下添加schema-mysql.sql和data-mysql.sql的文件,schema中主要用于创建表的语句,data中主要存放插入数据及更新操作
现在开始源码分析:
这个方法在DataSourceInitializer
private void runSchemaScripts() {
//获取schema位置并转化为Resource对象
List<Resource> scripts = getScripts(this.properties.getSchema(), "schema");
if (!scripts.isEmpty()) {
//这里执行获取的schema
runScripts(scripts);
try {
this.applicationContext
.publishEvent(new DataSourceInitializedEvent(this.dataSource));
if (!this.initialized) {
//这里执行data.sql文件
runDataScripts();
this.initialized = true;
}
}
catch (IllegalStateException ex) {
}
}
}
从这里可以看出它是先进运行schema中语句再运行data中的内容
private void runScripts(List<Resource> resources) {
if (resources.isEmpty()) {
return;
}
//下面主要是把schema中的resource对象封装为popluator对象
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.setContinueOnError(this.properties.isContinueOnError());
populator.setSeparator(this.properties.getSeparator());
if (this.properties.getSqlScriptEncoding() != null) {
populator.setSqlScriptEncoding(this.properties.g