现状,以获得当前数据库池的状态使用Tomcat的数据源 - 如何访问数据源弹簧JNDI
我做Web和REST API服务器利用JMeter应力负荷测试,但一些transations'响应时间延迟很多,所以我使用Spring Aspect来获取方法处理时间。我无法设置的是某些过程调用花费了太多时间,因此试图通过使用特定事务写入日志来检查数据库进程时间(获取con,释放con,纯数据库进程时间)。 JMX不是一个选项,因为我无法使用它来跟踪事务。我只想在ThreadContext上留下数据库池状态,以便我可以同时检查慢事务和数据库池状态。
从Tomcat中使用DB数据源在这里不被视为不想在项目文件中进行数据库设置。
在Spring项目中使用数据源不是我正在考虑的一个选项。
当前设置
Spring项目的事务管理器使用Tomcat DBCP池与Oracle数据源(oracle.jdbc.OracleDriver与javax.sql.DataSource中)
的applicationContext.xml - DB设置
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:/comp/env/jdbc/svc"/>
<property name="resourceRef" value="true"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="mapperLocations" value="classpath*:../sql/**.xml"/>
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
<bean id="oracleTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" />
<bean id="transactionManager" class="com.xxx.xxx.api.transaction.TransactionManager">
<property name="transactionManagers">
<list>
<ref bean="oracleTransactionManager"/>
</list>
</property>
</bean>
试图做的事情...记录数据库池状态
我想使用Spring Aspect在某个dao类中的函数被调用时写入日志。 我想写日志就像是DB池状态如
- 活动连接计数
- 空闲连接计数
- 最大活动连接设置
- 最大空闲连接设置
和等等。
问题
是否有可能从春季项目中访问Tomcat的DB池? 下面将介绍这样的方法。
- getNumIdle()
- getWaitCount()
- getNumActive()
感谢您的回答,我会看看它是否适用于我的项目。 – handicop
@ handicop你有没有试过这个解决方案? – yaswanth
我能够设置驱动程序,并可以看到计数。也解决了这个问题。如果任何使用相同sid的应用程序多次尝试使用错误的密码登录,并且没有策略来锁定整个sid,则oracle数据库有一个导致内存锁定的错误。用错误密码查找守护进程,并解决延迟过程。感谢您的询问。 – handicop