我已经创建了一个超级DAO类,DAO类扩展用于批处理,它可以很好地为一个用户按预期工作。
但我担心当超过2个用户同时使用SqlSession(batchSqlssion)时,这可能会导致死锁或不需要的sql flush等严重问题。
我想知道是否必须为每个用户生成SqlSession?我的意思是原型豆。
@Component
public class BatchDaoSupport {
private SqlSession batchSqlSession;
@Resource(name="batchSqlSession")
SqlSessionFactory sf;
@PostConstruct
private void initBatchSqlSession(){
this.batchSqlSession = new SqlSessionTemplate(sf);
}
public int batchInsert(String queryId, Object parameterObject) {
return getBatchSqlSession().insert(queryId, parameterObject);
}
public SqlSession getBatchSqlSession() {
return this.batchSqlSession;
}
public void flush(){
getBatchSqlSession().flushStatements();
}
答案 0 :(得分:1)
来自文档:
SqlSessionTemplate =线程安全,Spring管理,SqlSession与Spring事务管理一起使用,以确保使用的实际SqlSession是与当前关联的SqlSession春季交易。此外,它还管理会话生命周期,包括根据Spring事务配置根据需要关闭,提交或回滚会话。
http://mybatis.org/spring/apidocs/reference/org/mybatis/spring/SqlSessionTemplate.html
基本上,事务管理员将承担责任,因此您的查询永远不会发生冲突。答案是否,您不需要创建其中两个。