Druid Closed Statement
最近公司项目Spring boot 1.5.8+ Druid 1.1.5 部署到 Weblogic时启动不会报任何错误。
但是发送交易时候,第一个SQL执行不报错,第二SQL语句执行必报一下错误。后续所有SQL语句执行都报一样错误。
java.sql.SQLException: Closed Statement
at oracle.jdbc.driver.OracleClosedStatement.exitImplicitCacheToActive(OracleClosedStatement.java:2955)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.exitImplicitCacheToActive(OraclePreparedStatementWrapper.java:1247)
at com.alibaba.druid.util.OracleUtils.exitImplicitCacheToActive(OracleUtils.java:80)
at com.alibaba.druid.pool.PreparedStatementPool.get(PreparedStatementPool.java:66)
at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:345)
目前通过谷歌和Druid Github的查询,貌似这个是一个BUG。升级到1.1.18版本也没有解决该问题
Github 问题地址
image.png
按照以上这个回答,确实将PSCache设置为false确实就没有报错。
而且通过错误信息也发现是关于PreparedStatement内部出问题了。
java.lang.NoSuchFieldError: defaultReader
部署到Weblogic启动出现一个报错,一般来说启动报错都是包冲突。
可以创建src/main/webapp/WEB-INF/weblogic.xml 让weblogic优先加载项目jar包避免这个问题。
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
https://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd
http://xmlns.oracle.com/weblogic/weblogic-web-app
https://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
<wls:container-descriptor>
<wls:prefer-application-packages>
<wls:package-name>org.slf4j</wls:package-name>
</wls:prefer-application-packages>
</wls:container-descriptor>
</wls:weblogic-web-app>
package-name就是优先加载包名
如果出现一下问题
SEVERE: defaultReader
java.lang.NoSuchFieldError: defaultReader
at com.jayway.jsonpath.spi.json.JsonSmartJsonProvider.<init>(JsonSmartJsonProvider.java:39)
at com.jayway.jsonpath.internal.DefaultsImpl.jsonProvider(DefaultsImpl.java:21)
at com.jayway.jsonpath.Configuration.defaultConfiguration(Configuration.java:174)
at com.jayway.jsonpath.internal.JsonContext.<init>(JsonContext.java:52)
at com.jayway.jsonpath.JsonPath.parse(JsonPath.java:596)
加入一下配置即可
<wls:prefer-application-packages>
<wls:package-name>net.minidev.json.*</wls:package-name>
</wls:prefer-application-packages>
而且发现一个问题,一下配置就是全部有限项目的jar包,但是也没有。prefer-web-inf-classes和prefer-application-packages不能同时使用
<wls:container-descriptor>
<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>