第03讲 Spring管理数据库连接

本文详细介绍了Spring如何管理数据库连接,从简单的每次请求创建新连接到使用连接池技术,如Apache DBCP和C3P0。讲解了连接池的概念、Tomcat中配置连接池的方式,以及使用JNDI查找DataSource取得Connection的方法。最后,展示了Spring通过JndiObjectFactoryBean和jee:jndi-lookup标签管理数据库连接池的配置,以及C3P0连接池的详细配置案例。
摘要由CSDN通过智能技术生成

 

 

原来的dao工厂:

 

【】数据库连接的管理模式

  1. 每次请求创建新的连接(dao工厂)

 Connection=DriverManager.getConnection("jdbc:oracle:thin:@10.1.53.30:1521:neuedu","neusoftoa","neusoftoa");

  1. 连接池管理模式:

预先创建多个与数据库的连接,每个从池中取一个空闲的连接,使用后再放回池中。

 

 

【】连接池概念

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。

 

【】连接池实现技术

  1. JavaEE Server管理的连接池:每个符合JavaEE规范的服务器都提供了连接池的管理机制。
  2. 各种连接池的管理框架
  1. Apache DBCP
  2. C3P0框架(性能最好的,大多数公司的)
  3. Spring自己管理的连接池。
  4. 。。。。

【】JDBC API

  1. DriverManager: 类。
  2. Connection: 接口
  3. PreparedStatement 接口
  4. ResultSet接口
  5. Statement接口

 

 

【】Java 连接池的API

javax.sql.DataSource 接口:

主要的方法:

Connection getConnection()

 

【】Tomcat管理连接池

  1. 通过配置xml文件创建数据库的连接池。
  2. 配置的文件: tomcat/conf/context.xml的<context></context>;里面添加配置语法
  3. 配置语法:

(1)

<Resource name="jdbc/oracleds"

        author="Container"

        type="javax.sql.DataSource"

        maxActive="100"最多100个连接

        maxIdle="30"默认连接30个空闲

        maxWait="10000"超过10000,自动连接断开至30个

        username="scott"

        password="tiger"

        driverClassName="oracle.jdbc.dirver.OracleDriver"

        url="jdbc:oracle:thin:@127.0.0.1:1521:ora9" />

(2)项目用下面这个

<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver"

maxActive="2" maxIdle="1" maxWait="5000"

name="neusoftoa"

 

type="javax.sql.DataSource" url="jdbc:oracle:thin:@localhost:1521:lhd"

username="neusoftoa"

 

password="neusoft" />

 

  1. tomcat启动后,自动将连接池对象注册到内置的命名服务系统。

 

【】命名服务系统

  1. 根据对象名管理对象的一个机制。
  2. 访问命名服务系统使用JNDI API。
  3. 命名服务系统的功能:
  1. 注册对象。
  2. 查找对象。
  3. 注销对象。

【】JNDI (Java Naming Directory Interface)

  1. 功能:连接JavaEE服务器的命名服务系统。
  2. API: javax.naming.Context 接口: 命名系统对外提供的功能。

        Javax.naming.InitialContext 实现类。

  1. 编程:
  1. 连接到命名服务系统:

Context ctx=new InitialContext();

  1. 查找注册的对象:

 类型 对象= (类型)ctx.lookup(name);

 

【】使用JNDI查找DataSource取得Connection的工厂类编程

 

在工厂新建ConnectionFactoryFromJNDI类

package com.neusoft.oa.factory;

 

import java.sql.Connection;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.sql.DataSource;

public class ConnectionFactoryFromJNDI {

        

         public static Connection getConnection() throws Exception{

                 

                  Context ctx=new InitialContext();

                  DataSource ds=(DataSource)ctx.lookup("java:comp/env/neusoftoa");

                  Connection cn=ds.getConnection();

                  return cn;

         }

}

在EmployeeDaoImpl替换Connection cn=ConnectionFactory.getConnection();

Connection cn=ConnectionFactoryFromJNDI.getConnection();

 

 

connection换主动为被动:

【】Spring管理数据库连接池(DataSource)

 

  1. Spring到命名服务中查找(Tomcat)已经注册的连接池对象。

(1)旧版本模式

<bean id="dataSourceForNeusoftOA" class="org.springframework.jndi.JndiObjectFactoryBean">

           <property name="jndiName" value="java:comp/env/neusoftoa"></property>

   </bean>

  1. 新版的Spring,在jee空间提供了从命名服务查找对象的方法

<beans>

<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myds"/>

</beans>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值