最近因为项目的要求,需要在spring-boot中配置druid连接池,数据库是Oracle,并且是多数据源的连接池,特地写下我的配置经历。
  用的框架是spring-boot,数据库是oracle,数据库操作用的是mybatis,数据库连接池用的是druid。

(一)spring和spring-boot

  spring-boot相对于spring的改变就是:spring-boot基本所有的配置都是用注解实现的,而spring的配置信息一般都是在.xml文件中配置的。例如,我们定义一个bean,你需要去spring的.xml文件定义一个bean标签,并且指明该bean的信息;但在spring-boot中你只需要在该类的定义前加上@bean标签就行了,所以spring-boot有点像懒人的spring。

(二)配置

  我的配置是分两步进行的,因为这个项目的spring-boot不是我配置的,所以我先配置了一个简单的spring-boot不是我配置的,所以我先配置了一个简单的spring-boot demo,然后再在那个demo中加入了druid连接池。这里我也把这两个步骤记录下来。

1.建立spring-boot的demo
  我使用的环境是ideal,只需要新建一个java project,然后选中maven项目即可。
  然后配置pom.xml文件,把spring-boot需要的依赖包加入进去。(第一步骤中,我只添加了spring-boot依赖包)。

    <!--spring boot父级依赖,指明这是一个spring boot项目--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.7.RELEASE</version><relativePath/> </parent><!--一些编码配置--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><!--所依赖的包--><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>  <!--包含了spring-boot-starter-logging即logback--></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

  相关依赖包导入成功之后,就可以写spring-boot的核心类了,可以发现该类中有一个main函数,用于启动spring-boot。

package com.code;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SPApplication {//启动sprint boot项目public static void main(String[] args){SpringApplication.run(SPApplication.class, args);}
}

  然后写了一个简单的controller,测试spring-boot 是否配置成功。

package com.code.controller;import com.code.mapper.TestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@Controller
@RestController
public class TestController {@RequestMapping("/")public String index(){return "hello world";}
}

  最后启动那个核心类,然后输入localhost:8080,出现以下页面,说明spring-boot配置成功。

2.配置druid数据库连接池

  首先,在pom.xml文件加入相关的依赖包,完整版的,包括了spring-boot的依赖包。

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.7.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>  <!--包含了spring-boot-starter-logging即logback--></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 --><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2.0.4</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>1.1.4</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-autoconfigure</artifactId><version>1.1.4</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>3.4.3</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.6</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

  然后再配置数据库连接相关的信息,包括连接池的信息,这里用一个properties文件来定义相关的属性。

#druid datasource1 for dw558
spring.datasource.druid.db1.url = jdbc:oracle:thin:@192.10.224.151:1521:dw558
spring.datasource.druid.db1.username = dw558
spring.datasource.druid.db1.password= 36874
spring.datasource.druid.db1.driver-class-name = oracle.jdbc.driver.OracleDriver
#依次为初始连接数,最小连接数,最大连接数,最大等待时间,
spring.datasource.druid.db1.initial-size = 5
spring.datasource.druid.db1.min-idle = 5
spring.datasource.druid.db1.max-active = 10
spring.datasource.druid.db1.max-wait = 60000
spring.datasource.druid.db1.time-between-eviction-runs-millis = 60000
spring.datasource.druid.db1.min-evictable-idle-time-millis = 300000
spring.datasource.druid.db1.validation-query = SELECT 1 FROM dual
spring.datasource.druid.db1.test-while-idle = true
spring.datasource.druid.db1.test-on-borrow = false
spring.datasource.druid.db1.test-on-return = false
spring.datasource.druid.db1.pool-prepared-statements = true
spring.datasource.druid.db1.max-pool-prepared-statement-per-connection-size = 20
spring.datasource.druid.db1.filters = stat, wall#druid datasource2 for dw664
spring.datasource.druid.db2.url = jdbc:oracle:thin:@192.10.220.116:1521:dw664
spring.datasource.druid.db2.username = dw664
spring.datasource.druid.db2.password= 56644
spring.datasource.druid.db2.driver-class-name = oracle.jdbc.driver.OracleDriver
#依次为初始连接数,最小连接数,最大连接数,最大等待时间,
spring.datasource.druid.db2.initial-size = 5
spring.datasource.druid.db2.min-idle = 5
spring.datasource.druid.db2.max-active = 10
spring.datasource.druid.db2.max-wait = 60000
spring.datasource.druid.db2.time-between-eviction-runs-millis = 60000
spring.datasource.druid.db2.min-evictable-idle-time-millis = 300000
spring.datasource.druid.db2.validation-query = SELECT 1 FROM dual
spring.datasource.druid.db2.test-while-idle = true
spring.datasource.druid.db2.test-on-borrow = false
spring.datasource.druid.db2.test-on-return = false
spring.datasource.druid.db2.pool-prepared-statements = true
spring.datasource.druid.db2.max-pool-prepared-statement-per-connection-size = 20
spring.datasource.druid.db2.filters = stat, wall

  然后再定义数据库连接工厂,当中包括了数据源的定义,工厂定义,事务定义和SqlSessionTemplate定义。

