springmvc + jta+atomikos+druid 启动报错om.alibaba.druid.pool.DruidDataSource.removeAbandoned(DruidDataSource.java:2298) abandon connection, owner thread: RMI TCP Connection(idle), connected at : 1689237106459, open stackTrace
<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init" destroy-method="close" primary="true">
<property name="uniqueResourceName">
<value>dataSourceOne</value>
</property>
<property name="xaDataSourceClassName" value="com.alibaba.druid.pool.xa.DruidXADataSource"/>
<property name="poolSize" value="${ds.initialSize}" />
<property name="minPoolSize" value="${ds.minIdle}"/>
<property name="maxPoolSize" value="${ds.maxActive}"/>
<property name="borrowConnectionTimeout" value="${ds.maxWait}"/>
<property name="reapTimeout" value="60"/>
<property name="maxIdleTime" value="300"/>
<property name="maintenanceInterval" value="60"/>
<property name="loginTimeout" value="60"/>
<property name="xaProperties">
<props>
<!-- 基本属性 url、user、password -->
<prop key="url" >${jdbc.url}</prop>
<prop key="username" >${jdbc.username}</prop>
<prop key="password" >${jdbc.password}</prop>
<!-- 配置初始化大小、最小、最大 -->
<prop key="initialSize" >${ds.initialSize}</prop>
<prop key="minIdle" >${ds.minIdle}</prop>
<prop key="maxActive" >${ds.maxActive}</prop>
<!--超过时间限制是否回收-->
<prop key="removeAbandoned" >true</prop>
<!-- 超时时间;单位为秒。60秒 -->
<prop key="removeAbandonedTimeout" >300</prop>
<!-- 关闭abanded连接时输出错误日志 -->
<prop key="logAbandoned" >true</prop>
<!-- 配置获取连接等待超时的时间 -->
<prop key="maxWait" >${ds.maxWait}</prop>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<prop key="timeBetweenEvictionRunsMillis" >${ds.timeBetweenEvictionRunsMillis}</prop>
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<prop key="minEvictableIdleTimeMillis" >${ds.minEvictableIdleTimeMillis}</prop>
</props>
</property>
</bean>
<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
<property name="forceShutdown">
<value>true</value>
</property>
</bean>
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="300" />
</bean>
<bean id="springJTATransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager" ref="atomikosTransactionManager"/>
<property name="userTransaction" ref="atomikosUserTransaction" />
<property name="allowCustomIsolationLevels" value="true"/>
</bean>
虽然打印的事error日志,但这也不是报错,如果是错误的话,项目应该启动不起来。
首先 你的配置开启了removeAbandoned 配置,该方法可以用于从连接池中移除闲置时间过长的连接。当连接池中的连接长时间处于空闲状态时,它们可能会被认为是废弃连接并被移除,这是个正常的操作。
其次 你的配置开启了logAbandoned配置,从源码可知,当进行释放的时候 会根据该配置判断是否打印日志,参考源码
com.alibaba.druid.pool.DruidDataSource#removeAbandoned
如果你不想有这个日志输出,可以吧logAbandoned配置关掉。
如果对你有帮助,麻烦点一个采纳,谢谢。如果有什么疑问可以随时提问~