大部分的Java应用都需要访问数据库,尤其是服务层,所以,SpringBoot会为我们自动配置相应的数据访问设施
若想SpringBoot为我们自动配置数据访问的基础设施,那么,我们需要直接或间接地依赖spring-jdbc,一旦spring-jdbc位于我们springBoot应用的classpath,即会触发数据访问相关自动配置行为,最简单的做法就是把spring-boot-starter-jdbc加为应用的依赖
默认情况下,如果我们没有配置任何DataSource,那么,SpringBoot会为我们自动配置一个基于嵌入式数据库的DataSource,这种自动配置行为其实很适合于测试场景,但对实际的开发帮助不大,基本上我们会自己配置一个DataSource实例,或者通过自动配置模块提供的配置参数对DataSource实例进行自定义的配置
假设我们的SpringBoot应用只依赖一个数据库,那么,使用DataSource自动配置模块提供的配置参数是最方便的:
spring.datasource.url= jdbc: mysql://{
database host}: 3306/{
databaseName}
spring.datasource.username={
database username}
spring.datasource.password={
database password}
当然,自己配置一个DataSource也是可以的,SpringBoot也会智能地选择我们自己配置的这个DataSource实例(只不过必要性不大)
除了DatraSource会自动配置,SpringBoot还会自动配置相应的JdbcTemplate、DataSourceTransactionManager等关联“设施”,可谓服务周到,我们只要在使用的地方注入就可以了:
class SomeDao {
@Autowired
JdbcTemplate jdbcTemplate;
public < T> List< T> queryForList( String sql){
// ...
}
// ...
}
不过,spring-boot-starter-jdbc以及与其相关的自动配置也不总是带来便利,在某些场景下,我们可能会在一个应用中需要依赖和访问多个数据库,这个时候就会出问题了。
假设我们在ApplicationContext中设置了多个DataSource实例指向多个数据库: