最近在使用springboot 初始化数据库脚本的时候,发现springboot 2.6.4版本中的 spring.datasource.schema 方法已经被弃用了。且程序无法正常初始化数据库.sql 脚本。

(spring.datasource.schema 该方法在springboot 2.5.X 的版本已经被弃用。)

那么最新的数据库初始化 yml/properties 配置是什么呢?

通过阅读源码发现 spring.datasource.schema 方法 被替换成了 spring.sql.init.schema-locations 方法;spring.datasource.initializationMode 方法 被替换成了 spring.sql.init.mode 方法。

所以我们把配置修改如下:

 这样程序就可以正常初始化.sql脚本了。

除了上面用到的配置属性之外,还有一些其他的配置,下面详细讲解一下作用。

spring.sql.init.enabled:是否启动初始化的开关,默认是true。如果不想执行初始化脚本,设置为false即可。通过-D的命令行参数会更容易控制。
spring.sql.init.username和spring.sql.init.password:配置执行初始化脚本的用户名与密码。这个非常有必要,因为安全管理要求,通常给业务应用分配的用户对一些建表删表等命令没有权限。这样就可以与datasource中的用户分开管理。
spring.sql.init.schema-locations:配置与schema变更相关的sql脚本,可配置多个(默认用;分割)
spring.sql.init.data-locations:用来配置与数据相关的sql脚本,可配置多个(默认用;分割)
spring.sql.init.encoding:配置脚本文件的编码
spring.sql.init.separator:配置多个sql文件的分隔符,默认是;
spring.sql.init.continue-on-error:如果执行脚本过程中碰到错误是否继续,默认是false`;所以,上面的例子第二次执行的时候会报错并启动失败,因为第一次执行的时候表已经存在。

另外提几个需要注意的点。

springboot 2.0.X 以上版本 配置schema 时,需带有

spring.datasource.initialization-mode 属性

springboot 2.3.X 中有的版本则必须配置

spring.datasource.driver-class-name 属性 ,schema.sql 才可被初始化。

而driver-class-name 属性在hakari连接数据库的时候其实不是必需属性。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