在类上表明@Transactional注解
当出现异常时,在catch中捕获异常并回滚
catch (Exception e) {
logger.error("ERROR",e);
TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();
return new ResponseEntity<Object>(e.getMessage().toString(),
HttpStatus.INTERNAL_SERVER_ERROR);
}
需要在配置文件中配置事务管理器
并启用事务注解
<!-- 事务管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- tx标签自动注入 true对类进行代理,如果是false表示对接口进行代理-->
<tx:annotation-driven transaction-manager="transactionManager"/>
数据库连接池的配置
<!-- 阿里 druid 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- url,name,pwd -->
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
<!-- 配置监控统计拦截的filters -->
<property name="filters" value="${db.filters}" />
<!-- 最大并发连接数 -->
<property name="maxActive" value="${db.maxActive}" />
<!-- 初始化连接数 -->
<property name="initialSize" value="${db.initialSize}"></property>
<!-- 获取连接最大等待超时时间 -->
<property name="maxWait" value="${db.maxWait}"></property>
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${db.minIdle}"></property>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${db.timeBetweenEvictionRunsMillis}" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}" />
<!-- 用来检测连接是否有效的sql,要求是一个查询语句。 如果validationQuery为null,testOnBorrow、testOnReturn、
testWhileIdle都不会其作用 -->
<property name="validationQuery" value="SELECT 'x'" />
<!-- 缺省 false 不影响性能 -->
<property name="testWhileIdle" value="true" />
<!-- 缺省 false 影响性能 -->
<property name="testOnBorrow" value="false" />
<!-- 缺省 false 影响性能 -->
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<!-- mysql5.5以下没有PSCache功能,建议关闭掉 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="20" />
</bean>