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

2023-12-21 16:37:31
  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);
	}
}

文章来源:https://blog.csdn.net/adaivskean/article/details/135132322
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。