当前位置:首页 » 数据仓库 » spring自动注入数据库连接池
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

spring自动注入数据库连接池

发布时间: 2022-09-12 02:40:55

‘壹’ spring有几种连接池

现在常用的开源数据库连接池主要有c3p0、dbcp、proxool三种,其中:
Spring 推荐使用dbcp;
Hibernate 推荐使用c3p0和proxool;
1、 DBCP:Apache
DBCP(DataBase connection pool)数据库连接池。是Apache上的一个 java连接池项目,也是 tomcat使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。dbcp没有自动的去回收空闲连接的功能。
2、 C3P0:
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能。
3、 Proxool:Sourceforge
Proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。
对比:
1> 相同时间内同等量的线程数和循环次数下:通过对三个连接池的三个标志性性能测试参数(Average,median,90%Line)进行比较发现:性能dbcp<=c3p0<proxool;
2> 不同情况下的同一数据库连接池测试:通过观察 Average,median,90%Line三个参数发
现三个连接池的稳定性(三种连接池的三个测试参数的变化情况)依次:稳定性dbcp>=c3p0>proxool。
结论:
通过对三种数据库连接池的性能测试发现,proxool和 c3p0能够更好的支持高并发,但是在稳定性方面略逊于 dpcp。

‘贰’ Spring配置DBCP数据库连接池

<!-- 数据源配置,使用应用内的DBCP数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- Connection Info -->
<property name="driverClassName" value="${datasource.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />

<!-- Connection Pooling Info -->
<property name="initialSize" value="5" />
<property name="maxActive" value="100" />
<property name="maxIdle" value="30" />
<property name="maxWait" value="1000" />
<property name="poolPreparedStatements" value="true" />
<property name="defaultAutoCommit" value="false" />
</bean>

‘叁’ 为什么要用Spring管理连接池,它有什么好处

使用应用服务器的连接池,效率较高,而且不需要在代码中出现数据库信息。
使用spring管理连接池的话,与服务器无关,便于移植。

‘肆’ spring注解连接池怎么注入到zhong

使用应用服务器的连接池,效率较高,而且不需要在代码中出现数据库信息。 使用spring管理连接池的话,与服务器无关,便于移植。

‘伍’ 数据库连接池有什么作用为什么spring中需要配置那个连接池

连接池的作用就是你要大量访问数据库的时候有用。
可以提高数据访问的速率!

‘陆’ spring+ mybatis怎么配置自带的数据库连接池

造一个db.properties如下配置
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=root
在spring配置中读取

<!-- 配置数据源,使用dbcp连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="30"/>
<property name="maxIdle" value="5"/>
</bean>
用 spring管理线程池,mybits的各种映射也用spring读取管理就好

‘柒’ spring手动注入 数据库很快连接数就超了,咋回事

自己创建的数据库连接要自己关闭的,你的代码并没粘全,但是必须要有session.close();或者conn.close();这样关闭数据库连接的方法调用。否则连接肯定满。 你既然用了spring可以考虑用数据库连接池,结合spring用mybatis或者hibernate这种持久化

‘捌’ java spring框架数据库连接池配置

dhcp.defaultAutoCommit=false //配置事务是否自动提交的
dhcp.removeAbandoned=true //设置连接是否能根据连接时间自动断开
dhcp.removeAbandonedTimeout=60 //连接时间
dhcp.logAbandoned=true //是否对连接情况进行日志记录
这些东西去看看api就行了,掌握学习的方法。

‘玖’ 如何用连接池,Hibernate,Spring连多个SQL数据库

1:在proxool-conf.xml中配置两个数据库连接池
<proxool>
<alias>dataSource_ksmaeaII</alias>
<driver-url>jdbc:jtds:sqlserver://192.10.110.192:1433;databaseName=ksmaeaII</driver-url>
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="sa" />
<property name="password" value="" />
</driver-properties>
<maximum-new-connections>100</maximum-new-connections>
<prototype-count>1</prototype-count>
<maximum-connection-count>400</maximum-connection-count>
<minimum-connection-count>20</minimum-connection-count>
<house-keeping-test-sql>select getdate()</house-keeping-test-sql>
</proxool>

<proxool>
<alias>ds1</alias>
<driver-url>jdbc:jtds:sqlserver://192.10.110.192:1433;databaseName=ksmaeaIIdbmove</driver-url>
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="sa" />
<property name="password" value="" />
</driver-properties>
<maximum-new-connections>100</maximum-new-connections>
<prototype-count>1</prototype-count>
<maximum-connection-count>400</maximum-connection-count>
<minimum-connection-count>20</minimum-connection-count>
<house-keeping-test-sql>select getdate()</house-keeping-test-sql>
</proxool>