数据库1的工厂类:

package com.hd.jq.configs.druid;import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration                         //读取配置信息的注解
//扫描的mapper包,使用的是mybatis
@MapperScan(basePackages = "com.hd.jq.mapper.db1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class DruidDataSource1 {/**   dataSource是用来提供数据库配置的相关信息,读取配置文件,获得相关系数*/@Bean(name = "db1DataSource")@ConfigurationProperties(prefix = "spring.datasource.druid.db1")             //该前缀对应的配置信息,在application.properties文件中@Primarypublic DataSource druid1DataSource(){return DataSourceBuilder.create().build();}/**   SqlSessionFactory用dataSource中提供的参数来构建工厂类,因为工厂需要根据url,*   用户名,密码等信息用于连接数据库,并且设置一些连接池属性*/@Bean(name = "db1SqlSessionFactory")@Primarypublic SqlSessionFactory duird1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws  Exception{SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);return bean.getObject();}/**   事务管理器*/@Bean(name = "db1TransactionManager")@Primarypublic DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource){return new DataSourceTransactionManager(dataSource);}/**   提供一个线程安全的SqlSession接口*/@Bean(name = "db1SqlSessionTemplate")@Primarypublic SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}}

数据库2的工厂类:

package com.hd.jq.configs.druid;import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.hd.jq.mapper.db2", sqlSessionTemplateRef = "db2SqlSessionTemplate")
public class DruidDataSource2 {/*
*   dataSource是用来提供数据库配置的相关信息,读取配置文件,获得相关系数
*/@Bean(name = "db2DataSource")@ConfigurationProperties(prefix = "spring.datasource.druid.db2")             //该前缀对应的配置信息,在application.properties文件中public DataSource druid2DataSource(){return DataSourceBuilder.create().build();}/**   SqlSessionFactory用dataSource中提供的参数来构建工厂类,因为工厂需要根据url,*   用户名,密码等信息用于连接数据库,并且设置一些连接池属性*/@Bean(name = "db2SqlSessionFactory")public SqlSessionFactory duird2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws  Exception{SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);return bean.getObject();}/**   事务管理器*/@Bean(name = "db2TransactionManager")public DataSourceTransactionManager db2TransactionManager(@Qualifier("db2DataSource") DataSource dataSource){return new DataSourceTransactionManager(dataSource);}/**   提供一个线程安全的SqlSession接口*/@Bean(name = "db2SqlSessionTemplate")public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}
}

注意上面两个数据库的工厂类中,有一个加上了@primary标签,这个标签指明哪个是主要的数据库工厂类,不指明的话,就会由于多数据源而产生冲突!!!

  然后就是在指定的map扫描路径下建立一个测试的mapper,代码如下:

package com.hd.jq.mapper.db1;import org.apache.ibatis.annotations.Select;public interface TestMapper {@Select("select bt from xm_jjjl where jjdd = #{jjdd}")String getStrByJjxh(Integer jjdd);
}

最后就是建立一个测试用的controller,测试连接和查询结果:

package com.code.controller;import com.code.mapper.TestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@Controller
@RestController
public class TestController {@AutowiredTestMapper testMapper;                      //依赖注入mapper@RequestMapping("/")public String index(){String value = testMapper.getStrByJjxh(16047075);System.out.println(value);return value;}
}

可以发现连接成功!!!

spring-boot中使用druid连接池相关推荐

  1. 在 Spring Boot 中使用 HikariCP 连接池

    上次帮小王解决了如何在 Spring Boot 中使用 JDBC 连接 MySQL 后,我就一直在等,等他问我第三个问题,比如说如何在 Spring Boot 中使用 HikariCP 连接池.但我等 ...

  2. spring连接jdbc_在Spring JDBC中添加C3PO连接池

    spring连接jdbc 连接池是一种操作,其中系统会预先初始化将来要使用的连接. 这样做是因为在使用时创建连接是一项昂贵的操作. 在这篇文章中,我们将学习如何在Spring JDBC中创建C3P0连 ...

  3. 在Spring JDBC中添加C3PO连接池

    连接池是一种操作,其中系统会预先初始化将来要使用的连接. 这样做是因为在使用时创建连接是一项昂贵的操作. 在本文中,我们将学习如何在Spring JDBC中创建C3P0连接池(某人未使用休眠). Po ...

  4. Spring Boot 中使用 Hikari连接各类数据源

    Spring Boot 中使用 Hikari连接各类数据源 1,连接hive集群 HikariConfig中各属性设置 {"allowPoolSuspension": false, ...

  5. SSM中使用Druid连接池

    连接池 最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源.由于频繁的打开和关闭连接对jvm包括数据库都有一定的资源负荷,尤其应用压力较大时资源占用比较多容易产生性能问题.由 ...

  6. spring boot 中阿里druid 数据源配置及密码加密

    方式一: 1.spring.datasource配置 spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql ...

  7. spring boot 配置默认数据连接池 HiKariCP

    一.为什么选择HiKariCP 没其他原因,就是一个字 快. 性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 .hikariCP的高性能得益 ...

  8. 被缠上了,小王问我怎么在 Spring Boot 中使用 JDBC 连接 MySQL

    上次帮小王入了 Spring Boot 的门后,他觉得我这个人和蔼可亲.平易近人,于是隔天小王又微信我说:"二哥,快教教我,怎么在 Spring Boot 项目中使用 JDBC 连接 MyS ...

  9. druid连接池mysql5.7_Spring Boot 使用Druid连接池整合Mybatis-Plus连接Mysql数据库

    一.连接池 在普通的数据库访问程序中,客户程序得到的连接对象是物理连接,调用连接对象的close()方法将关闭连接,而采用连接池技术,客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的 ...

最新文章

  1. 微服务 | 我为啥不看好 ServiceMesh
  2. java基础(七) 深入解析java四种访问权限
  3. C#实现数据回滚,A事件和B事件同时执行,其中任何一个事件执行失败,都会返回失败...
  4. Android之如何用dextra.ELF64查看安卓手机“设置“图标的源代码
  5. C++学习第二天(打卡)
  6. php+mysql封装增删查改
  7. linux命令格式与快捷键
  8. Linux 进程优先级以及环境变量
  9. [异步图书].Python机器学习:预测分析核心算法.pdf
  10. OpenWrt 18.06.1的ss-redir, 以及在乐视超4 X40上看Youtube
  11. linux 组建raid0教程,用两块硬盘组建RAID0磁盘阵列简单教程(图文详解)
  12. 数学建模神经网络模型,数学建模神经网络算法
  13. 木兰词·拟古决绝词柬友(引用)
  14. 七自由度机械臂设计分析——待更新
  15. Linux----putty下载安装教程
  16. 搭建Vue3 后台管理框架 —— 登录页面
  17. 买了xbox的这两年
  18. oracle rac mpp,DB2 purescale vs Oracle RAC
  19. macOS:给 app 添加摄像头权限
  20. 财务内部收益率用计算机怎么算,财务内部收益率的计算

热门文章

  1. Android美工坊--一个QQ登录验证的小例子
  2. HTML5的Histroy API
  3. 使用 Nginx 提升网站访问速度(转)
  4. Serverless 实战 —— 基于 Serverless + 企业微信打造 nCoV 疫情监控小助手
  5. 面试精讲之面试考点及大厂真题 - 分布式专栏 04 谈谈你对分布式的理解,为什么引入分布式?
  6. Nginx的TCP运行时健康检查
  7. 通过Gogs部署git仓库
  8. donotage标记、MTU及MTU不匹配问题、OSPF邻居状态记录
  9. C#中使用ajax请求
  10. 02331 数据结构 二叉树的遍历