在众多项目中使用过诸多连接池,如DBCP,PROXOOL等,发现还是PROXOOL好使,主要是兼容性好,性能稳定。
在某次项目中,由于历史版本问题,使用了两个连接池,一个是proxool,一个是IBATIS自由的SIMPLE,但是在连接一个专有数据库时,却发现proxool可以创建连接池,而IBATIS的SIMPLE却不能建立连接(报经典的错The network apdapter counld‘t estenbilished the connection。。。)。后来将IBATIS改用DBCP,也不行。就想要是IBATIS能用proxool连接池就好了,查看IBATIS文档,文档上说IBATIS使用的连接池可以自己制定,由于项目紧,来不急了(等以后有时间了再研究一下),后来想想,能不能用spring把它们两个整合起来,一番搜索后,结果如下:
1.利用spring将IBATIS和proxool整合起来,使IBATIS轻松使用proxool连接池。
Spring 配置如下:
<beans>
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="/conf/dbpool.properties" />
<property name="fileEncoding" value="UTF-8" />
</bean>
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">
<property name="driver">
<value>${jdbc-0.proxool.driver-class}</value>
</property>
<property name="driverUrl">
<value>${jdbc-0.proxool.driver-url}</value>
</property>
<property name="user">
<value>${jdbc-0.user}</value>
</property>
<property name="password">
<value>${jdbc-0.password}</value>
</property>
<property name="alias">
<value>bst</value>
</property>
<property name="prototypeCount">
<value>5</value>
</property>
<property name="maximumConnectionCount">
<value>10</value>
</property>
<property name="minimumConnectionCount">
<value>5</value>
</property>
<property name="maximumActiveTime">
<value>10000</value>
</property>
<property name="trace">
<value>true</value>
</property>
<property name="verbose">
<value>true</value>
</property>
</bean>
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="com/bw/bst/db/SqlMapConfig.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
比较有意思的是SqlMapClientFactoryBean是sqlMapClient的工厂,所以可以直接从spring得到sqlMapClient。
因此只需要将原代码中从IBATIS构造sqlMapClient,改为从spring获取即可。
如原代码片段为:
static {
try {
Reader reader = Resources.getResourceAsReader("com/bw/bst/db/SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
// Fail fast.
throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
}
}
改为:
static {
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"},SqlMapUtil.class);
sqlMapper= (SqlMapClient) context.getBean("sqlMapClient");
}
轻松又省力的使IBATIS使用了proxool连接池。