druid数据库连接池

Posted 活在当下L

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了druid数据库连接池相关的知识,希望对你有一定的参考价值。

1,新建maven项目;项目结构如下

2,引入依赖包:pom.xml

  1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3   <modelVersion>4.0.0</modelVersion>
  4   <groupId>com.lizj</groupId>
  5   <artifactId>examination</artifactId>
  6   <packaging>war</packaging>
  7   <version>0.0.1-SNAPSHOT</version>
  8   <name>examination Maven Webapp</name>
  9   <url>http://maven.apache.org</url>
 10  
 11   <properties>
 12     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 13        <spring.version>3.2.13.RELEASE</spring.version>
 14     <slf4j.version>1.7.7</slf4j.version>
 15     <logback.version>1.1.2</logback.version>
 16   </properties>
 17  
 18   <dependencies>
 19     <dependency>
 20       <groupId>junit</groupId>
 21       <artifactId>junit</artifactId>
 22       <version>3.8.1</version>
 23       <scope>test</scope>
 24     </dependency>
 25     <!-- log4j start -->
 26   <dependency>
 27       <groupId>log4j</groupId>
 28       <artifactId>log4j</artifactId>
 29       <version>1.2.17</version>
 30   </dependency>
 31   <!-- log4j end -->
 32 
 33     <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
 34     <dependency>
 35         <groupId>javax.servlet</groupId>
 36         <artifactId>servlet-api</artifactId>
 37         <version>2.5</version>
 38     </dependency>
 39  
 40     <!--spring start -->
 41     <!-- spring core/beans/aop/web/webmvc begin -->
 42     <dependency>
 43         <groupId>org.springframework</groupId>
 44         <artifactId>spring-core</artifactId>
 45         <version>${spring.version}</version>
 46     </dependency>
 47     <dependency>
 48         <groupId>org.springframework</groupId>
 49         <artifactId>spring-beans</artifactId>
 50         <version>${spring.version}</version>
 51     </dependency>
 52         <dependency>
 53         <groupId>org.springframework</groupId>
 54         <artifactId>spring-web</artifactId>
 55         <version>${spring.version}</version>
 56     </dependency>
 57     <dependency>
 58         <groupId>org.springframework</groupId>
 59         <artifactId>spring-webmvc</artifactId>
 60         <version>${spring.version}</version>
 61     </dependency>
 62     <dependency>
 63         <groupId>org.springframework</groupId>
 64         <artifactId>spring-jdbc</artifactId>
 65         <version>${spring.version}</version>
 66     </dependency>
 67     <dependency>
 68         <groupId>org.springframework</groupId>
 69         <artifactId>spring-context</artifactId>
 70         <version>${spring.version}</version>
 71     </dependency>
 72     <dependency>
 73         <groupId>org.springframework</groupId>
 74         <artifactId>spring-aop</artifactId>
 75         <version>${spring.version}</version>
 76     </dependency>
 77     <dependency>
 78         <groupId>org.springframework</groupId>
 79         <artifactId>spring-tx</artifactId>
 80         <version>${spring.version}</version>
 81     </dependency>
 82     <dependency>
 83         <groupId>org.springframework</groupId>
 84         <artifactId>spring-orm</artifactId>
 85         <version>${spring.version}</version>
 86     </dependency>
 87     
 88     <dependency>
 89         <groupId>org.springframework</groupId>
 90         <artifactId>spring-context-support</artifactId>
 91         <version>${spring.version}</version>
 92     </dependency>
 93     
 94     <dependency>
 95         <groupId>org.springframework</groupId>
 96         <artifactId>spring-expression</artifactId>
 97         <version>${spring.version}</version>
 98     </dependency>
 99     
