默认数据源
Springboot 默认支持 4 种数据源类型, 定义在 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 中, 分别是:
- org.apache.tomcat.jdbc.pool.DataSource
- com.zaxxer.hikari.HikariDataSource
- org.apache.commons.dbcp.BasicDataSource
- org.apache.commons.dbcp2.BasicDataSource
对于这 4 种数据源, 当 classpath 下有相应的类存在时, Springboot 会通过自动配置为其生成 DataSource Bean,DataSource Bean 默认只会生成一个, 四种数据源类型的生效先后顺序如下: Tomcat--> Hikari --> Dbcp --> Dbcp2 .
添加依赖与配置
在 Springboot 使用 JDBC 可直接添加官方提供的 spring-boot-start-jdbc 或者 spring-boot-start-data-jpa 依赖.
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.4.1.RELEASE</version>
- </parent>
- <dependencies>
- <!-- 添加 MySQL 依赖 -->
- <dependency>
- <groupId>MySQL</groupId>
- <artifactId>MySQL-connector-java</artifactId>
- </dependency>
- <!-- 添加 JDBC 依赖 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
- </dependencies>
在核心配置 application.properties 或者 application.YAML 文件中添加数据源相关配置.
- # application.properties 文件中添加如下配置:
- spring.datasource.url=jdbc:MySQL://localhost:3306/test?useUnicode=true&characterEncoding=utf8
- spring.datasource.driverClassName=com.MySQL.jdbc.Driver
- spring.datasource.username=root
- spring.datasource.password=123456
- # application.YAML 文件中添加如下配置:
- spring:
- datasource:
- url: jdbc:MySQL://localhost:3306/test?useUnicode=true&characterEncoding=utf8
- driverClassName: com.MySQL.jdbc.Driver
- username: root
- password: 123456
切换默认数据源
方式一 排除其他的数据源依赖, 仅保留需要的数据源依赖;
方式二 通过在核心配置中通过 spring.datasource.type 属性指定数据源的类型;
方式一
Springboot 默认支持的 4 种数据源 Maven 依赖如下:
- <!-- 添加 Tomcat-JDBC 依赖 -->
- <dependency>
- <groupId>org.apache.tomcat</groupId>
- <artifactId>tomcat-jdbc</artifactId>
- </dependency>
- <!-- 添加 HikariCP 依赖 -->
- <dependency>
- <groupId>com.zaxxer</groupId>
- <artifactId>HikariCP</artifactId>
- </dependency>
- <!-- 添加 DBCP 依赖 -->
- <dependency>
- <groupId>commons-dbcp</groupId>
- <artifactId>commons-dbcp</artifactId>
- </dependency>
- <!-- 添加 DBCP2 依赖 -->
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-dbcp2</artifactId>
- </dependency>
当我们引入 spring-boot-start-jdbc 依赖时, 其实里面就包含了 Tomcat-JDBC 的依赖, 如果想要切换为其他的数据源类型, 需要先将 Tomcat-JDBC 依赖排除, 再添加上需要的数据源的依赖, 以使用 HikariCP 数据源为例, 依赖配置如下:
- <!-- 添加 JDBC 依赖 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- <exclusions>
- <!-- 排除 Tomcat-JDBC 依赖 -->
- <exclusion>
- <groupId>org.apache.tomcat</groupId>
- <artifactId>tomcat-jdbc</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <!-- 添加 HikariCP 依赖 -->
- <dependency>
- <groupId>com.zaxxer</groupId>
- <artifactId>HikariCP</artifactId>
- </dependency>
方式二
此外, 还可以通过在核心配置中通过添加 spring.datasource.type = [数据源类型] 来指定数据源的类型;
- spring.datasource.type=com.zaxxer.hikari.HikariDataSource
- # spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
- # spring.datasource.type=org.apache.commons.dbcp.BasicDataSource
- # spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
第三方数据源
如果不想使用 Springboot 默认支持的 4 种数据源, 还可以选择使用其他第三方的数据源, 例如: Druid,c3p0 等.
以使用 Druid 数据源为例.
添加依赖与配置
在 pom 文件中引入第三方数据源依赖.
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.4.1.RELEASE</version>
- </parent>
- <dependencies>
- <!-- 添加 MySQL 依赖 -->
- <dependency>
- <groupId>MySQL</groupId>
- <artifactId>MySQL-connector-java</artifactId>
- </dependency>
- <!-- 添加 JDBC 依赖 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
- <!-- 添加 Druid 依赖 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>1.1.6</version>
- </dependency>
- </dependencies>
核心配置文件中的添加数据源相关配置:
- spring.datasource.main.type=com.alibaba.druid.pool.DruidDataSource
- spring.datasource.main.driver-class-name=com.MySQL.jdbc.Driver
- spring.datasource.main.url=jdbc:MySQL://localhost:3306/test_db?characterEncoding=utf8&useSSL=false
- spring.datasource.main.username=root
- spring.datasource.main.pwd=123456
定义数据源
使用注解 @Bean 创建一个 DataSource Bean 并将其纳入到 Spring 容器中进行管理即可.
- @Configuration
- public class DataSourceConfig {
- @Autowired
- private Environment env;
- @Bean
- public DataSource getDataSource() {
- DruidDataSource dataSource = new DruidDataSource();
- dataSource.setUrl(env.getProperty("spring.datasource.url"));
- dataSource.setUsername(env.getProperty("spring.datasource.username"));
- dataSource.setPassword(env.getProperty("spring.datasource.password"));
- return dataSource;
- }
- }
或者:
- @Configuration
- @ConfigurationProperties(prefix = "spring.datasource")
- public class DataSource2Config {
- private String url;
- private String username;
- private String password;
- @Bean
- public DataSource getDataSource() {
- DruidDataSource dataSource = new DruidDataSource();
- dataSource.setUrl(url);
- dataSource.setUsername(username);// 用户名
- dataSource.setPassword(password);// 密码
- return dataSource;
- }
- public String getUrl() {
- return url;
- }
- public void setUrl(String url) {
- this.url = url;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
来源: http://www.jianshu.com/p/d8f9ac666e40