Не удается подключиться к базе данных из-за исключения sqlnontransientexception : адрес уже используется
Я создал проект spring mvc, в котором использую механизм JdbcTemplate для выполнения операций с базой данных. Я запускаю планировщик, который
1. анализирует XML-файл с 300K записями
2. проверяет каждое поле и сохраняет его в объекте модели
3. После подготовки объекта выполните поиск в базе данных с помощью select query
4. Если найдено, то храните в списке массивов "listUpdate" или храните в "listInsert".
5. После подготовки обоих списков он выполняет пакетные запросы.
но во время запроса select, который выполняется для каждой записи, возникает исключение SQLNonTransientException, которое выглядит следующим образом:
Цитата:орг.springframework.transaction.CannotCreateTransactionException: не удалось открыть подключение JDBC для сделки; вложенные исключением является Java.для SQL.SQLNonTransientConnectionException: не удалось подключиться к-адресу=(хост=localhost в) порта(Port=3307)(тип=мастер) : адрес уже используется: подключение
в org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:245)
в org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)
в org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:427)
в org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276)
в org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
в org.springframework.aop.framework.Рефлексивный метод вызова.продолжить(ReflectiveMethodInvocation.java:179)
в org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
в com.sun.proxy.$Proxy36.findAccountByACCust(неизвестный источник)
в com.intersect.aml.service.impl.AccountMasterServiceImpl.findAccountByACCust(AccountMasterServiceImpl.java:147)
в com.intersect.aml.schedule.CbsAcctMasterXmlScheduler.xmlParsingToEntity(CbsAcctMasterXmlScheduler.java:182)
в com.intersect.aml.schedule.CbsAcctMasterXmlScheduler.execute(CbsAcctMasterXmlScheduler.java:83)
at sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод)
at sun.reflect.NativeMethodAccessorImpl.invoke(неизвестный источник)
на солнце...поразмышляйте.DelegatingMethodAccessorImpl.invoke(неизвестный источник)
в java.lang.reflect.Method.invoke(неизвестный источник)
в org.springframework.scheduling.support.ScheduledMethodRunnable.запустить(ScheduledMethodRunnable.Ява:65)
в org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
в орг.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
в java.util.concurrent.Исполнители$RunnableAdapter.call(неизвестный источник)
в java.util.concurrent.FutureTask.run(неизвестный источник)
в java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(неизвестный источник)
в java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(неизвестный источник)
в java.util.concurrent.ThreadPoolExecutor.runWorker(неизвестный источник)
в java.util.concurrent.ThreadPoolExecutor$Worker.run(неизвестный источник)
на Яве,Лэнг.Thread.run(неизвестный источник)
Вызванные: Java для.для SQL.SQLNonTransientConnectionException: не удалось подключиться к-адресу=(хост=localhost в) порта(Port=3307)(тип=мастер) : адрес уже используется: подключение
в org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(ExceptionMapper.java:234)
в org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.connException(ExceptionMapper.java:95)
в org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1132)
в org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:560)
в org.mariadb.jdbc.MariaDbConnection.newConnection(MariaDbConnection.java:174)
в org.mariadb.jdbc.Driver.connect(Driver.java:92)
в java.sql.DriverManager.getConnection(неизвестный источник)
в java.sql.DriverManager.getConnection(неизвестный источник)
в org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153)
в org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144)
в org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155)
в org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120)
в org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:204)
.. Еще 24 человека
Вызвано: java.net.BindException: адрес уже используется: connect
в java.net.DualStackPlainSocketImpl.waitForConnect(собственный метод)
в java.net.DualStackPlainSocketImpl.socketConnect(неизвестный источник)
в java.net.AbstractPlainSocketImpl.doConnect(неизвестный источник)
в java.net.AbstractPlainSocketImpl.connectToAddress(неизвестный источник)
в java.net.AbstractPlainSocketImpl.connect(неизвестный источник)
в java.net.PlainSocketImpl.connect(неизвестный источник)
в java.net.SocksSocketImpl.connect(неизвестный источник)
в java.net.Socket.connect(неизвестный источник)
в org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connect(AbstractConnectProtocol.java:406)
в org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1124)
.. Еще 34 человека
Когда я запускаю команду netstat -aon, я получаю слишком много потоков на порту 3307 с TIME_WAIT
и через некоторое время мой планировщик выходит со следующей ошибкой :
Цитата:Не удалось открыть соединение JDBC для транзакции; вложенным исключением является java.sql.SQLNonTransientConnectionException: не удалось подключиться к address=(host=localhost)(port=3307)(type=master) : Address already in use: connect
Что я уже пробовал:
Я установил JAVA_OPTS , CATALINA_OPTS, Java config, setenv.летучая мышь с -Xms128m -Xmx3072m.
Также установите планировщик pool-size=1 и Executor.newExecutionThreadPool(1)