100     <dependency>
101         <groupId>org.springframework</groupId>
102         <artifactId>spring-aspects</artifactId>
103         <version>${spring.version}</version>
104     </dependency>
105     <dependency>
106         <groupId>org.springframework</groupId>
107         <artifactId>spring-test</artifactId>
108         <version>${spring.version}</version>
109     </dependency>
110 
111     <dependency>
112         <groupId>org.aspectj</groupId>
113         <artifactId>aspectjrt</artifactId>
114         <version>1.8.6</version>
115     </dependency>
116 
117     <dependency>
118         <groupId>org.aspectj</groupId>
119         <artifactId>aspectjweaver</artifactId>
120         <version>1.8.6</version>
121     </dependency>
122 
123     <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
124     <dependency>
125         <groupId>commons-logging</groupId>
126         <artifactId>commons-logging</artifactId>
127         <version>1.1.3</version>
128     </dependency>
129     <!--spring end -->
130     
131       <!-- druid start -->    
132     <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
133     <dependency>
134         <groupId>com.alibaba</groupId>
135         <artifactId>druid</artifactId>
136         <version>1.0.27</version>
137     </dependency>
138     <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
139     <dependency>
140         <groupId>org.slf4j</groupId>
141         <artifactId>slf4j-log4j12</artifactId>
142         <version>1.7.9</version>
143     </dependency>
144     <!-- druid end -->    
145         <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
146     <dependency>
147         <groupId>mysql</groupId>
148         <artifactId>mysql-connector-java</artifactId>
149         <version>5.1.40</version>
150     </dependency>
151     <!-- spring start -->
152     
153     <!-- 日志监控数据库连接池 -->
154     <dependency>
155         <groupId>org.slf4j</groupId>
156         <artifactId>slf4j-api</artifactId>
157         <version>${slf4j.version}</version>
158     </dependency>
159     <dependency>
160         <groupId>ch.qos.logback</groupId>
161         <artifactId>logback-access</artifactId>
162         <version>${logback.version}</version>
163     </dependency>
164     <dependency>
165         <groupId>ch.qos.logback</groupId>
166         <artifactId>logback-core</artifactId>
167         <version>${logback.version}</version>
168     </dependency>
169     <dependency>
170         <groupId>ch.qos.logback</groupId>
171         <artifactId>logback-classic</artifactId>
172         <version>${logback.version}</version>
173     </dependency>
174     <!-- 日志监控数据库连接池 -->
175     
176     <!-- javaee web应用包 begin -->
177     <dependency>
178         <groupId>javax.servlet.jsp</groupId>
179         <artifactId>jsp-api</artifactId>
180         <version>2.1</version>
181         <scope>provided</scope>
182     </dependency>
183     <dependency>
184         <groupId>javax.servlet</groupId>
185         <artifactId>jstl</artifactId>
186         <version>1.2</version>
187         <scope>provided</scope>
188     </dependency>
189     <dependency>
190         <groupId>taglibs</groupId>
191         <artifactId>standard</artifactId>
192         <version>1.1.2</version>
193         <scope>provided</scope>
194     </dependency>
195     <!-- web应用包 end -->
196     
197   </dependencies>
198   <build>
199     <finalName>examination</finalName>
200   </build>
201 </project>
View Code

  3,配置:web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!-- 配置前端控制器 -->
  <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--加载前端控制器配置文件 上下文配置位置-->
        <init-param>
             <!-- contextConfigLocation:指定springmvc配置的加载位置,如果不指定则默认加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml(例如springmvc-servlet.xml)。 -->
             <param-name>contextConfigLocation</param-name>
             <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        <!-- 表示随WEB服务器启动 -->
        <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
       <servlet-name>springmvc</servlet-name>
        <!-- 备注:可以拦截三种请求
         第一种:拦截固定后缀的url,比如设置为 *.do、*.action,例如:/user/add.action 此方法最简单,不会导致静态资源(jpg,js,css)被拦截.
         第二种:拦截所有,设置为/,例如:/user/add /user/add.action此方法可以实现REST风格的url,
                  很多互联网类型的应用使用这种方式.但是此方法会导致静态文件(jpg,js,css)被拦截后不能正常显示.需要特殊处理.
         第三种:拦截所有,设置为/*,此设置方法错误,因为请求到Action,当action转到jsp时再次被拦截,提示不能根据jsp路径mapping成功. -->
       <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
View Code

 4,applicationContext.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "/WEB-INF/dtd/spring-beans-2.0.dtd">
3 <beans>
4     <import resource="datasource-spring.xml" />
5     <!-- servicemvc -->    
6     <import resource="springmvc.xml" />
7     <!-- spring -->    
8     <import resource="spring.xml" />
9 </beans> 
View Code

 5,jdbc.properties

1 jdbc.driverClassName=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql://127.0.0.1:3306/yun
3 jdbc.username=root
4 jdbc.password=root
View Code

 6,datasource-spring.xml

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <beans xmlns="http://www.springframework.org/schema/beans"
  3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  4     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
  5     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
  6     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7                         http://www.springframework.org/schema/beans/spring-beans.xsd  
  8                         http://www.springframework.org/schema/context  
  9                         http://www.springframework.org/schema/context/spring-context.xsd  
 10                         http://www.springframework.org/schema/tx
 11                         http://www.springframework.org/schema/tx/spring-tx.xsd
 12                         http://www.springframework.org/schema/aop
 13                           http://www.springframework.org/schema/aop/spring-aop.xsd
 14                         http://www.springframework.org/schema/mvc  
 15                         http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 16 
 17     <aop:aspectj-autoproxy />
 18 
 19     <tx:annotation-driven />
 20 <!-- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "/WEB-INF/dtd/spring-beans-2.0.dtd"> -->
 21 <!-- <beans> -->
 22     <bean id="propertyConfigure"
 23         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 24         <property name="locations">
 25             <list>
 26                 <value>classpath*:jdbc.properties</value>
 27             </list>
 28         </property>
 29     </bean>
 30 
 31     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
 32         init-method="init" destroy-method="close">
 33         <property name="driverClassName" value="${jdbc.driverClassName}" />
 34         <property name="url" value="${jdbc.url}" />
 35         <property name="username" value="${jdbc.username}" />
 36         <property name="password" value="${jdbc.password}" />
 37         <!-- 配置初始化大小、最小、最大 -->
 38         <property name="initialSize" value="1" />
 39         <property name="minIdle" value="1" />
 40         <property name="maxActive" value="10" />
 41 
 42         <!-- 配置获取连接等待超时的时间 10秒 -->
 43         <property name="maxWait" value="10000" />
 44 
 45         <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
 46         <property name="timeBetweenEvictionRunsMillis" value="60000" />
 47 
 48         <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
 49         <property name="minEvictableIdleTimeMillis" value="300000" />
 50 
 51         <property name="testWhileIdle" value="true" />
 52 
 53         <!-- 这里建议配置为TRUE,防止取到的连接不可用 -->
 54         <property name="testOnBorrow" value="true" />
 55         <property name="testOnReturn" value="false" />
 56 
 57         <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
 58         <property name="poolPreparedStatements" value="true" />
 59         <property name="maxPoolPreparedStatementPerConnectionSize"
 60             value="20" />
 61 
 62         <!-- 这里配置提交方式,默认就是TRUE,可以不用配置 -->
 63 
 64         <property name="defaultAutoCommit" value="true" />
 65 
 66         <!-- 验证连接有效与否的SQL,不同的数据配置不同 -->
 67         <property name="validationQuery" value="select 1 from dual " />
 68         <property name="filters" value="log4j" />
 69         <property name="proxyFilters">
 70             <list>
 71                 <!-- web 监控方式 -->
 72                 <!-- <ref bean="stat-filter" /> -->
 73                 <!-- 日志文件监控方式 -->
 74                 <ref bean="logFilter" />
 75             </list>
 76         </property>
 77     </bean>
 78 
 79     <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
 80         <property name="mergeSql" value="true" />
 81         <property name="slowSqlMillis" value="10000" />
 82         <property name="logSlowSql" value="true" />
 83     </bean>
 84 
 85     <bean id="logFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
 86         <property name="statementExecutableSqlLogEnable" value="false" />
 87     </bean>
 88     
 89     <!-- jdbc事务管理器 -->
 90     <bean id="transactionManager"
 91         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 92         <property name="dataSource">
 93             <ref bean="dataSource" />
 94         </property>
 95     </bean>
 96 <!-- 配置事物传播特性,(REQUIRED)是否存在事务,不存在则创建一个事务 -->
 97  <tx:advice id="txAdvice" transaction-manager="transactionManager">
 98         <tx:attributes>
 99             <tx:method name="save*" propagation="REQUIRED" />
100             <tx:method name="add*" propagation="REQUIRED" />
101             <tx:method name="create*" propagation="REQUIRED" />
102             <tx:method name="insert*" propagation="REQUIRED" />
103             <tx:method name="update*" propagation="REQUIRED" />
104             <tx:method name="merge*" propagation="REQUIRED" />
105             <tx:method name="del*" propagation="REQUIRED" />
106             <tx:method name="remove*" propagation="REQUIRED" />
107             <tx:method name="query*" read-only="true"/>
108             <tx:method name="use*" read-only="true"/>
109             <tx:method name="get*" read-only="true" />
110             <tx:method name="count*" read-only="true" />
111             <tx:method name="find*" read-only="true" />
112             <tx:method name="list*" read-only="true" />
113             <tx:method name="*" propagation="REQUIRED"/>
114         </tx:attributes>
115     </tx:advice>
116     
117     <!-- 切面,配置参与事务的类 -->
118     <aop:config >
119         <aop:pointcut id="allMethod" expression="execution(* com.datasource.service.impl.*.*(..))" />
120 <!--         <aop:pointcut id="mqserviceMethod" expression="execution(* com.midea.plms.*.mqservice.*.*(..))" /> -->
121 <!--         <aop:pointcut id="hessianMethod" expression="execution(* com.midea.plms.*.hessain.impl.*.*(..))" /> -->
122         
123         <aop:advisor advice-ref="txAdvice" pointcut-ref="allMethod" />
124 <!--         <aop:advisor advice-ref="txAdvice" pointcut-ref="mqserviceMethod" /> -->
125 <!--         <aop:advisor advice-ref="txAdvice" pointcut-ref="hessianMethod" /> -->
126         
127         <!-- <aop:aspect order="-2147483648" ref="readWriteDataSourceTransactionProcessor">
128            <aop:around pointcut-ref="allMethod" method="determineReadOrWriteDB"/>
129         </aop:aspect>
130         <aop:aspect order="-2147483647" ref="readWriteDataSourceTransactionProcessor">
131            <aop:around pointcut-ref="mqserviceMethod" method="determineReadOrWriteDB"/>
132         </aop:aspect>
133          <aop:aspect order="-2147483646" ref="readWriteDataSourceTransactionProcessor">
134            <aop:around pointcut-ref="hessianMethod" method="determineReadOrWriteDB"/>
135         </aop:aspect> -->
136     </aop:config>
137     
138     <!-- spring jdbc -->
139     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
140         <property name="dataSource">
141             <ref bean="dataSource" />
142         </property>
143     </bean> 
144 </beans> 
View Code

  7,spring.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "/WEB-INF/dtd/spring-beans-2.0.dtd">
 3 <beans>
 4     <bean id="addTestOperator" class="com.datasource.operator.AddTestOperator">
 5         <property name="testService">
 6             <ref bean="testService" />
 7         </property>
 8     </bean>
 9     
10     <bean id="testService" class="com.datasource.service.TestServiceImp">
11         <property name="testDao">
12             <ref bean="testDao" />
13         </property>
14     </bean>
15     
16     <bean id="testDao" class="com.datasource.dao.TestDao">
17         <property name="jdbcTemplate">
18             <ref bean="jdbcTemplate" />
19         </property>
20     </bean>
21 </beans> 
View Code

 8,springmvc.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans
 6        http://www.springframework.org/schema/beans/spring-beans.xsd
 7        http://www.springframework.org/schema/context
 8        http://www.springframework.org/schema/context/spring-context.xsd
 9        http://www.springframework.org/schema/tx
10        http://www.springframework.org/schema/tx/spring-tx.xsd
11           http://www.springframework.org/schema/mvc
12        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
13     <!-- 配置扫描的包 -->
14     <context:component-scan base-package="com.lizj" />
15 
16     <!-- 注册HandlerMapper、HandlerAdapter两个映射类 无需配置,默认使用默认的处理    -->
17     <!-- 扩充了注解驱动,可以将请求参数绑定到控制器参数 -->
18     <mvc:annotation-driven />
19 
20     <!-- 访问静态资源 -->
21     <mvc:default-servlet-handler />
22     
23     <!-- 视图解析器   <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> -->
24     <bean
25         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
26         <property name="prefix" value="/view/"></property>
27         <property name="suffix" value=".jsp"></property>
28     </bean> 
29 </beans>  
View Code

 9,后台测试:

 1 private JdbcTemplate jdbcTemplate;
 2     
 3     
 4     public JdbcTemplate getJdbcTemplate() {
 5         return jdbcTemplate;
 6     }
 7 
 8     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
 9         this.jdbcTemplate = jdbcTemplate;
10     }
11 
12     public int addStudent(){
13         String sql = "INSERT INTO STUDENT(id,name,age) VALUES(?,?,?)";
14         List<Object> list = new ArrayList<Object>();
15         list.add(99);
16         list.add("3737");
17         list.add("22111");
18         return jdbcTemplate.update(sql, list.toArray());
19     }
20 
21 TestService:
22 
23 void addTest();
24 
25 AddTestOperator:
26 
27     Logger log = Logger.getLogger(getClass());
28     
29     private TestService testService;
30     
31     public TestService getTestService() {
32         return testService;
33     }
34 
35     public void setTestService(TestService testService) {
36         this.testService = testService;
37     }
38 
39     public void addTest(){
40         log.info("AddTestOperator.addTest");
41         testService.addTest(); 
42     }
43 
44 TestServiceImp:
45 
46     Logger log = Logger.getLogger(getClass());
47     
48     private TestDao testDao;
49 
50     public TestDao getTestDao() {
51         return testDao;
52     }
53 
54     public void setTestDao(TestDao testDao) {
55         this.testDao = testDao;
56     }
57 
58     public void addTest() {
59         log.info(getClass()+".addTest");
60         int i = testDao.addStudent();
61         System.out.println(i);
62     }
View Code

测试:JunitTest

 @Test
    public void addStudent(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        AddTestOperator AddTestOperator = (com.datasource.operator.AddTestOperator) context.getBean("addTestOperator");
        AddTestOperator.addTest();
    }
View Code

 

以上是关于druid数据库连接池的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot整合Druid数据连接池

Druid数据库连接池使用

Druid数据库连接池使用

Springboot集成druid数据库连接池

分布式 关于 druid 连接池参数问题

druid数据库连接池啥时候释放