不需要全部看懂源码,只要找到关键的信息即可,如图在这个自动配置类路其实就可以看出Springboot2.2.1支持的数据源种类有如下:
点一下DataSourceConfiguration类,里面都是各种DataSource的配置,用了很多@Conditional注解,条件符合才会起效
然后为什么说2.2.1版本默认是Hikari作为Datasource的?可以看一下项目的依赖图,可以看出默认引入了Hikari的jar
而且条件都符合,所以HikariDataSource就会进行自动配置
源码里用import引入了一个DataSourceInitializationConfiguration类,看其命名,应该是个初始化配置类
挑重点,如图,很明显要用了Spring框架很重要的后置处理器,还有一个DataSourceInitializerInvoker类
DataSourceInitializerInvoker类是做什么的?看其源码应该是一个初始化操作的监听器类,主要操作由DataSourceInitializer执行
DataSourceInitializer源码,里面有很多操作都是进行schema脚本的操作,只要非isEnabled就可以执行
只要两个条件符合就执行,DataSourceInitializationMode属性,看起来是通过配置文件获取的
getScripts,获取对应的脚本
读取schema脚本,所以可以看出只要将一些sql文件放在resources即可,默认命令为schema.sql,schema‐all.sql;
再通过资料,确认了这个类确实是执行一些初始化schema脚本的,根据application提示,发现有个属性,将其改为always即可
改为embedded是不能执行的,虽然源码里代码是这样的
还有这个关键代码,从配置spring.datasource.schema获取信息, List<Resource> scripts = getScripts("spring.datasource.schema", this.properties.getSchema(), "schema");