springBoot+mybatis+pgsql 配置druid连接池,启动时出现resultset已关闭
初次使用druid连接池,按照网上的博文配置完成之后,莫名奇妙的出现了以下的错误,之后就去官网找demo重新配置,发现代码并没有什么问题,可报错信息依然存在。错误信息如下:
2018-03-21 16:59:30.603 [Druid-ConnectionPool-Create-1140697305] INFO com.alibaba.druid.pool.DruidDataSource - put physical connection to pool failed.
2018-03-21 16:59:30.622 [Druid-ConnectionPool-Create-1140697305] ERROR com.alibaba.druid.pool.DruidDataSource - create connection holder error
org.postgresql.util.PSQLException: 这个 ResultSet 已经被关闭。
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkClosed(AbstractJdbc2ResultSet.java:2654)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.setFetchSize(AbstractJdbc2ResultSet.java:1771)
at org.postgresql.jdbc4.Jdbc4Statement.createResultSet(Jdbc4Statement.java:39)
at org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler.handleResultRows(AbstractJdbc2Statement.java:211)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1773)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
at org.postgresql.jdbc2.AbstractJdbc2Connection.execSQLUpdate(AbstractJdbc2Connection.java:263)
at org.postgresql.jdbc2.AbstractJdbc2Connection.getTransactionIsolation(AbstractJdbc2Connection.java:775)
at com.alibaba.druid.pool.DruidConnectionHolder.<init>(DruidConnectionHolder.java:144)
at com.alibaba.druid.pool.DruidConnectionHolder.<init>(DruidConnectionHolder.java:82)
at com.alibaba.druid.pool.DruidDataSource.put(DruidDataSource.java:1870)
at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2123)
于是开始查找原因:
- 有可能是数据源的问题,开始debug,表示两个数据源的初始化都以完成
- 经过排查,最终发现是因为postgresql的jar包问题,我使用的是sharding官方推荐的9.1-901-1.jdbc4,后来改为了42.1.4后,运行成功。
配置如下:
1. 添加maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.0</version>
</dependency>
2. 添加 DruidStatViewServlet
@WebServlet(urlPatterns="/druid/*",
initParams = {
@WebInitParam(name="allow",value=""),// IP白名单(没有配置或者为空,则允许所有访问)
@WebInitParam(name="deny",value=""),// IP黑名单 (存在共同时,deny优先于allow)
@WebInitParam(name="loginUsername",value="admin"),// 用户名
@WebInitParam(name="loginPassword",value="admin"),// 密码
@WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
}
)
public class DruidStatViewServlet extends StatViewServlet {
private static final long serialVersionUID = -2688872071445249539L;
}
3. 添加 DruidStatFilter
@WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*",
initParams = {
@WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")//忽略资源
}
)
public class DruidStatFilter extends WebStatFilter {
}
4. 在 LogctApplication 启动类上添加 @ServletComponentScan 注解。