Maven+Spirng+SpringMVC+Mybatis+MySQL+Log4j+Junit项目配置

这是本人第一次写文章,难免有些疏漏,欢迎大家指正。近期完成了一个项目demo,发现项目框架搭建真的是很耗时的事,因此记录了这篇文章。

本人用的是intellij idea,用IDE创建maven项目就不再赘述了,有兴趣的童鞋请自行百度。

1、项目文件结构

2、编辑pom文件

PS:maven插件tomcat7-maven-plugin可以直接用maven命令运行项目,无需配置本地tomcat服务器;具体运行方式会在下一篇文章中介绍。

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4     <modelVersion>4.0.0</modelVersion>
  5     <groupId>MyPrj</groupId>
  6     <artifactId>MyPrj</artifactId>
  7     <version>1.0.0-SNAPSHOT</version>
  8     <packaging>war</packaging>
  9     <name>MyPrj</name>
 10     <!--统一配置jar包版本-->
 11     <properties>
 12         <springmvc-version>4.3.0.RELEASE</springmvc-version>
 13         <commons.lang3.version>3.3.2</commons.lang3.version>
 14         <slf4j.version>1.7.6</slf4j.version>
 15         <log4j.version>1.2.17</log4j.version>
 16         <jackson.version>2.7.4</jackson.version>
 17         <pagehelper.version>5.0.3-beta</pagehelper.version>
 18     </properties>
 19     <!--项目所需jar包-->
 20     <dependencies>
 21         <!--单元测试依赖包-->
 22         <dependency>
 23             <groupId>junit</groupId>
 24             <artifactId>junit</artifactId>
 25             <version>4.12</version>
 26             <scope>test</scope>
 27         </dependency>
 28         <dependency>
 29             <groupId>javax.servlet</groupId>
 30             <artifactId>jstl</artifactId>
 31             <version>1.2</version>
 32         </dependency>
 33         <dependency>
 34             <groupId>javax.servlet</groupId>
 35             <artifactId>javax.servlet-api</artifactId>
 36             <version>3.0.1</version>
 37             <scope>provided</scope>
 38         </dependency>
 39         <!--spring mvc depend jars begin -->
 40         <dependency>
 41             <groupId>aopalliance</groupId>
 42             <artifactId>aopalliance</artifactId>
 43             <version>1.0</version>
 44         </dependency>
 45         <dependency>
 46             <groupId>commons-logging</groupId>
 47             <artifactId>commons-logging</artifactId>
 48             <version>1.2</version>
 49         </dependency>
 50         <dependency>
 51             <groupId>org.springframework</groupId>
 52             <artifactId>spring-aop</artifactId>
 53             <version>${springmvc-version}</version>
 54         </dependency>
 55         <dependency>
 56             <groupId>org.springframework</groupId>
 57             <artifactId>spring-aspects</artifactId>
 58             <version>${springmvc-version}</version>
 59         </dependency>
 60         <dependency>
 61             <groupId>org.springframework</groupId>
 62             <artifactId>spring-beans</artifactId>
 63             <version>${springmvc-version}</version>
 64         </dependency>
 65         <dependency>
 66             <groupId>org.springframework</groupId>
 67             <artifactId>spring-context</artifactId>
 68             <version>${springmvc-version}</version>
 69         </dependency>
 70         <dependency>
 71             <groupId>org.springframework</groupId>
 72             <artifactId>spring-context-support</artifactId>
 73             <version>${springmvc-version}</version>
 74         </dependency>
 75         <dependency>
 76             <groupId>org.springframework</groupId>
 77             <artifactId>spring-core</artifactId>
 78             <version>${springmvc-version}</version>
 79         </dependency>
 80         <dependency>
 81             <groupId>org.springframework</groupId>
 82             <artifactId>spring-expression</artifactId>
 83             <version>${springmvc-version}</version>
 84         </dependency>
 85         <dependency>
 86             <groupId>org.springframework</groupId>
 87             <artifactId>spring-instrument</artifactId>
 88             <version>${springmvc-version}</version>
 89         </dependency>
 90         <dependency>
 91             <groupId>org.springframework</groupId>
 92             <artifactId>spring-instrument-tomcat</artifactId>
 93             <version>${springmvc-version}</version>
 94         </dependency>
 95         <dependency>
 96             <groupId>org.springframework</groupId>
 97             <artifactId>spring-jdbc</artifactId>
 98             <version>${springmvc-version}</version>
 99         </dependency>
