Singleton SqlSession不适合多用户批量处理?

时间:2015-11-19 00:35:03

标签: spring mybatis

我已经创建了一个超级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();
}

1 个答案:

答案 0 :(得分:1)

来自文档:

SqlSessionTemplate =线程安全,Spring管理,SqlSession与Spring事务管理一起使用,以确保使用的实际SqlSession是与当前关联的SqlSession春季交易。此外,它还管理会话生命周期,包括根据Spring事务配置根据需要关闭,提交或回滚会话。

http://mybatis.org/spring/apidocs/reference/org/mybatis/spring/SqlSessionTemplate.html

基本上,事务管理员将承担责任,因此您的查询永远不会发生冲突。答案是,您不需要创建其中两个。