Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate c3p0 ThreadPoolExecutor连接池,我做得对吗?_Java_Multithreading_Hibernate_Connection Pooling_C3p0 - Fatal编程技术网

Java hibernate c3p0 ThreadPoolExecutor连接池,我做得对吗?

Java hibernate c3p0 ThreadPoolExecutor连接池,我做得对吗?,java,multithreading,hibernate,connection-pooling,c3p0,Java,Multithreading,Hibernate,Connection Pooling,C3p0,我正在为数据库使用hibernate和c3p0,我有一个java应用程序,带有ThreadPoolExecutor。 我正在做的是,我正在安排与hibernate相关的不同任务,使用事务和getCurrentSession与hibernate存储数据。 所以我有 new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.MINUTES,taskQueue); Runnable { @Over

我正在为数据库使用hibernate和c3p0,我有一个java应用程序,带有ThreadPoolExecutor。 我正在做的是,我正在安排与hibernate相关的不同任务,使用事务和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 一,

        <!-- 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>
这是否意味着我在c3p0中只有一个连接,或者在一个池中有多个连接

我是否在使用它,因为它应该被使用

什么级别的隔离对于并发写入最为合适

提前感谢大家,如果有人需要更多的数据和解释,就戳一下

--编辑:已回答

根据回答中的建议,我已经检查了mysql服务器管理员,并且有更多用于查询的连接。。所以这是正确的使用方法:D。。。
至于隔离级别,我将尝试让

这意味着您有一个具有3个初始连接的池。您应该能够通过查看SQL server监视器来确认这一点

请记住,SQL server配置胜过C3PO配置,因此,如果有多个线程在同一个表上竞争事务,则无论池配置如何,都可能会发现写入/更新操作被阻止

您可能会发现,在单个事务中批处理插入/更新可能比将它们移动到单独的线程中提供更好的性能提升。有趣的阅读


至于指定隔离级别,我的理解是,这更多的是读性能问题,而不是写性能问题。我从未发现自己处于这样一种情况:我希望任何东西都少于
READ COMMITTED
,因为允许
READ UNCOMMITTED
进行脏读首先完全抹杀了使用ACID数据库的优势。但是我不是这个领域的专家,其他人可能会有不同的看法。如果这真的是您关心的问题,我将根据您选择的数据库对这两种设置进行基准测试,以确定可以获得多少性能(如果有的话)。

AWESOME。。tnx老兄,我已经忘记了那些:D。。。但是你能建议我对conncurent写入的负载应该使用什么级别的隔离吗?或者这并不重要?哪个级别最快?阅读未限制?
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)