SpringBoot数据源配置

默认数据源

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 依赖。
[html] view plain copy
  1. <parent>  
  2.     <groupId>org.springframework.boot</groupId>  
  3.     <artifactId>spring-boot-starter-parent</artifactId>  
  4.     <version>1.4.1.RELEASE</version>  
  5. </parent>  
  6. <dependencies>  
  7.     <!-- 添加MySQL依赖 -->  
  8.     <dependency>  
  9.         <groupId>mysql</groupId>  
  10.         <artifactId>mysql-connector-java</artifactId>  
  11.     </dependency>  
  12.     <!-- 添加JDBC依赖 -->  
  13.     <dependency>  
  14.         <groupId>org.springframework.boot</groupId>  
  15.         <artifactId>spring-boot-starter-jdbc</artifactId>  
  16.     </dependency>  
  17. </dependencies>  
在核心配置application.properties或者application.yml文件中添加数据源相关配置。
application.properties文件中添加如下配置:
  1. spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8  
  2. spring.datasource.driverClassName=com.mysql.jdbc.Driver  
  3. spring.datasource.username=root  
  4. spring.datasource.password=123456  
application.yml文件中添加如下配置:
[plain] view plain copy
  1. spring:  
  2.   datasource:  
  3.     url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8  
  4.     driverClassName: com.mysql.jdbc.Driver  
  5.     username: root  
  6.     password: 123456  

切换默认数据源

按照上述配置启动应用时,Springboot会读取核心配置中的配置并自动装配一个Tomcat DataSource。如果要切换成其他的默认支持的数据源类型,有以下两种方式:
方式一 排除其他的数据源依赖,仅保留需要的数据源依赖;
方式二 通过在核心配置中通过spring.datasource.type属性指定数据源的类型;

方式一

Springboot默认支持的4种数据源Maven依赖如下:
[html] view plain copy
  1. <!-- 添加Tomcat-JDBC依赖 -->  
  2. <dependency>  
  3.     <groupId>org.apache.tomcat</groupId>  
  4.     <artifactId>tomcat-jdbc</artifactId>  
  5. </dependency>  
  6. <!-- 添加HikariCP依赖 -->  
  7. <dependency>  
  8.     <groupId>com.zaxxer</groupId>  
  9.     <artifactId>HikariCP</artifactId>  
  10. </dependency>  
  11. <!-- 添加DBCP依赖 -->  
  12. <dependency>  
  13.     <groupId>commons-dbcp</groupId>  
  14.     <artifactId>commons-dbcp</artifactId>  
  15. </dependency>  
  16. <!-- 添加DBCP2依赖 -->  
  17. <dependency>  
  18.     <groupId>org.apache.commons</groupId>  
  19.     <artifactId>commons-dbcp2</artifactId>  
  20. </dependency>  
当我们引入spring-boot-start-jdbc依赖时,其实里面就包含了 Tomcat-JDBC 的依赖,如果想要切换为其他的数据源类型,需要先将Tomcat-JDBC 依赖排除,再添加上需要的数据源的依赖,以使用HikariCP数据源为例,依赖配置如下。
[html] view plain copy
  1. <!-- 添加JDBC依赖 -->  
  2. <dependency>  
  3.     <groupId>org.springframework.boot</groupId>  
  4.     <artifactId>spring-boot-starter-jdbc</artifactId>  
  5.     <exclusions>  
  6.         <!-- 排除Tomcat-JDBC依赖 -->  
  7.         <exclusion>  
  8.             <groupId>org.apache.tomcat</groupId>  
  9.             <artifactId>tomcat-jdbc</artifactId>  
  10.         </exclusion>  
  11.     </exclusions>  
  12. </dependency>  
  13. <!-- 添加HikariCP依赖 -->  
  14. <dependency>  
  15.     <groupId>com.zaxxer</groupId>  
  16.     <artifactId>HikariCP</artifactId>  
  17. </dependency>  

方式二 

此外,还可以通过在核心配置中通过添加spring.datasource.type = [数据源类型] 来指定数据源的类型;
  1. spring.datasource.type=com.zaxxer.hikari.HikariDataSource  
  2. # spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource  
  3. # spring.datasource.type=org.apache.commons.dbcp.BasicDataSource  
  4. # spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource  

第三方数据源

如果不想使用Springboot默认支持的4种数据源,还可以选择使用其他第三方的数据源,例如:Druid、c3p0等。
以使用Druid数据源为例。

添加依赖与配置

在pom文件中引入第三方数据源依赖。
[html] view plain copy
  1. <parent>  
  2.     <groupId>org.springframework.boot</groupId>  
  3.     <artifactId>spring-boot-starter-parent</artifactId>  
  4.     <version>1.4.1.RELEASE</version>  
  5. </parent>  
  6. <dependencies>  
  7.     <!-- 添加MySQL依赖 -->  
  8.     <dependency>  
  9.         <groupId>mysql</groupId>  
  10.         <artifactId>mysql-connector-java</artifactId>  
  11.     </dependency>  
  12.     <!-- 添加JDBC依赖 -->  
  13.     <dependency>  
  14.         <groupId>org.springframework.boot</groupId>  
  15.         <artifactId>spring-boot-starter-jdbc</artifactId>  
  16.     </dependency>  
  17.     <!-- 添加Druid依赖 -->  
  18.     <dependency>  
  19.         <groupId>com.alibaba</groupId>  
  20.         <artifactId>druid</artifactId>  
  21.         <version>1.1.6</version>  
  22.     </dependency>  
  23. </dependencies>  
核心配置文件中的添加数据源相关配置与使用默认数据源时的配置相同,此处不再重复贴出。

定义数据源

使用注解@Bean 创建一个DataSource Bean并将其纳入到Spring容器中进行管理即可。
[java] view plain copy
  1. @Configuration  
  2. public class DataSourceConfig {  
  3.   
  4.     @Autowired  
  5.     private Environment env;  
  6.   
  7.     @Bean  
  8.     public DataSource getDataSource() {  
  9.         DruidDataSource dataSource = new DruidDataSource();  
  10.         dataSource.setUrl(env.getProperty("spring.datasource.url"));  
  11.         dataSource.setUsername(env.getProperty("spring.datasource.username"));  
  12.         dataSource.setPassword(env.getProperty("spring.datasource.password"));  
  13.         return dataSource;  
  14.     }  
  15. }  
或者:
[java] view plain copy
  1. @Configuration  
  2. @ConfigurationProperties(prefix = "spring.datasource")  
  3. public class DataSource2Config {  
  4.   
  5.     private String url;  
  6.     private String username;  
  7.     private String password;  
  8.   
  9.     @Bean  
  10.     public DataSource getDataSource() {  
  11.         DruidDataSource dataSource = new DruidDataSource();  
  12.         dataSource.setUrl(url);  
  13.         dataSource.setUsername(username);// 用户名  
  14.         dataSource.setPassword(password);// 密码  
  15.         return dataSource;  
  16.     }  
  17.   
  18.     public String getUrl() {  
  19.         return url;  
  20.     }  
  21.   
  22.     public void setUrl(String url) {  
  23.         this.url = url;  
  24.     }  
  25.   
  26.     public String getUsername() {  
  27.         return username;  
  28.     }  
  29.   
  30.     public void setUsername(String username) {  
  31.         this.username = username;  
  32.     }  
  33.   
  34.     public String getPassword() {  
  35.         return password;  
  36.     }  
  37.   
  38.     public void setPassword(String password) {  
  39.         this.password = password;  
  40.     }  
  41. }  
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页