100         <dependency>
101             <groupId>org.springframework</groupId>
102             <artifactId>spring-jms</artifactId>
103             <version>${springmvc-version}</version>
104         </dependency>
105         <dependency>
106             <groupId>org.springframework</groupId>
107             <artifactId>spring-messaging</artifactId>
108             <version>${springmvc-version}</version>
109         </dependency>
110         <dependency>
111             <groupId>org.springframework</groupId>
112             <artifactId>spring-orm</artifactId>
113             <version>${springmvc-version}</version>
114         </dependency>
115         <dependency>
116             <groupId>org.springframework</groupId>
117             <artifactId>spring-oxm</artifactId>
118             <version>${springmvc-version}</version>
119         </dependency>
120         <dependency>
121             <groupId>org.springframework</groupId>
122             <artifactId>spring-test</artifactId>
123             <version>${springmvc-version}</version>
124             <scope>test</scope>
125         </dependency>
126         <dependency>
127             <groupId>org.springframework</groupId>
128             <artifactId>spring-tx</artifactId>
129             <version>${springmvc-version}</version>
130         </dependency>
131         <dependency>
132             <groupId>org.springframework</groupId>
133             <artifactId>spring-web</artifactId>
134             <version>${springmvc-version}</version>
135         </dependency>
136         <dependency>
137             <groupId>org.springframework</groupId>
138             <artifactId>spring-websocket</artifactId>
139             <version>${springmvc-version}</version>
140         </dependency>
141         <dependency>
142             <groupId>org.springframework</groupId>
143             <artifactId>spring-webmvc</artifactId>
144             <version>${springmvc-version}</version>
145         </dependency>
146         <dependency>
147             <groupId>org.springframework</groupId>
148             <artifactId>spring-webmvc-portlet</artifactId>
149             <version>${springmvc-version}</version>
150         </dependency>
151         <!--spring mvc depend jars end -->
152 
153         <!-- ssm or ssh need spring jar -->
154         <!-- 添加mybatis的核心包 -->
155         <dependency>
156             <groupId>org.mybatis</groupId>
157             <artifactId>mybatis</artifactId>
158             <version>3.3.0</version>
159         </dependency>
160         <!-- 添加mybatis与Spring整合的核心包 -->
161         <dependency>
162             <groupId>org.mybatis</groupId>
163             <artifactId>mybatis-spring</artifactId>
164             <version>1.2.2</version>
165         </dependency>
166         <!-- mysql驱动包 -->
167         <dependency>
168             <groupId>mysql</groupId>
169             <artifactId>mysql-connector-java</artifactId>
170             <version>5.1.8</version>
171         </dependency>
172         <dependency>
173             <groupId>c3p0</groupId>
174             <artifactId>c3p0</artifactId>
175             <version>0.9.1.2</version>
176         </dependency>
177         <dependency>
178             <groupId>net.sf.ehcache</groupId>
179             <artifactId>ehcache-core</artifactId>
180             <version>2.5.3</version>
181         </dependency>
182         <dependency>
183             <groupId>org.mybatis.caches</groupId>
184             <artifactId>mybatis-ehcache</artifactId>
185             <version>1.1.0</version>
186         </dependency>
187         <!---sitemesh pom-->
188         <dependency>
189             <groupId>org.sitemesh</groupId>
190             <artifactId>sitemesh</artifactId>
191             <version>3.0.0</version>
192         </dependency>
193 
194         <dependency>
195             <groupId>org.apache.commons</groupId>
196             <artifactId>commons-lang3</artifactId>
197             <version>${commons.lang3.version}</version>
198         </dependency>
199 
200         <dependency>
201             <groupId>commons-beanutils</groupId>
202             <artifactId>commons-beanutils</artifactId>
203             <version>1.6</version>
204         </dependency>
205 
206         <dependency>
207             <groupId>commons-collections</groupId>
208             <artifactId>commons-collections</artifactId>
209             <version>3.2.2</version>
210         </dependency>
211 
212 
213         <dependency>
214             <groupId>com.google.guava</groupId>
215             <artifactId>guava</artifactId>
216             <version>15.0</version>
217         </dependency>
218 
219         <dependency>
220             <groupId>net.sf.json-lib</groupId>
221             <artifactId>json-lib</artifactId>
222             <version>2.4</version>
223             <classifier>jdk15</classifier>
224         </dependency>
225 
226         <!-- logging BEGIN -->
227         <dependency>
228             <groupId>log4j</groupId>
229             <artifactId>log4j</artifactId>
230             <version>${log4j.version}</version>
231         </dependency>
232         <dependency>
233             <groupId>org.slf4j</groupId>
234             <artifactId>slf4j-api</artifactId>
235             <version>${slf4j.version}</version>
236         </dependency>
237         <dependency>
238             <groupId>org.slf4j</groupId>
239             <artifactId>slf4j-log4j12</artifactId>
240             <version>${slf4j.version}</version>
241         </dependency>
242 
243         <!--json-->
244         <dependency>
245             <groupId>com.fasterxml.jackson.core</groupId>
246             <artifactId>jackson-databind</artifactId>
247             <version>${jackson.version}</version>
248         </dependency>
249 
250         <dependency>
251             <groupId>com.github.pagehelper</groupId>
252             <artifactId>pagehelper</artifactId>
253             <version>${pagehelper.version}</version>
254         </dependency>
255     </dependencies>
256     <!--项目构建-->
257     <build>
258         <!--项目打包之后的名称-->
259         <finalName>MyPrj</finalName>
260         <!--构建需要的插件-->
261         <plugins>
262             <!--编译插件-->
263             <plugin>
264                 <groupId>org.apache.maven.plugins</groupId>
265                 <artifactId>maven-compiler-plugin</artifactId>
266                 <version>3.1</version>
267                 <configuration>
268                     <source>1.8</source>
269                     <target>1.8</target>
270                 </configuration>
271             </plugin>
272 
273             <!-- 本地tomcat7插件 -->
274             <plugin>
275                 <groupId>org.apache.tomcat.maven</groupId>
276                 <artifactId>tomcat7-maven-plugin</artifactId>
277                 <version>2.1</version>
278                 <configuration>
279                     <path>/</path>
280                     <uriEncoding>UTF-8</uriEncoding>
281                     <port>8888</port>
282                 </configuration>
283             </plugin>
284         </plugins>
285     </build>
286 </project>
pom文件

 3、MyBatis配置及数据源配置

