多线程应用程序中的MySql + MyBatis

时间:2015-11-22 10:21:46

标签: java mysql multithreading mybatis

早上好。我有一个多线程的应用程序,在读取写入DB 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处理多线程的正确方法。感谢的。

1 个答案:

答案 0 :(得分:4)

std::vector是线程安全的。只是传递它。你可以安全地使用它。

SqlSessionFactory 线程安全,只能在方法范围中使用。

我建议DAO pattern构建数据库代码:

SqlSession