java – hibernate c3p0 ThreadPoolExecutor连接池,我做得对吗?
我正在使用hibernate和c3p0作为数据库,我有一个带有ThreadPoolExecutor的
java应用程序.
我正在做的是,我正在征服每个与hibernate相关的不同任务,使用Transactions和getCurrentSession来使用Hibernate存储数据. 所以我有 new ThreadPoolExecutor(CORE_POOL_SIZE,MAX_POOL_SIZE,KEEP_ALIVE_TIME,TimeUnit.MINUTES,taskQueue); Runnable { @Override public void run() { Session session = HibernateDAO.getInstance().getCurrentSession(); Transaction tx = null; try {tx = session.beginTransaction(); ..... } 和hibernate.cfg <!-- Database c3p0 settings --> <property name="hibernate.c3p0.min_size">3</property> <property name="hibernate.c3p0.max_size">3</property> <property name="hibernate.c3p0.initialPoolSize">3</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.timeout">5000</property> <property name="hibernate.c3p0.acquire_increment">2</property> 我的目标是从执行程序获取每个线程,使用getCurrentSession获取连接,并执行session.saveOrUpdate(item), 905 pool-1-thread-1 DEBUG com.mchange.v2.resourcepool.BasicResourcePool trace com.mchange.v2.resourcepool.BasicResourcePool@434cb775 [managed: 3,unused: 0,excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@697506e6) 905 pool-1-thread-5 DEBUG com.mchange.v2.resourcepool.BasicResourcePool trace com.mchange.v2.resourcepool.BasicResourcePool@434cb775 [managed: 3,excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@697506e6) 965 pool-1-thread-4 DEBUG com.mchange.v2.resourcepool.BasicResourcePool trace com.mchange.v2.resourcepool.BasicResourcePool@434cb775 [managed: 3,excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@697506e6) 这是否意味着我在c3p0中只有1个连接,或者在一个池中有多个连接? 我应该使用它,因为它应该被使用???? 什么级别的隔离最适合并发写入? 提前感谢所有人,如果有人需要更多的数据和解释只是戳. –EDIT:回答 根据答案的建议,我已经检查了mysql服务器管理员,还有更多的连接用于查询..所以这是使用它的正确方法:D …… 解决方法
这意味着您有一个池有3个初始连接.您应该能够确认这一点,看看您的SQL服务器监视器.
请记住,您的SQL服务器配置胜过C3PO,因此如果您有多个线程在同一个表上竞争事务,您可能会发现您的写入/更新操作被阻止,而不管您的池配置如何. 您可能会发现在单个事务中批量插入/更新可能比将它们移动到单独的线程提供更好的性能提升. This article一个有趣的阅读. 至于指定隔离级别,我的理解是这更像是读取性能而不是写入的问题.我从未发现自己处于需要少于READ COMMITTED的情况,因为允许使用READ UNCOMMITTED进行脏读将完全抹杀了首先使用ACID数据库的优势.但是,我不是这个领域的专家,其他人可能会有不同的意见.如果这对您来说真的很重要,我会根据您选择的数据库对这两个设置进行基准测试,以确定可以获得多少性能(如果有的话). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |