Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 HSDC数据库连接_Java_Multithreading_Hibernate - Fatal编程技术网

Java HSDC数据库连接

Java HSDC数据库连接,java,multithreading,hibernate,Java,Multithreading,Hibernate,我必须通过Java程序将数据注入数据库。 我使用Hibernate和Thread(通过Executor的线程池),因为客户需要一个快速的软件。 我用一堆线。 该程序在45秒-1分钟内运行良好,在我出现此错误后,反复执行: Exception in thread "pool-1-thread-593" org.hibernate.exception.JDBCConnectionException: Cannot open connection at org.hibernate.except

我必须通过Java程序将数据注入数据库。 我使用Hibernate和Thread(通过Executor的线程池),因为客户需要一个快速的软件。 我用一堆线。 该程序在45秒-1分钟内运行良好,在我出现此错误后,反复执行:

Exception in thread "pool-1-thread-593" org.hibernate.exception.JDBCConnectionException: Cannot open connection
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
    at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
    at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
    at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1463)
    at fr.msa.agora.bp0gos.qualification.structure.InjecteurFluxStructureRFOSImpl$UnitOfWork.run(InjecteurFluxStructureRFOSImpl.java:107)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.sql.SQLException: socket creation error
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
    at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
    at org.hsqldb.jdbcDriver.connect(Unknown Source)
    at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
    at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
    at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:840)
    at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
提前谢谢大家,,
托马斯我相信你的问题就在这里:

  • hibernate.c3p0.max_size=20
此参数包含以下文档:

hibernate.c3p0.max_size这是池中的最大连接数。如果此数字已用尽,则在运行时引发异常


显然,如果你有97331个同步连接,你将触发上面提到的异常,我想,这正是正在发生的事情。我建议您限制
线程池
一次只能同时运行20个线程。但这取决于您的用例。例如,如果您运行的应用程序刚刚启动,执行此任务,然后关闭,那么我建议的方法将很好地工作。但是,如果您的应用程序是一个长时间运行的应用程序(可能是一个webapp),并且需要其他用户进行其他数据库连接,那么我建议将ThreadPool max设置得更低(可能是10),并确保不会以其他方式违反c3p0限制(一次连接的用户太多,或运行的作业太多)。提高c3p0限制也会有所帮助。我感觉没有必要超过100,但我记不清确切的原因,抱歉。

Comme indiquédans un autre post,j'ai rajoutédans mon Fichier de configuration Hibernate ceci:Hibernate.c3p0.min_size=5 Hibernate.c3p0.max_size=20 Hibernate.c3p0.timeout=1800 Hibernate.c3p0.max_statements=50正如论坛()中提到的,我在Hibernate配置文件中添加了以下说明:Hibernate.c3p0.max_size=20 Hibernate.c3p0.timeout=1800 Hibernate.c3p0.max_statements=50,但它会导致同样的问题。很抱歉,我变得“疯狂”,我用我的母语而不是英语写作。对不起,祝大家有个愉快的一天,托马斯听起来你已经用完了所有的连接,你正在创建(和运行)多少个
UnitOfWork
对象?如果超过20,我想你会遇到问题。Jamey,谢谢你的回答。事实上,有97331个XML文件,然后MapUnficher方法被调用97331次,最后persisterTable方法被调用97331次。因此,创建了97331个UnitOfWork。我认为它很好。你认为它太好了吗很多?我能纠正我的代码吗?谢谢你,杰米,托马斯杰米,我非常感谢你的解决方案。我会尝试实现你提出的解决方案。不用担心,请记住接受这个答案,如果它对你有效的话。;)杰米,我在我的代码中添加了这条指令:“poolDeThread=Executors.newFixedThreadPool(20);”。我创建了一个池,将运行的最大线程数设置为20。但是我想我也必须改变我的代码。因为如果我不更改代码,我将执行97331任务。非常感谢,Thomas就像你说的,我限制了并发线程的数量:我怎样才能表明你已经解决了这个问题?祝您愉快。您好,“若要将答案标记为已接受,请单击答案旁边的复选标记,将其从灰色切换为已填写。”,请查看此链接以获取完整信息:。:)
@Service("InjecteurStructure")
    public class InjecteurFluxStructureRFOSImpl extends AbstractInjecteurFluxRFOS implements     InjecteurFluxRFOS {

        private final StructureRFOS2StructureGOSMapperImpl mapper;

       @Autowired
    public InjecteurFluxStructureRFOSImpl(final StructureRFOS2StructureGOSMapperImpl pMapper,
            final SessionFactory pSession, final Executor pPoolDeThread, final GestionRepertoire pGestionRepertoire) {
        super(pSession, pPoolDeThread, pGestionRepertoire);
        mapper = pMapper;
    }

    @Override
    public void mapUnFichier(final File pFichier) {
        final RFOSStructure structureFichier = JAXB.unmarshal(pFichier, RFOSStructure.class);
        persisterTable(structureFichier.getSTS());
    }

        private void persisterTable(final STS pStructureSTS) {
        final UnitOfWork unit = new UnitOfWork(mapper, sessionFactory, pStructureSTS);
        poolDeThread.execute(unit);
    }

    private static class UnitOfWork implements Runnable {

               private final StructureRFOS2StructureGOSMapperImpl mapper;

                private final SessionFactory sessionFactory;

                private final STS structureSTS;

                public UnitOfWork(final StructureRFOS2StructureGOSMapperImpl pMapper, final SessionFactory pSession,
                final STS pStructureSTS) {
            mapper = pMapper;
            sessionFactory = pSession;
            structureSTS = pStructureSTS;
        }

        /*
         * (non-Javadoc)
         * 
         * @see java.lang.Runnable#run()
         */
        @Override
        public void run() {
            final Session session = sessionFactory.openSession();
            try {

                final fr.msa.agora.bp0gos.metier.sts.domaine.STS structureGOS = mapper.map(structureSTS);

                final Transaction transaction = session.beginTransaction();
                try {
                    session.save(structureGOS);
                    session.flush();
                    transaction.commit();

                } catch (final RuntimeException r) {
                    transaction.rollback();
                    throw r;
                } catch (final Error error) {
                     transaction.rollback();
                    throw error;
                }
            }  finally {
                session.close();
            }
        }
    }

}