1)MyBatis配置:src-resources-mybatis下创建mybatis-config.xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd">
 3 <configuration>
 4     <!--数据库配置-->
 5     <properties>
 6         <property name="dialect" value="mysql" />
 7     </properties>
 8 
 9     <settings>
10         <!--支持属性运用驼峰的命名-->
11         <setting name="mapUnderscoreToCamelCase" value="true"/>
12         <!--指定log4j提供日志功能-->
13         <setting name="logImpl" value="LOG4J"/>
14     </settings>
15 </configuration>
mybatis-config.xml 

2)数据源配置:

src-resources-properties创建jdbc.properties文件

src-resources-spring创建applicationContext-datasource.xml文件

 1 driverClass=com.mysql.jdbc.Driver
 2 jdbcUrl=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8
 3 user=root
 4 password=123456
 5 minPoolSize=5
 6 maxPoolSize=200
 7 initialPoolSize=10
 8 maxIdleTime=60
 9 acquireIncrement=5
10 maxStatements=0
11 idleConnectionTestPeriod=60
12 acquireRetryAttempts=30
13 breakAfterAcquireFailure=true
14 testConnectionOnCheckout=false
jdbc.properties
  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"
  4      xmlns:aop="http://www.springframework.org/schema/aop"
  5      xmlns:tx="http://www.springframework.org/schema/tx"
  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/aop 
  9         http://www.springframework.org/schema/aop/spring-aop.xsd
 10         http://www.springframework.org/schema/tx  
 11         http://www.springframework.org/schema/tx/spring-tx.xsd">
 12 
 13 
 14     <!--引入配置文件-->
 15     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 16         <property name="locations">
 17             <list>
 18                 <value>classpath:properties/*.properties</value>
 19                 <!--要是有多个配置文件,只需在这里继续添加即可 -->
 20             </list>
 21         </property>
 22     </bean>
 23 
 24     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
 25         <property name="driverClass">
 26             <value>${driverClass}</value>
 27         </property>
 28         <property name="jdbcUrl">
 29             <value>${jdbcUrl}</value>
 30         </property>
 31         <!--MySQL数据库的用户名 -->
 32         <property name="user">
 33             <value>${user}</value>
 34         </property>
 35         <!--MySQL数据库 密码 -->
 36         <property name="password">
 37             <value>${password}</value>
 38         </property>
 39         <!--连接池中保留的最小连接数。-->
 40         <property name="minPoolSize">
 41             <value>${minPoolSize}</value>
 42         </property>
 43         <!--连接池中保留的最大连接数。Default: 15 -->
 44         <property name="maxPoolSize">
 45             <value>${maxPoolSize}</value>
 46         </property>
 47         <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
 48         <property name="initialPoolSize">
 49             <value>${initialPoolSize}</value>
 50         </property>
 51         <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
 52         <property name="maxIdleTime">
 53             <value>${maxIdleTime}</value>
 54         </property>
 55         <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
 56         <property name="acquireIncrement">
 57             <value>${acquireIncrement}</value>
 58         </property>
 59         <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的
 60         statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面
 61         的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
 62         <property name="maxStatements">
 63             <value>${maxStatements}</value>
 64         </property>
 65         <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
 66         <property name="idleConnectionTestPeriod">
 67             <value>${idleConnectionTestPeriod}</value>
 68         </property>
 69         <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
 70         <property name="acquireRetryAttempts">
 71             <value>${acquireRetryAttempts}</value>
 72         </property>
 73         <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
 74         保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
 75         获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
 76         <property name="breakAfterAcquireFailure">
 77             <value>${breakAfterAcquireFailure}</value>
 78         </property>
 79         <!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
 80                 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
 81                 等方法来提升连接测试的性能。Default: false -->
 82         <property name="testConnectionOnCheckout">
 83             <value>${testConnectionOnCheckout}</value>
 84         </property>
 85     </bean>
 86     <!-- spring管理事务 -->
 87     <bean id="txManager"
 88         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 89         <property name="dataSource" ref="dataSource" />
 90     </bean>
 91     <!-- Spring的声明式事务管理 -->
 92     <!-- 设置与事务有关的各种属性 -->
 93     <tx:advice id="txAdvice" transaction-manager="txManager">
 94         <tx:attributes>
 95             <tx:method name="insert*" propagation="REQUIRED"
 96                 rollback-for="Exception" />
 97             <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />
 98             <tx:method name="update*" propagation="REQUIRED"
 99                 rollback-for="Exception" />
100             <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception" />
101             <tx:method name="*" read-only="false" />
102         </tx:attributes>
103     </tx:advice>
104 </beans>
applicationContext-datasource.xml

 4、Spring配置

1)spring基本配置:src-resources-spring创建applicationContext-context.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:mvc="http://www.springframework.org/schema/mvc" 
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5     xmlns:context="http://www.springframework.org/schema/context" 
 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/aop 
 9         http://www.springframework.org/schema/aop/spring-aop.xsd
10         http://www.springframework.org/schema/mvc 
11         http://www.springframework.org/schema/mvc/spring-mvc.xsd
12         http://www.springframework.org/schema/context
13         http://www.springframework.org/schema/context/spring-context.xsd">
14     <!-- 全局context类配置 -->
15     <!--对静态资源文件的访问:所有URL请求都将被Spring MVC的DispatcherServlet截获,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理-->
16     <mvc:default-servlet-handler />
17     <!-- 激活自动代理功能 -->
18     <aop:aspectj-autoproxy proxy-target-class="true" />
19     <!-- 启动注解扫描 -->
20     <mvc:annotation-driven />
21     <context:component-scan base-package="chin"></context:component-scan>
22     <!-- start视图配置 -->
23     <bean id="viewResolver"
24         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
25         <property name="prefix">
26             <value>/WEB-INF/view/</value>
27         </property>
28         <property name="suffix">
29             <value>.jsp</value>
30         </property>
31         <property name="viewClass">
32             <value>org.springframework.web.servlet.view.JstlView</value>
33         </property>
34     </bean>
35     <!-- end视图配置 -->
36 </beans>
spring-context.xml

 2)spring整合mybatis配置:src-resources-spring创建applicationContext-mybatis.xml文件

PS:MyBatis拦截器用于打印MyBatis的SQL执行时间;代码会后续贴出来。

 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"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans
 5         http://www.springframework.org/schema/beans/spring-beans.xsd
 6         ">
 7     <!-- 通过扫描的模式,自动注入bean -->
 8     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 9         <property name="basePackage" value="chin.dao" />
10         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
11     </bean>
12 
13 
14     <!-- 配置sqlSessionFactory -->
15     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
16         <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
17         <property name="dataSource" ref="dataSource" />
18         <!-- 如果 Mapper 和 xml 不在同一目录或名称不同,需要用多个路径,分隔不行 -->
19         <property name="mapperLocations">
20             <list>
21                 <value>classpath:mapper/**/*Mapper.xml</value>
22             </list>
23         </property>
24         <property name="typeAliasesPackage" value="chin.entity"/>
25 
26         <!--MyBatis拦截器,用于记录sql执行时间-->
27         <property name="plugins">
28             <array>
29                 <bean id="sqlStatementInterceptor" class="chin.interceptor.SqlStatementInterceptor"/>
30             </array>
31         </property>
32     </bean>
33     <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
34         <constructor-arg index="0" ref="sqlSessionFactory" />
35     </bean>
36 </beans>
applicationContext-mybatis.xml 

 5、项目web.xml配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee           http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 4          version="3.0">
 5     <display-name>MyPrj 3.0 Web Application</display-name>
 6     <!-- 起始欢迎界面 -->
 7     <welcome-file-list>
 8         <welcome-file>index.jsp</welcome-file>
 9         <welcome-file>index.html</welcome-file>