2:要连几个库就配置几个hibernate.cfg.xml,下面我配置两个数据库为例
创建hibernate.cfg.xml:里面写第一个数据库的映射文件(本地数据库),如<mapping
resource="com/wisoft/datachange/data/hibernate//SbInfApply.hbm.xml" />
创建hibernate.cfg1.xml:里面写第二个数据库的映射文件(前置库,别人的数据库),如<mapping
resource="com/wisoft/datachange/data/hibernate//InfApply.hbm.xml" />
3:创建一个类,继承HibernateDaoSupport。(直接拷过去就能直接用,我的第二个数据库就是用了这里面的factory1,第一个数据库用了Hibernate原来的factory,如果要连多个库,则多创建几个factory)
package com.wisoft.datachange.data;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class DebugBean extends HibernateDaoSupport {
private SessionFactory factory1;
// private SessionFactory factory2;
protected HibernateTemplate hibernateTemplate1;
// protected HibernateTemplate hibernateTemplate2;

public void setFactory1(SessionFactory factory1) {
this.factory1 = factory1;
}
// public void setFactory2(SessionFactory factory2) {
// this.factory2 = factory2;
// }

public SessionFactory getFactory1() {
return factory1;
}
// public SessionFactory getFactory2() {
// return factory2;
// }
protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {
return super.createHibernateTemplate(sessionFactory);
}
protected void initDao() throws Exception {
hibernateTemplate1 = super.createHibernateTemplate(factory1);
// hibernateTemplate2 = super.createHibernateTemplate(factory2);
super.initDao();
}
}
4:编写自己的测试BO:在BO里注入DAO,如下
public class InfApplyBO implements IInfApplyBO {
private IInfApplyDAO myInfApplyDAO;
public IInfApplyDAO getMyInfApplyDAO() {
return myInfApplyDAO;
}
public void setMyInfApplyDAO(IInfApplyDAO myInfApplyDAO) {
this.myInfApplyDAO = myInfApplyDAO;
}
//底下编写自己的业务代码
//用this.myInfApplyDAO直接调用Dao层的方法,由DAO对数据库进行操作
}
5:编写自己的测试DAO:继承DebugBean如下
public class MyInfApplyDAO extends DebugBean implements IInfApplyDAO {
//对数据库的操作均可写在这里,可以直接用模版save
//如要对第一个数据库操作,只需this.getHibernateTemplate().find(hql);
//如要对第二个数据库操作,只需hibernateTemplate1.save(obj);就行
//注意:在对数据库操作之前不要忘了写applicationContext.xml的配置文件,看第6步
}
6:写applicationContext.xml的配置文件
<!--对第一个数据库连接池的配置-->
<bean id="dataSource_ksmaeaII" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.logicalcobwebs.proxool.ProxoolDriver</value>
</property>
<property name="url">
<value>proxool.dataSource_ksmaeaII</value>
</property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource_ksmaeaII" />
</property>
<property name="lobHandler" ref="lobHandler" />
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.AllowCreate">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.default_schema">dbo</prop>
</props>
</property>
</bean>

<!--对第二个数据库连接池的配置-->
<bean id="ds1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.logicalcobwebs.proxool.ProxoolDriver</value>
</property>
<property name="url">
<value>proxool.ds1</value>
</property>
</bean>

<bean id="sessionFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds1" />
</property>
<property name="lobHandler" ref="lobHandler" />
<property name="configLocation">
<value>classpath:hibernate1.cfg.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.AllowCreate">true</prop>
</props>
</property>
</bean>
<!--配置事务-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<bean id="transactionManager1" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory1"/>
</property>
</bean>

<!--工厂模版-->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="write">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="makeWorkNoOfDep">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc." lazy-init="true" />
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler">
<!-- <property name="nativeJdbcExtractor">
<ref bean="nativeJdbcExtractor" />
</property> -->
</bean>
<bean id="debugbean" class="com.wisoft.datachange.data.DebugBean" abstract="true">
<property name="sessionFactory" ref="sessionFactory" />
<property name="factory1" ref="sessionFactory1" />
<!-- <property name="factory2" ref="sessionFactory2" />-->
</bean>

<bean id="myInfApplyDAO"
class="com.wisoft.datachange.data.hibernate.MyInfApplyDAO" parent="debugbean" >
</bean>

<bean id="InfApplyBO" parent="txProxyTemplate">
<property name="target">
<bean class="com.wisoft.datachange.bo.impl.InfApplyBO">
<property name="myInfApplyDAO" ref="myInfApplyDAO" />
</bean>
</property>
</bean>

到此,数据库就连起来啦\(^o^)/~

‘拾’ 怎么在一个spring里面配置多个数据库连接池

gitchat学术分享,动态数据源,附带源码