原来的dao工厂:
【】数据库连接的管理模式
- 每次请求创建新的连接(dao工厂)
Connection=DriverManager.getConnection("jdbc:oracle:thin:@10.1.53.30:1521:neuedu","neusoftoa","neusoftoa");
- 连接池管理模式:
预先创建多个与数据库的连接,每个从池中取一个空闲的连接,使用后再放回池中。
【】连接池概念
连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。
【】连接池实现技术
- JavaEE Server管理的连接池:每个符合JavaEE规范的服务器都提供了连接池的管理机制。
- 各种连接池的管理框架
- Apache DBCP
- C3P0框架(性能最好的,大多数公司的)
- Spring自己管理的连接池。
- 。。。。
【】JDBC API
- DriverManager: 类。
- Connection: 接口
- PreparedStatement 接口
- ResultSet接口
- Statement接口
【】Java 连接池的API
javax.sql.DataSource 接口:
主要的方法:
Connection getConnection()
【】Tomcat管理连接池
- 通过配置xml文件创建数据库的连接池。
- 配置的文件: tomcat/conf/context.xml的<context></context>;里面添加配置语法
- 配置语法:
(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" />
- tomcat启动后,自动将连接池对象注册到内置的命名服务系统。
【】命名服务系统
- 根据对象名管理对象的一个机制。
- 访问命名服务系统使用JNDI API。
- 命名服务系统的功能:
- 注册对象。
- 查找对象。
- 注销对象。
【】JNDI (Java Naming Directory Interface)
- 功能:连接JavaEE服务器的命名服务系统。
- API: javax.naming.Context 接口: 命名系统对外提供的功能。
Javax.naming.InitialContext 实现类。
- 编程:
- 连接到命名服务系统:
Context ctx=new InitialContext();
- 查找注册的对象:
类型 对象= (类型)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)
- Spring到命名服务中查找(Tomcat)已经注册的连接池对象。
(1)旧版本模式
<bean id="dataSourceForNeusoftOA" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/neusoftoa"></property>
</bean>
- 新版的Spring,在jee空间提供了从命名服务查找对象的方法
<beans>
<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myds"/>
</beans>