1. 导入相关的依赖

这里将jdbc、DBCP、C3P0的包都进行了导入

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>5.0.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>5.0.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.5.0</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.5.0</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
		<dependency>
  		 	 <groupId>com.mchange</groupId>
  		  	<artifactId>c3p0</artifactId>
   			 <version>0.9.5.2</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.41</version>
		</dependency>

2.实现连接池

第一种:jdbc实现连接
这个实现也是有两种实现,一个在xml文件内实现,一个直接在类中实现

jdbc的第一种:在类中配置:

public class DbTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		DriverManagerDataSource dataSource = new DriverManagerDataSource("jdbc:mysql:///net", "root", "root");
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

		jdbcTemplate.execute("create table ad(id int(2))");
	}
}

jdbc的第二种:在xml配置文件中进行配置

<!-- 配置jdbc的连接 -->
	<bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql:///net"/>
		<property name="username" value="root"/>
		<property name="password" value="root"/>
	</bean>
	<bean name="jdbcTemplate"
		class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource" />
	</bean>

实现类进行测试

		ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
		JdbcTemplate jdbcTemplate = (JdbcTemplate) app.getBean("jdbcTemplate");
		jdbcTemplate.execute("create table ad(id int(2))");

第二种:DBCP连接池
xml文件配置

<!-- 配置dbcp的连接池 -->

<bean name="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver" />
	<property name="url" value="jdbc:mysql:///net" />
	<property name="username" value="root" />
	<property name="password" value="root" />
</bean>
<bean name="jdbcTemplate"
	class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource" ref="dataSource" />
</bean>

实现类进行测试

		ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
		JdbcTemplate jdbcTemplate = (JdbcTemplate) app.getBean("jdbcTemplate");
		jdbcTemplate.execute("create table ad(id int(2))");

第三种:C3P0连接池

<!-- 配置 c3p0连接池 -->
	<bean name="dataSource"
		class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass"
			value="com.mysql.jdbc.Driver" />
		<property name="jdbcUrl" value="jdbc:mysql:///net" />
		<property name="user" value="root" />
		<property name="password" value="root" />
	</bean>
<bean name="jdbcTemplate"
		class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource" />
	</bean>

实现类进行测试

		ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
		JdbcTemplate jdbcTemplate = (JdbcTemplate) app.getBean("jdbcTemplate");
		jdbcTemplate.execute("create table ad(id int(2))");

第四种:JNDI连接池

JNDI是基于tomcat容器的

这里介绍的是配置单个项目的(没有配置在tomcat的配置文件上,在项目上添加配置文件进行配置的)

注意:在webapp下创建一个META-INF文件夹和创建一个xml文件

这个context.xml文件配置:

<?xml version='1.0' encoding='utf-8'?>
<Context>
	<!-- name:tomcat资源中的名字(连接池中的名字) -->
	<Resource name="jdbc/spring" 
		auth="Container"
		type="javax.sql.DataSource" 
		maxActive="100" 
		maxIdle="30"
		maxWait="10000" 
		username="root" 
		password="root"
		driverClassName="com.mysql.jdbc.Driver"
		url="jdbc:mysql://localhost:3306/net" />
</Context>

applicationContext配置文件下的内容为:

<!-- tomcat jndi的连接池  相当于c3p0连接-->
	<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
       <!-- 注入jndi的名字(路径),作用是告诉spring,怎么去tomcat找到数据源对象 
		     名字由两部分组成:
            第一部分jndi的根路径:java:/comp/env
		     第二部分:jndi资源的名字jdbc/mymysql -->
		<property name="jndiName" value="java:/comp/env/jdbc/mymysql"></property>
	</bean>

   <!-- jdbc模版类 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<!-- 注入数据源  setter方式-->
		<property name="dataSource" ref="dataSource"></property>
	</bean>

因为这个JNDI是基于tomcat容器的,所以要创建servlet,启动tomcat,这里使用本地的tomcat

创建servlet,进行测试:

public class JndiTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		WebApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
		response.getWriter().append("Served at: ").append(request.getContextPath());
		JdbcTemplate jb = (JdbcTemplate) app.getBean("jdbcTemplate");
		jb.execute("create table ar(id int(2))");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

上面使用到了WebApplicationContext ,这个需要创建ApplicationContext 的监听器,

<!-- 配置spring 的核心监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- 全局参数的变量 -->
	 <context-param>
	 	<param-name>contextConfigLocation</param-name>
	 	<!-- 配置文件的位置 -->
	 	<param-value>classpath:applicationContext.xml</param-value>
	 </context-param>