在flink内需要使用mybatis做些简化查询的工作,目前我的使用方式如下

public class MybatisUtil {

private static final Logger LOGGER = LogFactory.createNewLogger("MybatisUtil");
    private static ThreadLocal<SqlSession> tl = new ThreadLocal<SqlSession>();
    private static SqlSessionFactory factory = null;
//    private static  SqlSession sqlSession = null;
static {
// 1 读取配置文件 config.xml
InputStream in = null;
        try {
in = Resources.getResourceAsStream("batis.xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
            throw new RuntimeException(e);
}
// 2 创建SqlSessionFactory
factory = new SqlSessionFactoryBuilder().build(in);
}



public static SqlSession getSqlSession(){
SqlSession sqlSession = tl.get();
        if(sqlSession == null){
sqlSession = factory.openSession();
tl.set(sqlSession);
LOGGER.info("sqlSession创建成功,连接为:{},时间为:{}", sqlSession,LocalTimeUtil.now());
}
return sqlSession;
}


}
以上是工具类
我在open方法中获取sqlsession,然后在invoke方法中使用mapper
public void open(Configuration parameters) throws Exception {
sqlSession = MybatisUtil.getSqlSession();
}

public List<SaleSource> map(HeaderFullWithPreOrder headerFullWithPreOrder) 
throws Exception {
SelectAddCartMapper mapper = sqlSession.getMapper(SelectAddCartMapper.class);
.......其他省略....
}

想问下这种方式使用是否正确。以及sqlsession是否需要关闭,看见相关帖子有说如果sqlsession不关闭的话会把连接打满

回复