嵌入式tomcat上的JDBC连接问题
Posted
技术标签:
【中文标题】嵌入式tomcat上的JDBC连接问题【英文标题】:JDBC Connection issue on embedded tomcat 【发布时间】:2015-12-01 06:47:22 【问题描述】:在我的 Spring Boot 应用程序中,我正在使用 org.apache.tomcat.jdbc.pool.DataSource 创建一个数据源。我正在使用嵌入式tomcat。以下是我设置的一些属性
myDS.setDriverClassName(driverClassName);
myDS.setUrl(databaseURL);
myDS.setUsername(databaseUserId);
myDS.setTestWhileIdle(false);
myDS.setTestOnBorrow(true);
myDS.setValidationQuery("SELECT 1");
myDS.setTestOnReturn(false);
myDS.setValidationInterval(30000);
myDS.setTimeBetweenEvictionRunsMillis(30000);
myDS.setMaxActive(100);
myDS.setInitialSize(10);
myDS.setMaxWait(10000);
myDS.setRemoveAbandonedTimeout(60);
myDS.setMinEvictableIdleTimeMillis(30000);
myDS.setMinIdle(10);
myDS.setLogAbandoned(true);
myDS.setRemoveAbandoned(true);
我在两个具有原型作用域的 spring bean 中使用了这个 ds 对象。当我使用第一个使用第一个 spring bean 应用程序的功能时,它工作正常。然后我点击使用相同 ds 对象的第二个功能然后我得到以下错误
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Failed to validate a newly established connection.
在我的代码内部,我使用 jdbcTemplate 进行数据库操作。我尝试使用destroy方法,但它不起作用
@Bean(destroyMethod="") 公共数据源 appDS()
请推荐
【问题讨论】:
你用的是什么数据库? 你为什么不使用spring.datasource
命名空间。它会自动完成所有这些操作。
我更改了验证查询,它开始正常工作。我的问题是为什么我在嵌入式 tomcat 上会收到此错误,为什么在外部或独立 tomcat 上却没有
我正在使用 DB2 数据库,将验证查询更改为 SELECT current date FROM sysibm.sysdummy1
【参考方案1】:
由于我使用的是 DB2 数据库,因此我将验证查询更改如下,它开始工作
从 sysibm.sysdummy1 中选择当前日期
注意 - 对于相同的配置,嵌入式 Tomcat 和独立 Tomcat 的行为是不同的。在独立的 tomcat 上,您不会收到无效验证查询的异常。外部tomcat版本7
【讨论】:
以上是关于嵌入式tomcat上的JDBC连接问题的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat JDBC MySQL ClassNotFoundException
以编程方式将数据源添加到嵌入式 tomcat 7 中的 JNDI 上下文
带有球衣的嵌入式 tomcat 上的 java.net.SocketTimeoutException