Spring Boot1.5.4 连接池 和 事务
原文:https://github.com/x113773/testall/issues/10
默认连接池
---
spring Boot中默认支持的连接池有Tomcat、HikariCP 、DBCP 、DBCP2,以下摘自[官方文档](http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/#boot-features-configure-datasource):
> Production database connections can also be auto-configured using a pooling DataSource. Here’s the algorithm for choosing a specific implementation:
>
> - We prefer the Tomcat pooling DataSource for its performance and concurrency, so if that is available we always choose it.
> - Otherwise, if HikariCP is available we will use it.
> - If neither the Tomcat pooling datasource nor HikariCP are available and if Commons DBCP is available we will use it, but we don’t recommend it in production and its support is deprecated.
> - Lastly, if Commons DBCP2 is available we will use it.
>
> If you use the spring-boot-starter-jdbc or spring-boot-starter-data-jpa ‘starters’ you will automatically get a dependency to tomcat-jdbc.
翻译如下:
数据库连接可以使用DataSource池进行自动配置。下面是选择一个特定实现的规则:
- 由于Tomcat数据源连接池的性能和并发,在tomcat可用时,我们总是优先使用它。
- 如果HikariCP可用,我们将使用它。
- 如果Commons DBCP可用,我们将使用它,但在生产环境不推荐使用它。
- 最后,如果Commons DBCP2可用,我们将使用它。
如果你使用了spring-boot-starter-jdbc 或者 spring-boot-starter-data-jpa起步依赖,就会自动获得tomcat-jdbc依赖,所以tomcat连接池就可以直接使用了。
---
此外使用spring.datasource.type可以指定一个特定的连接池,注意要使用完全限定名,例如:
`spring.datasource.type=com.alibaba.druid.pool.DruidDataSource`
若要使用druid还要进行一些额外的配置,详见[ springboot1.5.4 配置druid1.1.0(使用druid-spring-boot-starter)](https://github.com/x113773/testall/issues/11)
事务
---
当使用spring-boot-starter-data-jpa这个起步依赖,会通过HibernateJpaAutoConfiguration这个自动化配置类,构造事务管理器JpaTransactionManager。
当使用spring-boot-starter-jdbc这个起步依赖,会通过[DataSourceTransactionManagerAutoConfiguration](https://github.com/spring-projects/spring-boot/blob/v1.5.4.RELEASE/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration.java)这个自动化配置类,构造事务管理器DataSourceTransactionManager。
可以通过在[Application.java ](https://github.com/x113773/testall/blob/master/src/main/java/com/ansel/testall/Application.java)加入如下代码,查看当前的连接池和事务管理器:
```
@Bean
public Object testBean(DataSource dataSource, PlatformTransactionManager platformTransactionManager) {
System.out.println("current dataSource: " + dataSource.getClass().getName());
System.out.println("current platformTransactionManager: " + platformTransactionManager.getClass().getName());
return new Object();
}
```
所以只要加了上面其中一个依赖,然后就可以在类上、或者方法上使用@Transactional 注解了:
```
@Transactional(rollbackFor = RuntimeException.class)
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
@Override
public int insert(User user) {
return userMapper.insert(user);
}
....
```
注意:
- 经测试无需使用@EnableTransactionManagement开启事务注解;
- 不要使用try catch把异常捕获了,会导致不能回滚;
- MySQL数据库表引擎innoDB是支持事务的,但是MyISAM引擎是不支持事务的;
Spring Boot1.5.4 连接池 和 事务的更多相关文章
- MyBatis基础_连接池与事务、动态SQL、注解开发
一.MyBatis连接池及事务控制 1.连接池 在实际开发中,都会使用连接池,因为它可以减少获取连接缩消耗的时间.所谓连接池,就是存储数据库连接的容器.连接池中存储一定数量的数据库连接,当线程需要使用 ...
- spring boot配置druid连接池连接mysql
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- 【MyBatis】MyBatis 连接池和事务控制
MyBatis 连接池和事务控制 文章源码 MyBaits 连接池 实际开发中都会使用连接池,因为它可以减少获取连接所消耗的时间.具体可查看 MyBatis 数据源配置在 SqlMapConfig.x ...
- 搭建spring工程配置数据源连接池
Spring作为一个优秀的开源框架,越来越为大家所熟知,前段时间用搭了个spring工程来管理数据库连接池,没有借助Eclipse纯手工搭建,网上此类文章不多,这里给大家分享一下,也作为一个手记. 工 ...
- 深入理解Spring Boot数据源与连接池原理
Create by yster@foxmail.com 2018-8-2 一:开始 在使用Spring Boot数据源之前,我们一般会导入相关依赖.其中数据源核心依赖就是spring‐boot‐s ...
- Spring Boot使用Druid连接池基本配置
以下为Spring Boot配置Druid 一.pom.xml配置 <dependency> <groupId>com.alibaba</groupId> < ...
- Spring Boot下Druid连接池+mybatis
目前Spring Boot中默认支持的连接池有dbcp,dbcp2, hikari三种连接池. 引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连 ...
- Spring整合JDBC(连接池、JDBC模板、Dao配置到Spring容器、配置文件的优化)
1.Spring整合JDBC (1)导包(共12个): c3p0连接池.JDBC驱动(4个) Spring-jdbc.Spring-tx事务(2个) (2)JDBC模板对象(JDBCTemplate) ...
- Spring中常用的连接池配置
首先,我们准备Jdbc属性文件 jdbc.properties,用于保存连接数据库的信息,利于我们在配置文件中的使用 jdbc.driver=com.mysql.jdbc.Driver jdbc.ur ...
随机推荐
- Jdk1.6 JUC源码解析(6)-locks-AbstractQueuedSynchronizer
功能简介: AbstractQueuedSynchronizer(以下简称AQS)是Java并发包提供的一个同步基础机制,是并发包中实现Lock和其他同步机制(如:Semaphore.CountDow ...
- jsp自定义函数库
步骤如下: 1.创建一个函数库类,里面的方法就是标签函数库要调用的方法(必须是静态方法) package com.mdd.tag; public class JiSuan { //两个数相 ...
- wamp的搭建-个人笔记
#wamp的配置 ##选项 1. 用apache 就下ts的 2. 是nginx或者iis 就用nts的 3. php win下面的 选择zip 或者msi的 ##apache的配置 1.配置apac ...
- Jlink下载问题
在使用Jlink SWD模式进行下载的时候遇到了无法下载的问题. SWD模式下,共有4跟线,VCC.GND.SWCLK.SWDIO JTAG标准接口如下图所示: 一般情况下,目标板卡的 debug V ...
- 【wannacry病毒之暗网】-如何访问"暗网"(慎入)
心里能力不强的人,请别看. 有些事情还是不要接触比较好, 社会最恶一面不是随随便便就能接触到的, 也不是你能理解的 你想要用暗网做什么是你考虑的一个问题 什么是暗网? 所谓的"暗网" ...
- 学习python的第一个小目标:通过requests+xlrd实现简单接口测试,将测试用例维护在表格中,与脚本分开。
小白的学习方式:通过确定一个小目标来想办法实现它,再通过笔记来加深印象. 面对标题中的小目标我陷入了思考....嗯,首先实现利用xlrd库来取出想要的用例 首先用表格准备好用例,如图下: 先试下取nu ...
- iOS开发之 Lottie -- 炫酷的动效
动效在软件开发中非常常见,炫酷的动画能提升应用的B格,然而由设计师的设计转化成程序猿GG的代码是个非常"痛苦"的过程.对于复杂动画,可能要花费很多时间去研究和实现.Lottie 的 ...
- Linux常用命令说明(记录自己Linux命令使用情况,后续会持续更新)
首次记录时间--20170602 感觉自己Linux命令使用掌握的情况非常差,今天先记录当前会的几个. 1#cd(change directory) 切换工作目录(或者叫修改当前目录) eg. cd ...
- 【webpack】webpack-dev-server生猛上手——让我们来搭一个webpack的微服务器吧!
[前言]:因为最近在搞百度地图API的时候到了webpack的externals,才发现我之前都只是用webpack做一些搭建完项目后的"收尾工作"--即打包,而没有把它纳入到 ...
- 连接Oracle数据库的时候报了“Got minus one from a read call”
(转) 出现这种问题基本上就以下几种原因,可以查一下系统日志看看:1:数据库连接满了,扩大数据库连接池2:所登录的机子IP不在sqlnet.ora内,加入后重启listerner即可3:数据库负载均衡 ...