背景
最近在配置数据库的初始化时,遇到
sql:init:schema-locations: classpath:db/schema.sqldata-locations: classpath:db/data.sqlusername: sapassword:
网上搜索资料,大同小异,都是无用的资料,于是决定自己研究下数据库的初始化。于是有了下文。
备注:
解决数据库无法正确初始化的问题,在于数据库的配置发生了变化,详细参考
private static List<String> scriptLocations(List<String> locations, String fallback, String platform) {if (locations != null) {return locations;}List<String> fallbackLocations = new ArrayList<>();fallbackLocations.add("optional:classpath*:" + fallback + "-" + platform + ".sql");fallbackLocations.add("optional:classpath*:" + fallback + ".sql");return fallbackLocations;}
显然,当配置错误的时候,默认从 classpath 下的
optional:classpath*:" + fallback + "-" + platform + ".sql"
"optional:classpath*:" + fallback + ".sql"
取数据,而 fallback 为 data 或 schema,platform 为 all。
因此,正确的配置应该是
spring:datasource:schema: classpath:/db/table.sql;/db/table1.sqldata: classpath:/db/data.sqldata-username: saschema-username: saschema-password:data-password:initialization-mode: always
其中,initialization-mode 必须是 always
配置
DataSourceProperties
数据源初始化
AbstractScriptDatabaseInitializer
DataSourceScriptDatabaseInitializer
R2dbcScriptDatabaseInitializer
H2 相关配置
H2ConsoleAutoConfiguration
H2ConsoleProperties