簡體   English   中英

MySql + MyBatis在多線程應用程序中

[英]MySql + MyBatis in multithread application

早上好。 我有一個多線程應用程序,可以在讀寫數據庫mySql時進行訪問。 使用myBatis。 對於會話管理,它編寫了以下類:

public class ConnectionMySQL {

    private static final Logger log = Logger.getLogger(ConnectionMySQL.class);

    private static SqlSessionFactory sqlSessionFactory;

    private ConnectionMySQL() {
    }

    static {
        try {
            String resource = "com/application/dao/config/mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (Throwable e) {
            log.error("Impossibile avviare la connessione sul DB", e);
        }
    }

    public static SqlSessionFactory getSession() {
        return sqlSessionFactory;
    }

}

每當我運行查詢時,我都會運行以下操作:

public void start() {
    System.out.println(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime())+" ***** Start ****");
    long start = System.currentTimeMillis();
    SqlSession sessione = ConnectionMySQL.getSession().openSession();
    try {
        ..........
        ..........
    }catch (MessagingException e) {
        log.warn("Impossibile inviare messaggio di notifica");
    }finally {
        sessione.close();
        long end = System.currentTimeMillis();
        log.info("Numero thread :"+numeroThread+" - Tempo di esecuzione "+ (end - start) +" ms");

    }

}

我對MySQL和myBatis不太熟悉。 我想知道這是否是使用myBatis處理多線程的正確方法。 謝謝。

SqlSessionFactory是線程安全的。 只是將其傳遞。 您可以安全使用它。

SqlSession 不是線程安全的,應僅在方法范圍內使用

我建議使用DAO模式來構建數據庫代碼:

public MyPojo select(int primaryKey) {
    try (SqlSession session = sqlSessionFactory.openSession()) {
        MyPojoMapper mapper = session.getMapper(MyPojoMapper.class);
        return mapper.select(primaryKey);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM