说明:本次采用SpringMVC、spring、mybatis、Log4j、MySQL数据库
一、配置Spring
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- bean definitions here -->
<!-- 开启组件自动扫描 -->
<context:component-scan base-package="com.zxj">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- 载入数据库配置信息 -->
<context:property-placeholder location="classpath:db.properties"
ignore-unresolvable="true" />
<!-- 配置数据源连接池信息 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<!-- 是否自动回收超时连接 -->
<property name="removeAbandoned" value="true"></property>
<!-- 连接超时时间,单位秒 -->
<property name="removeAbandonedTimeout" value="10"></property>
<!-- sql执行超时等待时间,单位毫秒 -->
<property name="maxWait" value="1000"></property>
<!-- 是否自动提交 -->
<property name="defaultAutoCommit" value="false"></property>
<!-- 验证连接是否正常成功,从表t_temp中查询数据,用来验证连接是否成功;如果连接出错,在启动容器时就会报错 -->
<property name="validationQuery" value="SELECT COUNT(id) FROM t_temp"></property>
</bean>
<!-- 配置SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 如果存在多个包同时需要取类别名时,可以用,或者;间隔书写 -->
<property name="typeAliasesPackage" value="com.zxj.bean"></property>
</bean>
<!-- 配置SQLMapper映射的扫描,并将扫描后的文件与sqlSessionFactory进行关联 -->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 如果存在多个包同时需要扫描映射文件的时候,可以用,或者;间隔书 -->
<property name="basePackage" value="com.zxj.mapper"></property>
<!-- 将上述的映射文件与SqlSession进行关联 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- 配置事务管理器 -->
<bean id="txManage"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 定义声明式事务 -->
<tx:advice id="txAdvice" transaction-manager="txManage">
<tx:attributes>
<!-- 定义一个全局的方法事务控制 -->
<tx:method name="*" propagation="REQUIRED" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="true" />
<!-- 新增方法 -->
<tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="false" />
<tx:method name="add*" propagation="REQUIRED" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="false" />
<tx:method name="insert*" propagation="REQUIRED" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="false" />
<!-- 更新方法 -->
<tx:method name="update*" propagation="REQUIRED" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="false" />
<tx:method name="change*" propagation="REQUIRED" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="false" />
<tx:method name="modify*" propagation="REQUIRED" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="false" />
<!-- 删除方法 -->
<tx:method name="delete*" propagation="REQUIRED" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="false" />
<tx:method name="remove*" propagation="REQUIRED" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="false" />
<!-- 查询方法 -->
<tx:method name="find*" propagation="SUPPORTS" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="true" />
<tx:method name="select*" propagation="SUPPORTS" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="true" />
<tx:method name="query*" propagation="SUPPORTS" isolation="REPEATABLE_READ"
rollback-for="java.lang.Exception" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* com.zxj.service.impl.*.*(..))"
id="serviceMethods" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
</aop:config>
</beans>
二、 配置SpringMVC
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!-- bean definitions here -->
<!-- 开启注解驱动 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 制定扫描规则 -->
<!-- 开启组件自动扫描表现层组件 -->
<context:component-scan base-package="com.zxj">
<!-- 包含过滤 -->
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
<!-- 不包含过滤 -->
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Repository" />
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Service" />
</context:component-scan>
<!-- 配置视图解析器 -->
<bean id="urlBasedViewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 定义静态资源包,这种请求则不会通过HandleMapping,直接去包中获取 -->
<mvc:resources location="/static/" mapping="/static/**" />
</beans>
三、log4j配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<!-- %c发生在哪个类, %d发生的时间,%p日志级别,%m输出信息,%n换行 -->
<param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} --%p --%m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="STDOUT" />
<param name="levelMax" value="STDOUT" />
</filter>
</appender>
<appender name="DEBUG" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="D:/logs/ssm-debug.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="10240KB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<!-- %c发生在哪个类, %d发生的时间,%p日志级别,%m输出信息,%n换行 -->
<param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} --%p --%m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="DEBUG" />
<param name="levelMax" value="DEBUG" />
</filter>
</appender>
<appender name="INFO" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="D:/logs/ssm-info.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="10240KB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<!-- %c发生在哪个类, %d发生的时间,%p日志级别,%m输出信息,%n换行 -->
<param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} --%p --%m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="INFO" />
<param name="levelMax" value="INFO" />
</filter>
</appender>
<appender name="WARN" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="D:/logs/ssm-warn.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="10240KB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<!-- %c发生在哪个类, %d发生的时间,%p日志级别,%m输出信息,%n换行 -->
<param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} --%p --%m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="WARN" />
<param name="levelMax" value="WARN" />
</filter>
</appender>
<appender name="ERROR" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="D:/logs/ssm-error.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="10240KB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<!-- %c发生在哪个类, %d发生的时间,%p日志级别,%m输出信息,%n换行 -->
<param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} --%p --%m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="ERROR" />
<param name="levelMax" value="ERROR" />
</filter>
</appender>
<root>
<priority value="INFO"></priority>
<appender-ref ref="STDOUT" />
<appender-ref ref="DEBUG" />
<appender-ref ref="INFO" />
<appender-ref ref="WARN" />
<appender-ref ref="ERROR" />
</root>
</log4j:configuration>
四、web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>ssm整合</display-name>
<welcome-file-list>
<welcome-file></welcome-file>
</welcome-file-list>
<!-- 字符过滤器 -->
<!-- 安全过滤器:防止SQL注入 -->
<!-- 敏感字符过滤器 -->
<!-- 特殊字符过滤器 -->
<!-- 配置spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 配置springmvc -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>