1 问题起源
- 为了方便他人操作自己的项目,在项目中配置好需要用到的数据库表和相关数据
- 只要在资源路径中添加
schema.sql
和 data.sql
文件,springboot
在运行的时候就会自动关联数据库创建相应的表和数据
2 源码跟踪
2.1 核心类:DataSourceAutoConfiguration
@Configuration
@ConditionalOnClass({
DataSource.class, EmbeddedDatabaseType.class})
@EnableConfigurationProperties({
DataSourceProperties.class})
@Import({
DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class})
public class DataSourceAutoConfiguration {
...}
@Configuration
@Import({
DataSourceInitializerInvoker.class, DataSourceInitializationConfiguration.Registrar.class})
class DataSourceInitializationConfiguration {
DataSourceInitializationConfiguration() {
}
static class Registrar implements ImportBeanDefinitionRegistrar {
private static final String BEAN_NAME = "dataSourceInitializerPostProcessor";
Registrar() {
}
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
if (!registry.containsBeanDefinition("dataSourceInitializerPostProcessor")) {
GenericB