我使用 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
线
org.hibernate.connection.C3P0ConnectionProvider
1
<!-- 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),
现在我有几个问题。
我应该使用哪个隔离级别,因为我有 95% 的写入/更新和 5% 的读取,并且读取不会被写入中断。
我从 log4j 获取 HTML 日志
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, unused: 0, 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, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@697506e6)
这是否意味着我在 c3p0 中只有 1 个连接,或者一个池中有多个连接?
我是否按照应有的方式使用它???
什么级别的隔离最适合并发写入?
预先感谢所有人,如果有人需要更多数据和解释,请戳。
--编辑:已回答
正如回答所建议的,我已经检查了mysql服务器管理,并且有更多用于查询的连接..所以这是使用它的正确方法:D...
至于隔离级别,我会尽量让