@ConditionalOnClass 表示如果有后面的类,那么就加载这个自动配置
@ConditionalOnMissingClass 如果没有后面的类,才自动配置
这2个注解对实现自动配置很重要。

@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })
public class DataSourceAutoConfiguration {}