10     </welcome-file-list>
11     <!--siteMesh 控制器 -->
12     <filter>
13         <filter-name>sitemesh</filter-name>
14         <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class>
15     </filter>
16     <filter-mapping>
17         <filter-name>sitemesh</filter-name>
18         <url-pattern>/*</url-pattern>
19     </filter-mapping>
20     <!-- spring 装载xml文件-->
21     <listener>
22         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
23     </listener>
24     <context-param>
25         <param-name>contextConfigLocation</param-name>
26         <param-value>classpath:spring/applicationContext-*.xml</param-value>
27     </context-param>
28     <context-param>
29         <param-name>spring.liveBeansView.mbeanDomain</param-name>
30         <param-value>dev</param-value>
31     </context-param>
32 
33     <!-- Spring字符集过滤器 -->
34     <filter>
35         <filter-name>characterEncodingFilter</filter-name>
36         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
37         <init-param>
38             <param-name>encoding</param-name>
39             <param-value>UTF-8</param-value>
40         </init-param>
41         <init-param>
42             <param-name>forceEncoding</param-name>
43             <param-value>true</param-value>
44         </init-param>
45     </filter>
46     <filter-mapping>
47         <filter-name>characterEncodingFilter</filter-name>
48         <url-pattern>/*</url-pattern>
49     </filter-mapping>
50 
51     <!--通过容器来处理静态资源文件-->
52     <servlet-mapping>
53         <servlet-name>default</servlet-name>
54         <url-pattern>/static/*</url-pattern>
55     </servlet-mapping>
56 
57     <!-- springMVC核心配置 -->
58     <servlet>
59         <servlet-name>DispatcherServlet</servlet-name>
60         <!--在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,生成文件中定义的bean。-->
61         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
62         <!--指明了配置文件的文件名,不使用默认配置文件名,而使用dispatcher-servlet.xml配置文件。-->
63         <init-param>
64             <param-name>contextConfigLocation</param-name>
65             <!--其中<param-value>**.xml</param-value> 这里可以使用多种写法-->
66             <!--1、不写,使用默认值:/WEB-INF/<servlet-name>-servlet.xml-->
67             <!--2、<param-value>/WEB-INF/classes/dispatcher-servlet.xml</param-value>-->
68             <!--3、<param-value>classpath*:dispatcher-servlet.xml</param-value>-->
69             <!--4、多个值用逗号分隔-->
70             <param-value>classpath:spring/spring-context.xml</param-value>
71         </init-param>
72         <load-on-startup>1</load-on-startup><!--是启动顺序,让这个Servlet随Servletp容器一起启动。-->
73     </servlet>
74     <servlet-mapping>
75         <!--这个Servlet的名字是dispatcher,可以有多个DispatcherServlet,是通过名字来区分的。每一个DispatcherServlet有自己的WebApplicationContext上下文对象。同时保存的ServletContext中和Request对象中.-->
76         <!--ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些,ApplicationContext则是“应用的容器”了:P,Spring把Bean放在这个容器中,在需要的时候,用getBean方法取出-->
77         <servlet-name>DispatcherServlet</servlet-name>
78         <!--Servlet拦截匹配规则可以自已定义,当映射为@RequestMapping("/user/add")时,为例,拦截哪种URL合适?-->
79         <!--1、拦截*.do、*.htm, 例如:/user/add.do,这是最传统的方式,最简单也最实用。不会导致静态文件(jpg,js,css)被拦截。-->
80         <!--2、拦截/,例如:/user/add,可以实现现在很流行的REST风格。很多互联网类型的应用很喜欢这种风格的URL。弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。 -->
81         <url-pattern>/</url-pattern> <!--会拦截URL中带“/”的请求。-->
82     </servlet-mapping>
83     <!--日志环境配置-->
84     <!-- 加载log4j的配置文件log4j.properties -->
85     <context-param>
86         <param-name>log4jConfigLocation</param-name>
87         <param-value>classpath:logs/log4j.properties</param-value>
88     </context-param>
89     <!-- 加载Spring框架中的log4j监听器Log4jConfigListener -->
90     <listener>
91         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
92     </listener>
93 
94     <!--公用环境配置:session-config,error_page,404,500-->
95 </web-app>
web.xml

6、日志Log4J配置

1)log4j配置文件:在src-resources-logs下创建log4j.properties

 1 #定义LOG输出级别
 2 log4j.rootLogger=INFO,Console,File
 3 
 4 #定义日志输出目的地为控制台
 5 log4j.appender.Console=org.apache.log4j.ConsoleAppender
 6 log4j.appender.Console.Target=System.out
 7 #可以灵活的指定日志输出格式,下面一行是指定具体的格式
 8 log4j.appender.Console.layout=org.apache.log4j.PatternLayout
 9 log4j.appender.Console.layout.ConversionPattern=[%c]-%m%n
10 
11 #mybatis显示SQL语句日志配置
12 #log4j.logger.org.mybatis=DEBUG
13 log4j.logger.chin.dao=DEBUG
14 
15 
16 #文件大小到达指定尺寸的时候产生一个新的文件
17 log4j.appender.File=org.apache.log4j.RollingFileAppender
18 #指定输出目录
19 log4j.appender.File.File=logs/ssm.log
20 #定义文件最大大小
21 log4j.appender.File.MaxFileSize=10MB
22 #输出所有日志,如果换成DEBUG表示输出DEBUG以上级别日志
23 log4j.appender.File.Threshold=ALL
24 log4j.appender.File.layout=org.apache.log4j.PatternLayout
25 log4j.appender.File.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm|\:ss}][%c]%m%n
log4j.properties

  2)在web.xml中配置日志

PS:以下配置已在上述的web.xml中存在,此处仅是说明

 1 <!--日志环境配置-->
 2     <!-- 加载log4j的配置文件log4j.properties -->
 3     <context-param>
 4         <param-name>log4jConfigLocation</param-name>
 5         <param-value>classpath:logs/log4j.properties</param-value>
 6     </context-param>
 7     <!-- 加载Spring框架中的log4j监听器Log4jConfigListener -->
 8     <listener>
 9         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
10     </listener>
View Code

 7、MyBatis拦截器

 上述的日志配置仅能打印出sql,并不能打印出sql的执行时间;可以添加拦截器记录sql的执行时间

1)添加拦截器

 1 /**
 2  * 数据库操作性能拦截器,记录耗时
 3  */
 4 @Intercepts(value = {
 5         @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }),
 6         @Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class,
 7                 RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class }),
 8         @Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class,
 9                 RowBounds.class, ResultHandler.class }) })
