spring中的数据库配置
- spring中的数据库配置
1.使用org.springframework.jdbc.datasource.DriveManagerDataSource
1 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 2 <property name="driverClassName"> 3 <value>${jdbc.driverClassName}</value> 4 </property> 5 <property name="url"> 6 <value>${jdbc.url}</value> 7 </property> 8 <property name="username"> 9 <value>${jdbc.username}</value> 10 </property> 11 <property name="password"> 12 <value>${jdbc.password}</value> 13 </property> 14 </bean>
说明:DriverManagerDataSource建立连接是只要能建立连接就新建一个connection,根本没有连接池的概念。
2.使用org.springframework.jndi.JndiObjectFactoryBean
1 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 2 <property name="jndiName"> 3 <value>java:comp/env/jdbc/roseindiaDB_local</value> 4 </property> 5 </bean>
说明:JndiObjectFactoryBean能够通过JNDI获取DataSource,但是这种方式需要在web服务器中配置数据源,比如在tomcat的server.xml处配置数据源。
3.使用c3p0或者dbcp的池化技术配置数据源,以下用dbcp举一个栗子。
1 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 2 <property name="driverClassName"> 3 <value>oracle.jdbc.driver.OracleDriver</value> 4 </property> 5 <property name="url"> 6 <value>jdbc:oracle:thin:@localhost:1521:orcl</value> 7 </property> 8 <property name="username"> 9 <value>test</value> 10 </property> 11 <property name="password"> 12 <value>test</value> 13 </property> 14 <property name="maxActive"> 15 <value>255</value> 16 </property> 17 <property name="maxIdle"> 18 <value>2</value> 19 </property> 20 <property name="maxWait"> 21 <value>120000</value> 22 </property> 23 </bean>
说明:这是一种推荐说明的数据源配置方式,它真正使用了连接池技术。
JDBC的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由服务器(Weblogic,WebSphere,Tomcat)提供实现,也有一些开源组织提供实现,如:DBCP数据库连接池、C3P0数据库连接池、Proxpool数据库连接池.
对象采用池化的原因:采用池化的本意是通过减少对象生成的次数,减少花在对象初始化上面的开销,从而提高整体性能。
使用数据库连接池的优点:
1)资源重用:
由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性。
2)更快的系统反应速度
数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间。
3)新的资源分配手段
对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置,实现某一应用最大可用数据库连接数的限制,避免某一应用独占所有的数据库资源。
4)统一的连接管理,避免数据库连接泄露
在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露。
相关的知识背景:
4.在Java开发中,使用JDBC操作数据库的四个步骤如下:
1)加载数据库驱动程序(class.forName("数据库驱动类"))
2)连接数据库(Connection conn=DriverManager.getConnection();)
3)操作数据库(PreparedStatement stat=con.prepareStatement(sql);stat.executeQuery();)
4)关闭数据库,释放连接(conn.close();)
c3p0和dbcp主要解决操作数据库中的con(即连接)的问题,而hibernate和myibatis解决的是sql(sql语句的问题)