- Create by yster@foxmail.com 2018-8-2
一:开始
在使用Spring Boot数据源之前,我们一般会导入相关依赖。其中数据源核心依赖就是spring‐boot‐starter‐jdbc
如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql‐connector‐java</artifactId>
<scope>runtime</scope>
</dependency>
或者你使用的是JPA:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
查看JPA的依赖关系,如图,其中已经包含JDBC。
二:数据源
配置我们的Mysql数据库连接信息:
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://192.168.15.22:3306/jdbc
driver‐class‐name: com.mysql.jdbc.Driver
1.如何查看当前数据源?
编写单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class RobotsApplicationTests {
@Autowired
DataSource dataSource;
@Test
public void test(){
System.out.println(dataSource.getClass());
}
}
查看打印:
class org.apache.tomcat.jdbc.pool.DataSource
总结
所以这段配置的效果就是,默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源,
且数据源的相关配置都在DataSourceProperties里面,如下:
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties
implements BeanClassLoaderAware, EnvironmentAware, InitializingBean {
...
private String name = "testdb";
private String driverClassName;
private String url;
private String username;
private String password;
.....
2.自动配置原理
找到org.springframework.boot.autoconfigure.jdbc
包下的DataSourceConfiguration
类
abstract class DataSourceConfiguration {
@ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.tomcat.jdbc.pool.DataSource", matchIfMissing = true)
static class Tomcat extends DataSourceConfiguration {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.tomcat")
public org.apache.tomcat.jdbc.pool.DataSource dataSource(
DataSourceProperties properties) {
org.apache.tomcat.jdbc.pool.DataSource dataSource = createDataSource(
properties, org.apache.tomcat.jdbc.pool.DataSource.class);
DatabaseDriver databaseDriver = DatabaseDriver
.fromJdbcUrl(properties.determineUrl());
String validationQuery = databaseDriver.getValidationQuery();
if (validationQuery != null) {
dataSource.setTestOnBorrow(true);
dataSource.setValidationQuery(validationQuery);
}
return dataSource;
}
}
......
以上就是自动配置代码,原理大概是如果在classpath下存在org.apache.tomcat.jdbc.pool.DataSource.class
类,并且在配置文件中指定spring.datasource.type
的值为org.apache.tomcat.jdbc.pool.DataSource
,或者不写都会认为可以通过。只有通过才会进入这段配置代码,才能注入DataSource
Bean。
Spri