在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不关闭的话会把连接打满