Spring常见的造成数据库连接泄露的写法

  1. 需要finally close
    Connection con = DataSourceUtils.getConnection(jdbcTemplate.getJdbcTemplate().getDataSource());
  2. 需要要finally close
    SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
  3. 需要commit或者rollback,如果finally没有处理事务不能提前return
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
    TransactionStatus transaction = transactionManager.getTransaction(def);

如果需要手动处理事务,参考如下模板写法


TransactionStatus transaction = null;
try{
	DefaultTransactionDefinition def = new DefaultTransactionDefinition();
	// 可以设置一个当前事务的名称
    def.setName("xxxActionTrans");
    // 设置事务传播特性
	def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);	
	// 假如有提前返回,finally会处理提交
	if(xxx = true){
		return xxx;
	}
    xxxService.crudSQL()
    // crud 后尽快提交
	transactionManager.commit(transaction);
	// 假如存在异常
	throw new RuntimeException("e");
}catch(Exception e){
    transactionManager.rollback(transaction);
}
finally{
	// finally提交要判断事务已完成,不能重复提交和回滚
	if(!transaction.isCompleted()){
		transactionManager.commit(transaction);
	}
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值