Mybatis循環插入報數據庫連接超過最大數

今天用mybatis循環插入數據的時候,插到一百條左右的時候,突然報錯,意思就是mysql連接數已經達到最大數。
我看到就想應該是插入一條數據的時候沒有釋放連接,就百度怎麼釋放連接,回答說是mybatis能自動釋放連接,但是在高併發也會出現這種結果,但是明顯這種問題不是高併發。
後來發現我在SqlSessionFactory實例化太多了,導致報錯,改成只實例化一個就好了,這個問題我感覺可能初學者會犯,記錄一下


之前的錯誤代碼

private SqlSessionFactory factory;

public static void setUp() throws Exception{
    String resource = "SqlMapConfig.xml";
    //通過流將核心配置文件讀取進來
    InputStream inputStream = Resources.getResourceAsStream(resource);
    //通過核心配置文件輸入流來創建會話工廠
    factory = new SqlSessionFactoryBuilder().build(inputStream);
}

public void testFindUserById() throws Exception{
    setUp();
    SqlSession openSession = factory.openSession();
    ///通過getMapper方法來實例化接口
    UserMapper mapper = openSession.getMapper(UserMapper.class);

    User user = mapper.findUserById(1);
    System.out.println(user);
}

改正之後

private SqlSessionFactory factory;

static {
    String resource = "SqlMapConfig.xml";
    //通過流將核心配置文件讀取進來
    InputStream inputStream;
    try {
        inputStream = Resources.getResourceAsStream(resource);
        //通過核心配置文件輸入流來創建會話工廠
        factory = new SqlSessionFactoryBuilder().build(inputStream);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void findUserById(int id) throws Exception{
    SqlSession openSession = factory.openSession();
    ///通過getMapper方法來實例化接口
    UserMapper mapper = openSession.getMapper(UserMapper.class);

    User user = mapper.findUserById(id);
    openSession.commit();
    openSession.close();
    System.out.println(user);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章