Spring Boot1.5.4 连接池 和 事务
2017-06-29 10:36
197 查看
原文: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 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引擎是不支持事务的;
相关文章推荐
- springboot+shiro+mybatis整合发现部分功能事务没有被spring管理
- Springboot属性文件application.properties配置大全,版本:1.5.4
- 关于spring boot整合druid连接池在程序关闭后连接不释放问题解决
- Spring Cloud Spring Boot mybatis分布式微服务云架构(三十二)事务管理(2)
- SpringBoot精藏(六)SpringBoot开启申明式事务
- 基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(详解)
- SpringBoot配置连接池
- SpringBoot数据库增删改查 事务管理
- spring boot 学习(四)Druid连接池的使用配置
- springboot整合mybatis使用阿里(阿里连接池)和xml方式
- 关于spring boot 事务
- Springboot使用xml事务及相关说明
- spring boot 中的事务管理
- SpringBoot 注解事务声明式事务
- Spring Boot为我们准备了最佳的数据库连接池方案,只需要在属性文件(例如application.properties)中配置需要的连接池参数即可。
- 【SpringBoot系列3】SpringBoot使用事务和AOP
- java 调用Oracle 存储过程(SpringBoot下的事务管理)
- SpringBoot集成MyBatis开启事务
- springboot中的事务管理
- Spring-boot Mybatis多数据源事务配置