10 public class SqlStatementInterceptor implements Interceptor
11 {
12     private static Logger logger = LoggerFactory.getLogger(SqlStatementInterceptor.class);
13 
14     private Properties properties;
15 
16     @Override
17     public Object intercept(Invocation arg0) throws Throwable
18     {
19         MappedStatement mappedStatement = (MappedStatement) arg0.getArgs()[0];
20         String sqlId = mappedStatement.getId();
21         Object returnValue;
22 
23         long start = System.currentTimeMillis();
24         returnValue = arg0.proceed();
25         long end = System.currentTimeMillis();
26         long time = end - start;
27 
28         StringBuilder str = new StringBuilder(100);
29         str.append(sqlId);
30         str.append(": ");
31         str.append("cost time ");
32         str.append(time);
33         str.append(" ms.");
34         String sqlInfo = str.toString();
35         logger.info(sqlInfo);
36         //logger.debug(sqlInfo);
37 
38         return returnValue;
39     }
40 
41     @Override
42     public Object plugin(Object arg0)
43     {
44         return Plugin.wrap(arg0, this);
45     }
46 
47     @Override
48     public void setProperties(Properties arg0)
49     {
50         this.properties = arg0;
51     }
52 }
SqlStatementInterceptor.java

 2)配置拦截器:在applicationContext-mybatis.xml中添加拦截器配置,上面第4步已经配置,不再赘述。

 8、Junit测试基类

PS:此处用的是AbstractTransactionalJUnit4SpringContextTests类,此类支持事务;若需测试新增或修改功能,执行后此类能够回滚修改,数据库中不会因测试需要而修改数据。

 1 /**
 2  * spring 测试基类
 3  * 此类作为测试基类,其余其实类只要继承此类即可,无需再进行配置
 4  */
 5 @RunWith(SpringJUnit4ClassRunner.class)                         //使用标准的JUnit @RunWith注释来告诉JUnit使用Spring TestRunner
 6 @ContextConfiguration(locations = {"classpath:spring/*.xml"})   //指定bean注入的配置文件
 7 public class SpringBaseTestCase extends AbstractTransactionalJUnit4SpringContextTests {
 8 
 9     protected static final Logger LOG = LoggerFactory.getLogger(ProductTestCase.class);
10     //加载日志配置文件
11     @BeforeClass
12     public static void initLogs() {
13         PropertyConfigurator.configure(Test.class.getClassLoader().getResource("logs/log4j.properties"));
14     }
15 }
SpringBaseTestCase.java

 

posted @ 2017-06-26 16:56  转瞬  阅读(272)  评论(0)    收藏  举报