zoukankan      html  css  js  c++  java
  • 通过实现ServletContextListener接口创建数据库连接池(C3P0方式)

    使用Listener步骤

    1. 定义Listener实现类

    2. 在web.xml中配置(或使用Annotation)

    使用C3P0方式创建数据库连接池需要添加的jar包

    1.c3p0-0.9.5.jar

    2.c3p0-oracle-thin-extras-0.9.5.jar

    3.mchange-commons-java-0.2.9.jar

     1 package cn.sdut.lah.listener;
     2 
     3 import java.sql.Connection;
     4 import javax.servlet.ServletContext;
     5 import javax.servlet.ServletContextEvent;
     6 import javax.servlet.ServletContextListener;
     7 
     8 import com.mchange.v2.c3p0.ComboPooledDataSource;
     9 
    10 
    11 public class GetConnListener implements ServletContextListener {
    12   
    13     //启动web应用时,该方法被调用
    14     @Override
    15     public void contextInitialized(ServletContextEvent sce) {
    16         try {
    17             // 取得应用的ServletContext实例
    18             ServletContext application = sce.getServletContext();
    19             
    20             // 从配置参数中获取驱动
    21             String driver = application.getInitParameter("driver");
    22             // 从配置参数中获取数据库url
    23             String url = application.getInitParameter("url");
    24             // 从配置参数中获取用户名
    25             String user = application.getInitParameter("user");
    26             // 从配置参数中获取密码
    27             String password = application.getInitParameter("pass");
    28             
    29             // 创建连接池实例
    30             ComboPooledDataSource cpds = new ComboPooledDataSource();
    31             // 设置连接池连接数据库所需要的驱动
    32             cpds.setDriverClass(driver);
    33             // 设置连接数据库所需的驱动
    34             cpds.setJdbcUrl(url);
    35             // 设置连接数据库的用户名
    36             cpds.setUser(user);
    37             // 设置连接数据库的密码
    38             cpds.setPassword(password);
    39             // 设置连接池的最大连接数
    40             cpds.setMaxPoolSize(40);
    41             // 设置连接池的最小连接数
    42             cpds.setMinPoolSize(2);
    43             // 设置连接池的初始连接数
    44             cpds.setInitialPoolSize(10);
    45             // 设置连接池的缓存statement最大数
    46             cpds.setMaxStatements(180);
    47 
    48             // 将DataSource设置为application范围内的属性
    49             application.setAttribute("ds", cpds);
    50             
    51         } catch (Exception e) {
    52             e.printStackTrace();
    53         }
    54 
    55     }
    56     
    57     //关闭web应用
    58     @Override
    59     public void contextDestroyed(ServletContextEvent sce) {
    60         ServletContext application = sce.getServletContext();
    61         ComboPooledDataSource ds = (ComboPooledDataSource) application
    62                 .getAttribute("ds");
    63         try {
    64             Connection conn = ds.getConnection();
    65             if (conn != null) {
    66                 conn.close();
    67             }
    68         } catch (Exception e) {
    69             e.printStackTrace();
    70         }
    71 
    72     }
    73 
    74 }

    在web.xml中配置参数

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="3.0"
     3     xmlns="http://java.sun.com/xml/ns/javaee"
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
     6     
     7   <context-param>
     8           <param-name>driver</param-name>
     9            <param-value>com.mysql.jdbc.Driver</param-value>
    10   </context-param>
    11   
    12   <context-param>
    13            <param-name>url</param-name>
    14            <param-value>jdbc:mysql://localhost:3306/javaee</param-value>
    15   </context-param>
    16   
    17   <context-param>
    18            <param-name>user</param-name>
    19            <param-value>root</param-value>
    20   </context-param>
    21    
    22   <context-param>
    23         <param-name>pass</param-name>
    24         <param-value>ab123456</param-value>
    25   </context-param>
    36   
    37   <listener>
    38       <listener-class>cn.sdut.lah.listener.GetConnListener</listener-class>
    39   </listener>  
    40   
    41 </web-app>
  • 相关阅读:
    动态代理:JDK动态代理和CGLIB代理的区别
    spring启动component-scan类扫描加载,以及@Resource,postConstruct等等注解的解析生效源码
    spring启动component-scan类扫描加载过程---源码分析
    spring源码分析之spring-core asm概述
    Spring组件扫描 <context:component-scan/>
    【OSGI】1.初识OSGI-到底什么是OSGI
    superrvisor application config ini
    doris 0.9.0版本docker镜像制作与使用
    Docker系列09:搭建Harbor本地镜像仓库
    Docker系列08:容器监控
  • 原文地址:https://www.cnblogs.com/lahblogs/p/4509088.html
Copyright © 2011-2022 走看看