在整合ssm框架的过程中,要使用到jtds-sql server and sybase的驱动;但该驱动总是在dbcp2.x数据源中出现AbstratMethodError的问题;奇怪的是在dbcp1.x中是没有问题的。
经过一上午的折腾,各种查资料,最终发现配置dbcp2数据源时,validationQuery是必须要配置的。validationQuery是用来验证数据库连接的查询语句,这个查询语句必须是至少返回一条数据的SELECT语句。每种数据库都有各自的验证语句,下表中收集了几种常见数据库的validationQuery,sybase同SQL server。
DataBase | validationQuery |
---|---|
hsqldb | select 1 from INFORMATION_SCHEMA.SYSTEM_USERS |
Oracle | select 1 from dual |
DB2 | select 1 from sysibm.sysdummy1 |
MySql | select 1 |
Microsoft SqlServer | select1 |
postgresql | select version() |
ingres | select 1 |
derby | values 1 |
H2 | select 1 |
以下为datasource的配置,仅供参考。
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${initialSize}"/>
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="${maxIdle}"/>
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${minIdle}"/>
<!-- 最大活动连接数 -->
<property name="maxTotal" value="${maxTotal}"/>
<!-- 获取连接最大等待时间 -->
<property name="maxWaitMillis" value="${maxWaitMillis}"/>
<!-- 数据库连接测试语句,dbcp2中不可省略 -->
<property name="validationQuery" value="${validationQuery}"/>
</bean>