1. 程式人生 > >druid數據庫連接池

druid數據庫連接池

utf-8 term patch sele required blog logs bject 視圖解析

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數據庫連接池