首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >camel-sql使用者数据库连接问题

camel-sql使用者数据库连接问题
EN

Stack Overflow用户
提问于 2019-03-15 19:11:24
回答 1查看 602关注 0票数 0

我使用的是带有Spring boot的Apache Camel。我使用我的spring boot应用程序作为jar,没有任何服务器。

在app中,我有一个延迟为1000的Camel-SQL消费者路由。然后,该使用者进一步调用使用拆分器和并行处理的其他路由。

通过Jprofiler,我观察到我的数据库连接没有关闭,这些连接是通过使用者打开的。

我在application.properties和使用Oracle DB中也有dbcp2设置。我是第一次观察这个连接问题。有没有人在任何时候都面临着同样的问题?或者我需要添加任何其他配置。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2019-03-17 21:58:34

以下是我的Oracle配置之一:

代码语言:javascript
复制
<cm:property-placeholder id="server.placeholder" persistent-id="name.of.company.datasource">
    <cm:default-properties>
        <cm:property name="db.host" value="host"/>
        <cm:property name="db.port" value="1521"/>
        <cm:property name="db.instance" value="dbname"/>
        <cm:property name="db.user" value="user"/>
        <cm:property name="db.password" value="password"/>
        <cm:property name="driverClassName" value="oracle.jdbc.pool.OracleDataSource" />
        <cm:property name="validationQuery" value="SELECT 1 FROM DUAL" />
        <cm:property name="defaultReadOnly" value="false" />
        <cm:property name="defaultAutoCommit" value="true" />
        <cm:property name="maxActive" value="100" />
        <cm:property name="whenExhaustedAction" value="2" />
        <cm:property name="maxWait" value="-1" />
        <cm:property name="maxIdle" value="8" />
        <cm:property name="minIdle" value="1" />
        <cm:property name="testOnBorrow" value="true" />
        <cm:property name="testOnReturn" value="true" />
        <cm:property name="timeBetweenEvictionRunsMillis" value="-1" />
        <cm:property name="numTestsPerEvictionRun" value="3" />
        <cm:property name="minEvictableIdleTimeMillis" value="1800000" />
        <cm:property name="testWhileIdle" value="false" />
        <cm:property name="softMinEvictableIdleTimeMillis" value="-1" />
        <cm:property name="lifo" value="true" />
    </cm:default-properties>
</cm:property-placeholder>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value= "${driverClassName}" />
  <property name="url" value="jdbc:oracle:thin:@${db.host}:${db.port}:${db.instance}" />
  <property name="username" value="${db.user}" />
  <property name="password" value="${db.password}" />
  <property name="maxIdle" value="1" />
</bean>

<bean id="connectionFactory" class="org.apache.commons.dbcp.DataSourceConnectionFactory">
  <argument ref="dataSource" />
</bean>

<bean id="connectionPool" class="org.apache.commons.pool.impl.GenericObjectPool" >
  <argument><null/></argument>
  <argument value="${maxActive}" />
  <argument value="${whenExhaustedAction}" />
  <argument value="${maxWait}" />
  <argument value="${maxIdle}" />
  <argument value="${minIdle}" />
  <argument value="${testOnBorrow}" />
  <argument value="${testOnReturn}" />
  <argument value="${timeBetweenEvictionRunsMillis}" />
  <argument value="${numTestsPerEvictionRun}" />
  <argument value="${minEvictableIdleTimeMillis}" />
  <argument value="${testWhileIdle}" />
  <argument value="${softMinEvictableIdleTimeMillis}" />
  <argument value="${lifo}" />
</bean>

<bean id="pooledConnectionFactory" class="org.apache.commons.dbcp.PoolableConnectionFactory" >
  <argument ref="connectionFactory" />
  <argument ref="connectionPool" />
  <argument><null/></argument>
  <argument value="${validationQuery}" />
  <argument value="${defaultReadOnly}" />
  <argument value="${defaultAutoCommit}" />
</bean>

<bean id="poolingDataSource" class="org.apache.commons.dbcp.PoolingDataSource" depends-on="pooledConnectionFactory">
  <argument ref="connectionPool" />
</bean>

<service interface="javax.sql.DataSource" ref="poolingDataSource"> 
    <service-properties>
        <entry key="osgi.jndi.service.name" value="jdbc/oracle/db"/>
        <entry key="datasource.name" value="jdbc/oracle/db" />
    </service-properties>
</service>

也许它会对你有所帮助。我认为DB连接没有时间在两次查询之间返回池。您需要配置连接超时和类似的参数(idle参数、minEvictableIdleTimeMillis、timeBetweenEvictionRunsMillis、numTestsPerEvictionRun)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55181308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档