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>