问题描述
我有以下问题: 我目前正在编写一个 Spring Boot 应用程序,它提供了一个休息端点,并不断评估存储在我必须通过 SSH 隧道 访问的远程 MysqL 数据库中的一些数据。我使用 Jcraft 库来创建该隧道并动态分配一个空闲端口,我的数据源使用该端口通过隧道连接到数据库。端口不能是静态的。
数据源本身是一个Hikari 连接池。
偶尔发生一些事情,我失去与数据库的连接。 我想创建一个故障保护,它基本上可以捕获与数据库通信的任何问题相关的任何异常,自动关闭旧隧道 + 数据源,然后创建一个新隧道 + 重新创建数据源。
我目前的方法如下:
基本上只是重新创建隧道,因为它不再存在,然后关闭连接池+再次重新启动它。之后,我在 DAO 内部自动装配的每个 JdbcTemplate 中设置了新数据源。
我的数据源配置 bean:
import com.jcraft.jsch.JSchException;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import net.candidatis.tiertwo.data.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;
@Slf4j
@Configuration
@Data
public class ConfigDataSource {
HikariDataSource ds;
private SshSession sshSession;
private DaoCustom daoCustom;
private DaoPortals daoPortals;
private DaoBlacklist daoBlacklist;
private DaoDbChecker daoDbChecker;
private DaoPublishing daoPublishing;
private DaoTempJobs daoTempJobs;
public ConfigDataSource(SshSession sshSession){
this.sshSession = sshSession;
}
@Bean
public HikariDataSource dataSource(){
ds = new HikariDataSource(getConfig());
return ds;
}
public void reloadDataSource(){
log.info("Reloading the Connection pool.");
if(ds != null && !ds.isClosed()){
ds.close();
}
ds = new HikariDataSource(getConfig());
this.daoCustom.getJdbcTemplate().setDataSource(ds);
this.daoPortals.getJdbcTemplate().setDataSource(ds);
this.daoBlacklist.getJdbcTemplate().setDataSource(ds);;
this.daoDbChecker.getJdbcTemplate().setDataSource(ds);
this.daoPublishing.getJdbcTemplate().setDataSource(ds);
this.daoPublishing.getNamedJdbcTemplate().getJdbcTemplate().setDataSource(ds);
this.daoTempJobs.getJdbcTemplate().setDataSource(ds);
}
private HikariConfig getConfig(){
try {
this.sshSession.createSessionSSH();
} catch (JSchException e) {
e.printstacktrace();
log.error("Could not create SSH session");
}
HikariConfig config = new HikariConfig();
config.setJdbcUrl( Constants.DB_JDBC_URL + this.sshSession.getAssignedPort());
config.setUsername( Constants.DB_USER );
config.setPassword( Constants.DB_PASSWORD );
config.setMaximumPoolSize(2);
config.setMaxLifetime(TimeUnit.MINUTES.toMillis(5)); // default wait_timeout of MysqL = 28800 seconds = 8 hours -> must be less
config.setConnectionTimeout(TimeUnit.MINUTES.toMillis(10)); // Maximum number of milliseconds that a client will wait for a connection from the pool. Throws sqlException
config.setValidationTimeout(TimeUnit.MINUTES.toMillis(8)); // This property controls the maximum amount of time that a connection will be tested for aliveness.
config.setLeakDetectionThreshold(30000);
return config;
}
}
如果发生任何事情,异常处理基本上只是 reloadDataSource
方法。
它使用具有新分配端口的配置创建一个新池,并更新所有 JdbcTemplate 类的所有数据源..
它几乎有效。我可以重新加载池,然后我可以在数据库上使用 SELECT 语句来获取数据,但是我似乎无法插入、更新或删除数据。
这是我的hikariCP日志的一部分在启动时(不重新加载):
2021-03-31 13:18:05.051 DEBUG 471740 --- [ restartedMain] com.zaxxer.hikari.util.DriverDataSource : Loaded driver with class name com.MysqL.cj.jdbc.Driver for jdbcUrl=jdbc:MysqL://localhost:41749
2021-03-31 13:18:05.566 DEBUG 471740 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.MysqL.cj.jdbc.ConnectionImpl@647dd875
2021-03-31 13:18:05.566 INFO 471740 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2021-03-31 13:18:05.666 DEBUG 471740 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=1,active=1,idle=0,waiting=0)
2021-03-31 13:18:05.714 DEBUG 471740 --- [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.MysqL.cj.jdbc.ConnectionImpl@1c9d2fe4
2021-03-31 13:18:05.714 DEBUG 471740 --- [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - After adding stats (total=2,idle=1,waiting=0)
..重新加载后再次出现:
2021-03-31 13:18:24.808 INFO 471740 --- [ restartedMain] n.c.tiertwo.config.ConfigDataSource : Reloading the Connection pool.
2021-03-31 13:18:24.808 INFO 471740 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2021-03-31 13:18:24.809 DEBUG 471740 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Before shutdown stats (total=2,active=0,idle=2,waiting=0)
2021-03-31 13:18:24.809 DEBUG 471740 --- [nnection closer] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Closing connection com.MysqL.cj.jdbc.ConnectionImpl@647dd875: (connection evicted)
2021-03-31 13:18:24.812 DEBUG 471740 --- [nnection closer] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Closing connection com.MysqL.cj.jdbc.ConnectionImpl@1c9d2fe4: (connection evicted)
2021-03-31 13:18:24.812 DEBUG 471740 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - After shutdown stats (total=0,waiting=0)
2021-03-31 13:18:24.812 INFO 471740 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
2021-03-31 13:18:34.946 INFO 471740 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Starting...
2021-03-31 13:18:34.946 DEBUG 471740 --- [ restartedMain] com.zaxxer.hikari.util.DriverDataSource : Loaded driver with class name com.MysqL.cj.jdbc.Driver for jdbcUrl=jdbc:MysqL://localhost:35177
2021-03-31 13:18:35.691 DEBUG 471740 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-2 - Added connection com.MysqL.cj.jdbc.ConnectionImpl@153f9ff2
2021-03-31 13:18:35.692 INFO 471740 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Start completed.
2021-03-31 13:18:35.710 INFO 471740 --- [ restartedMain] n.c.tiertwo.controllers.MainController : Fetching TempJob Block from database
2021-03-31 13:18:35.792 DEBUG 471740 --- [l-2 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-2 - Pool stats (total=1,waiting=0)
2021-03-31 13:18:35.978 DEBUG 471740 --- [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-2 - Added connection com.MysqL.cj.jdbc.ConnectionImpl@22eb1758
2021-03-31 13:18:35.978 DEBUG 471740 --- [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-2 - After adding stats (total=2,waiting=0)
再说一次:我可以使用 SELECT 语句,因此该池应该确实存在。但是,在插入、删除或任何其他查询时,我收到以下错误:
at org.springframework.jdbc.core.Metadata.TableMetaDataProviderFactory.createMetaDataProvider(TableMetaDataProviderFactory.java:86)
at org.springframework.jdbc.core.Metadata.TableMetaDataContext.processMetaData(TableMetaDataContext.java:171)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.compileInternal(AbstractJdbcInsert.java:277)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.compile(AbstractJdbcInsert.java:261)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.checkCompiled(AbstractJdbcInsert.java:309)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.doExecuteAndReturnKey(AbstractJdbcInsert.java:368)
at org.springframework.jdbc.core.simple.SimpleJdbcInsert.executeAndReturnKey(SimpleJdbcInsert.java:127)
at net.candidatis.tiertwo.data.DaoPublishing.publish(DaoPublishing.java:220)
at net.candidatis.tiertwo.data.DaoPublishing$$FastClassBySpringcglib$$32c38d56.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.invokeJoinpoint(cglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.proceed(cglibAopProxy.java:749)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.proceed(cglibAopProxy.java:749)
at org.springframework.aop.framework.cglibAopProxy$DynamicAdvisedInterceptor.intercept(cglibAopProxy.java:691)
at net.candidatis.tiertwo.data.DaoPublishing$$EnhancerBySpringcglib$$bdbc3342.publish(<generated>)
at net.candidatis.tiertwo.services.Publisher.publish(Publisher.java:150)
at net.candidatis.tiertwo.services.Publisher.publishEvaluation(Publisher.java:67)
at net.candidatis.tiertwo.services.Publishing.run(Publishing.java:16)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting Meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:363)
at org.springframework.jdbc.core.Metadata.TableMetaDataProviderFactory.createMetaDataProvider(TableMetaDataProviderFactory.java:52)
... 25 more
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:337)
... 26 more
Caused by: java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:96)
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 27 more
org.springframework.dao.DataAccessResourceFailureException: Error retrieving database Meta-data; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting Meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.core.Metadata.TableMetaDataProviderFactory.createMetaDataProvider(TableMetaDataProviderFactory.java:86)
at org.springframework.jdbc.core.Metadata.TableMetaDataContext.processMetaData(TableMetaDataContext.java:171)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.compileInternal(AbstractJdbcInsert.java:277)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.compile(AbstractJdbcInsert.java:261)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.checkCompiled(AbstractJdbcInsert.java:309)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.doExecuteAndReturnKey(AbstractJdbcInsert.java:368)
at org.springframework.jdbc.core.simple.SimpleJdbcInsert.executeAndReturnKey(SimpleJdbcInsert.java:127)
at net.candidatis.tiertwo.data.DaoPublishing.publish(DaoPublishing.java:220)
at net.candidatis.tiertwo.data.DaoPublishing$$FastClassBySpringcglib$$32c38d56.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.invokeJoinpoint(cglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.proceed(cglibAopProxy.java:749)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.proceed(cglibAopProxy.java:749)
at org.springframework.aop.framework.cglibAopProxy$DynamicAdvisedInterceptor.intercept(cglibAopProxy.java:691)
at net.candidatis.tiertwo.data.DaoPublishing$$EnhancerBySpringcglib$$bdbc3342.publish(<generated>)
at net.candidatis.tiertwo.services.Publisher.publish(Publisher.java:150)
at net.candidatis.tiertwo.services.Publisher.publishEvaluation(Publisher.java:67)
at net.candidatis.tiertwo.services.Publishing.run(Publishing.java:16)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting Meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:363)
at org.springframework.jdbc.core.Metadata.TableMetaDataProviderFactory.createMetaDataProvider(TableMetaDataProviderFactory.java:52)
... 25 more
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:337)
... 26 more
Caused by: java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:96)
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 27 more
org.springframework.dao.DataAccessResourceFailureException: Error retrieving database Meta-data; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting Meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.core.Metadata.TableMetaDataProviderFactory.createMetaDataProvider(TableMetaDataProviderFactory.java:86)
at org.springframework.jdbc.core.Metadata.TableMetaDataContext.processMetaData(TableMetaDataContext.java:171)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.compileInternal(AbstractJdbcInsert.java:277)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.compile(AbstractJdbcInsert.java:261)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.checkCompiled(AbstractJdbcInsert.java:309)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.doExecuteAndReturnKey(AbstractJdbcInsert.java:368)
at org.springframework.jdbc.core.simple.SimpleJdbcInsert.executeAndReturnKey(SimpleJdbcInsert.java:127)
at net.candidatis.tiertwo.data.DaoPublishing.publish(DaoPublishing.java:220)
at net.candidatis.tiertwo.data.DaoPublishing$$FastClassBySpringcglib$$32c38d56.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.invokeJoinpoint(cglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.proceed(cglibAopProxy.java:749)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.proceed(cglibAopProxy.java:749)
at org.springframework.aop.framework.cglibAopProxy$DynamicAdvisedInterceptor.intercept(cglibAopProxy.java:691)
at net.candidatis.tiertwo.data.DaoPublishing$$EnhancerBySpringcglib$$bdbc3342.publish(<generated>)
at net.candidatis.tiertwo.services.Publisher.publish(Publisher.java:150)
at net.candidatis.tiertwo.services.Publisher.publish(Publisher.java:171)
at net.candidatis.tiertwo.services.Publisher.publishEvaluation(Publisher.java:67)
at net.candidatis.tiertwo.services.Publishing.run(Publishing.java:16)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting Meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:363)
at org.springframework.jdbc.core.Metadata.TableMetaDataProviderFactory.createMetaDataProvider(TableMetaDataProviderFactory.java:52)
... 26 more
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:337)
... 27 more
Caused by: java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:96)
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 28 more
org.springframework.dao.DataAccessResourceFailureException: Error retrieving database Meta-data; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting Meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.core.Metadata.TableMetaDataProviderFactory.createMetaDataProvider(TableMetaDataProviderFactory.java:86)
at org.springframework.jdbc.core.Metadata.TableMetaDataContext.processMetaData(TableMetaDataContext.java:171)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.compileInternal(AbstractJdbcInsert.java:277)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.compile(AbstractJdbcInsert.java:261)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.checkCompiled(AbstractJdbcInsert.java:309)
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.doExecuteAndReturnKey(AbstractJdbcInsert.java:368)
at org.springframework.jdbc.core.simple.SimpleJdbcInsert.executeAndReturnKey(SimpleJdbcInsert.java:127)
at net.candidatis.tiertwo.data.DaoPublishing.publish(DaoPublishing.java:220)
at net.candidatis.tiertwo.data.DaoPublishing$$FastClassBySpringcglib$$32c38d56.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.invokeJoinpoint(cglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.proceed(cglibAopProxy.java:749)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.proceed(cglibAopProxy.java:749)
at org.springframework.aop.framework.cglibAopProxy$DynamicAdvisedInterceptor.intercept(cglibAopProxy.java:691)
at net.candidatis.tiertwo.data.DaoPublishing$$EnhancerBySpringcglib$$bdbc3342.publish(<generated>)
at net.candidatis.tiertwo.services.Publisher.publish(Publisher.java:150)
at net.candidatis.tiertwo.services.Publisher.publish(Publisher.java:171)
at net.candidatis.tiertwo.services.Publisher.publishEvaluation(Publisher.java:67)
at net.candidatis.tiertwo.services.Publishing.run(Publishing.java:16)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting Meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:363)
at org.springframework.jdbc.core.Metadata.TableMetaDataProviderFactory.createMetaDataProvider(TableMetaDataProviderFactory.java:52)
... 26 more
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:337)
... 27 more
Caused by: java.sql.sqlException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:96)
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 28 more
如您所见,它仍在尝试使用 HikariPool #1 实际上应该使用我之前设置的新 #2。
任何想法为什么它会这样?会不会是 Spring 容器提供的 jdbcTemplate 的数据源一经初始化就无法切换?如果我不能改变它为什么我可以使用 SELECT 查询?通常是否有更好的方法来全局更新我所有数据库操作的数据源?我真的需要为这些数据库连接问题找到可靠的解决方案。
谢谢你的一切。
感谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)