如果想SpringBoot为我们提供自动配置数据访问的基础设施,那么,我们需要直接或间接依赖spring-jdbc,一旦spring-jdbc位于我们SpringBoot应用的classpath,即会触发数据访问相关的自动配置行为,最简单的方法就是把spring-boot-starter-jdbc加为应用的依赖。
默认情况下,如果我们没有配置DataSource,那么,SpringBoot会为我们自动配置一个基于嵌入式数据库的DataSource,如果我们的SpringBoot项目只依赖一个数据库,那么,使用DataSource自动配置模块提供的配置参数是最方便的:
=
=
=
当然我们也可以自己配置一个DataSource:
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
("jdbc:log4jdbc:mysql://localhost:3306/springboot_start?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true");
("root");
("root");
return dataSource;
}
如果我们要配置多个DataSource实例指向多个数据库:
@Bean
public DataSource dataSource1() {
DruidDataSource dataSource = new DruidDataSource();
(".");
("jdbc:log4jdbc:mysql://localhost:3306/spring_boot_demo?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true");
("root");
("root");
return dataSource;
}
@Bean
public DataSource dataSource2() {
DruidDataSource dataSource = new DruidDataSource();
(".");
("jdbc:log4jdbc:mysql://localhost:3306/spring_boot_demo_two?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true");
("root");
("root");
return dataSource;
}
启动SpringBoot应用会抛出类似的异常:
Parameter 0 of method sqlSessionFactory in required a single bean, but 2 were found:
- dataSource1: defined by method 'dataSource1' in class path resource [com/springboot/template/config/]
- dataSource2: defined by method 'dataSource2' in class path resource [com/springboot/template/config/]
解决方法:
在其中的一个DataSource配置@Primary