springboot启动时候没有执行sql建表语句,网上查到的资料是,springboot1.x和2.x不一样,(这该死的版本)
原因:原理:
DataSourceInitializer执行创建函数时增加了类型判断
void initSchema() {
List<Resource> scripts = this.getScripts("spring.datasource.data", this.properties.getData(), "data");
if (!scripts.isEmpty()) {
if (!this.isEnabled()) {
logger.debug("Initialization disabled (not running data scripts)");
return;
}
String username = this.properties.getDataUsername();
String password = this.properties.getDataPassword();
this.runScripts(scripts, username, password);
}
}
private boolean isEnabled() {
DataSourceInitializationMode mode = this.properties.getInitializationMode();
if (mode == DataSourceInitializationMode.NEVER) {
return false;
} else {
return mode != DataSourceInitializationMode.EMBEDDED || this.isEmbedded();
}
}
网上查到的解决方法有两种:
(1) 在application配置文件指定执行sql(静态资源)的地方加上initialization-mode:always即可
(2)如果你配置文件没有指定执行文件的名称而是使用默认的schema.sql或者schema-all.sql的话就在配置文件中加上spring.datasource.initialization-mode=always
方法二我确定是可行的,直接在application.properties里面加spring.datasource.initialization-mode=always
,方法一他们给出的解决方案是:
不知道是不是版本的问题,我加在这里是报错的,
后来查到资料,加在这里才行,其实和方法二没差别了
成功建表