【发布时间】:2019-12-24 17:40:03
【问题描述】:
我们有一个由第三方供应商提供的应用程序,它在 Tomcat 8 和 JDK 8 上运行到带有 ojdbc7.jar 和 xdb6.jar 驱动程序的 Oracle 12 DB。该应用程序有效,但比预期的要慢。在调查时,应用程序似乎配置为使用连接池,但应用程序似乎正在为每个查询创建新连接,而不是使用任何最初创建的到数据库的连接。
很遗憾,我无法访问第 3 方应用的代码。但是,希望能够了解我在 Tomcat 设置中缺少什么来进行池化工作。
我已经尝试通过 Apache 的文档了解较旧的 Oracle 连接,并尝试在 Web 上找到其他选项。
<Resource name="jdbc/DataSource" auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:XE"
username="myProxyUser" password="myPassword"
initialSize="5" maxTotal="100" maxIdle="-1"
maxWaitMillis="30000"
validationQuery="select 1 from dual"
testOnBorrow="true"
accessToUnderlyingConnectionAllowed = "true"
connectionProperties="defaultRowPrefetch=100"
removeAbandoned = "true"
removeAbandonedTimeout = "30"/>
【问题讨论】:
-
您确定应用程序将“jdbc/DataSource”用于 JNDI rosolution?检查 web.xml 和 context.xml。参考:tomcat.apache.org/tomcat-8.0-doc/…
-
在 web.xml 中,我确实看到了下面的摘录。 (*修改了几个字段值)
3rdParyCo Datasource jdbc/DataSource javax.sql.DataSource 容器 -
在 tomcat context.xml 文件中声明的资源名称需要与您的第 3 方用于从 JNDI 解析数据源的资源名称相同,例如 'DataSource ds = (DataSource) cxt.lookup (“java:/comp/env/jdbc/postgres”);'如果名称是“jdbc/DataSource”,您是否检查过第 3 方文档/web.xml/context.xml?您必须在配置中使用与应用程序期望的名称相同的名称。
标签: java tomcat jdbc connection-pooling