idea中springmvc, mybatis, gradle环境搭建

Spring mvc和mybatis框架配置总结

开发环境:

Jdk: 1.8

开发IDE:IntelliJ IDEA 2016.3(64)

数据库:mysql 5.7

 

配置文件:

资源文件目录:

1.      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"xmlns:web="http://java.sun.com/xml/ns/javaee"
  
xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  
id="WebApp_ID"version="3.0">
  
  
<!-- ********************************log4j配置**********************************************************-->
  
<context-param>
      <param-name>
log4jConfigLocation</param-name>
      <param-value>
classpath:/log4j.properties</param-value>
   </context-param>
   <context-param>
      <param-name>
log4jRefreshInterval</param-name>
      <param-value>
600000</param-value>
   </context-param>
  
   <listener>
      <listener-class>
org.springframework.web.util.Log4jConfigListener</listener-class>
   </listener>
  
  
<!-- *****************************************spring配置**********************************************-->
  
  
<context-param>
      <param-name>
contextConfigLocation</param-name>
      <param-value>
classpath:/spring-config.xml</param-value>
   </context-param>
   <listener>
      <listener-class>
org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
  
  
  
  
  
  
<!-- *****************************************过滤器************************************************-->
  
   <!-- ****************
防止中文乱码******************************-à
  
  
<filter>
      <filter-name>
CharacterEncodingFilter</filter-name>
      <filter-class>
org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <async-supported>
true</async-supported>
      <init-param>
         <param-name>
encoding</param-name>
         <param-value>
utf-8</param-value>
      </init-param>
      <init-param>
         <param-name>
forceEncoding</param-name>
         <param-value>
true</param-value>
      </init-param>
   </filter>
   <filter-mapping>
      <filter-name>
CharacterEncodingFilter</filter-name>
      <url-pattern>
/*</url-pattern>
   </filter-mapping>


<!-- *******************************
将请求及返回结果显示到控制台***********-à
   <filter>
      <filter-name>
requestLogFilter</filter-name>
      <filter-class>
com.wit.stock.filter.RequestLogFilter</filter-class>
      <async-supported>
true</async-supported>
   </filter>
   <filter-mapping>
      <filter-name>
requestLogFilter</filter-name>
      <url-pattern>
/*</url-pattern>
   </filter-mapping>

<!--***********************shiro
安全配置***********************************à
   <filter>
      <filter-name>
shiroFilter</filter-name>
      <filter-class>
org.springframework.web.filter.DelegatingFilterProxy</filter-class>
      <init-param>
         <param-name>
targetFilterLifecycle</param-name>
         <param-value>
true</param-value>
      </init-param>
   </filter>

  

  
<!-- Make sure any request you want accessible toShiro is filtered. /* catches all -->
   <!-- requests.  Usually this filter mapping is defined first(before all others) to -->
   <!-- ensure that Shiro works insubsequent filters in the filter chain:             -->
  
<filter-mapping>
      <filter-name>
shiroFilter</filter-name>
      <url-pattern>
/*</url-pattern>
   </filter-mapping>




<!--*******************************************springMVC*******************************************************-->


  
<servlet>
      <servlet-name>
mvc-dispatcher</servlet-name>
      <servlet-class>
org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
         <param-name>
contextConfigLocation</param-name>
         <param-value>
classpath:spring-mvc-config.xml</param-value>
      </init-param>
      <load-on-startup>
1</load-on-startup>
      <async-supported>
true</async-supported>
   </servlet>
   <servlet-mapping>
      <servlet-name>
mvc-dispatcher</servlet-name>
      <url-pattern>
/</url-pattern>
   </servlet-mapping>
</web-app>

 

 

2.spring mvc 配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        ">


   <!-- 对mvc注解支持 -->
   <mvc:annotation-driven  >
   
     <mvc:argument-resolvers>
            <bean class="com.wit.stock.bind.CurrentUserMethodArgumentResolver"/>
        <bean class="com.wit.stock.bind.RequestPageInfoMethodArgumentResolver" />
        </mvc:argument-resolvers>
   </mvc:annotation-driven>



   <bean class="com.wit.stock.document.MySwaggerConfig"/>


   <!-- 只扫描@controller注解 -->
    <context:component-scan base-package="com.wit.stock.controller">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
        <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController" />
        <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
        <context:include-filter type="annotation" expression="org.apache.shiro.authz.annotation.RequiresUser" />
    </context:component-scan>

   <context:annotation-config/>

   <!--<mvc:view-controller path="/" view-name="forward:/index" />-->
   <mvc:view-controller path="/" view-name="forward:/signin"/>

   <mvc:default-servlet-handler />
   <!-- 静态资源映射 -->
   <mvc:resources mapping="/assets/images/**" location="/WEB-INF/assets/images/" />
   <mvc:resources mapping="/assets/images/gallery/**" location="/WEB-INF/assets/images/gallery/" />
   <mvc:resources mapping="/assets/css/**" location="/WEB-INF/assets/css/" />
   <mvc:resources mapping="/assets/js/**" location="/WEB-INF/assets/js/" />
   <mvc:resources mapping="/assets/font/**" location="/WEB-INF/assets/font/" />
   <mvc:resources mapping="/assets/fonts/**" location="/WEB-INF/assets/fonts/" />
   <mvc:resources mapping="/assets/avatars/**" location="/WEB-INF/assets/avatars/" />


   <mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/"/>
   <mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>
   <mvc:resources mapping="*.html" location="/WEB-INF/"/>




   <!-- 定义视图解析器 -->
   <bean
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/"/>
      <property name="suffix" value=".html"/>
   </bean>
   
    <import resource="spring-mvc-shiro.xml"/>
</beans>

 

3.spring配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
        ">
   <!--<context:annotation-config/>-->

   <!-- 读取配置文件 -->
   <context:property-placeholder
      location="classpath:jdbc-mysql.properties,classpath:tomcat-pool-config.properties,classpath:mail-config.properties" />



   <!-- 扫描注解,除去web层注解,web层注解在mvc配置中扫描 -->
   <context:component-scan
      base-package="com.wit.stock.compoment,com.wit.stock.mapper,com.wit.stock.service">
      <context:exclude-filter type="annotation"
         expression="org.springframework.stereotype.Controller" />
      <context:exclude-filter type="annotation"
         expression="org.springframework.web.bind.annotation.RestController" />
   </context:component-scan>


   <!-- 开启AOP监听 只对当前配置文件有效 -->
   <aop:aspectj-autoproxy expose-proxy="true" proxy-target-class="true" />

   <!-- c3p0连接池 -->
   <!-- <import resource="spring-c3p0.xml" /> -->

   <!-- tomcat连接池 -->
   <import resource="spring-tomcat-pool.xml" />
   <!-- hibernate及事物配置 -->
   <!-- <import resource="spring-hibernate.xml" /> -->
   
   <import resource="spring-mybatis.xml" />


   <!-- 配置邮箱服务器 -->
   <import resource="spring-mail.xml" />
   

   <!-- shiro安全模块定义 -->
   <import resource="spring-shiro.xml" />



   <!-- 基于注释的事务,当注释中发现@Transactional时,使用id为“transactionManager”的事务管理器 -->
   <!-- 如果没有设置transaction-manager的值,则spring以缺省默认的事务管理器来处理事务,默认事务管理器为第一个加载的事务管理器 -->

   <tx:annotation-driven transaction-manager="transactionManager"  />

<!--   <bean id="taskExecutor"
      class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
      <property name="corePoolSize" value="10" />
      <property name="maxPoolSize" value="30" />
   </bean>-->


   <!-- 上传解析 -->
   <bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
      <property name="maxUploadSize" value="3000000" />
   </bean>


   <!-- 配置事务异常封装 -->
<!--   <bean id="persistenceExceptionTranslationPostProcessor"
      class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />-->

</beans>

 

4.log4j.properties配置:


#console log
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c(%L) - %m%n

#all log
log4j.appender.DAILY_ALL=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DAILY_ALL.layout=org.apache.log4j.PatternLayout
log4j.appender.DAILY_ALL.layout.ConversionPattern="%p %d{yyyy-MM-dd HH:mm:ss} %-50.50c(%L) - %m%n


#logger
#log4j.logger.org.springframework=TRACE
#log4j.logger.org.hibernate=INFO,CONSOLE
#log4j.logger.org.apache=INFO,CONSOLE
# 配置打印本项目所有log,包括mybati的sql语句
log4j.logger.com.wit.stock=TRACE

log4j.rootLogger=INFO,CONSOLE

 

5.tomcat-pool-confin.properties(tomcat连接池配置)

jmxEnabled=true
validationInterval=30000
timeBetweenEvictionRunsMillis=30000
maxActive=20
initialSize=3
maxWait=10000
maxIdle=15
removeAbandonedTimeout=60
minEvictableIdleTimeMillis=30000
minIdle=5
logAbandoned=true
removeAbandoned=true
jdbcInterceptors=org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer
validationQuery=SELECT 1
testOnBorrow=true
testOnReturn=true
testWhileIdle=true

 

 

6.spring-tomcat-pool.xml数据源配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        ">


    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
          destroy-method="close">
        <property name="poolProperties">
            <bean class="org.apache.tomcat.jdbc.pool.PoolProperties">
                <property name="url" value="${jdbc.url}"/>
                <property name="driverClassName" value="${jdbc.driverClassName}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.pass}"/>
                <property name="jmxEnabled" value="${jmxEnabled}"/>
                <property name="validationInterval" value="${validationInterval}"/>
                <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"/>
                <property name="maxActive" value="${maxActive}"/>
                <property name="initialSize" value="${initialSize}"/>
                <property name="maxWait" value="${maxWait}"/>
                <property name="maxIdle" value="${maxIdle}"/>
                <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"/>
                <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}"/>
                <property name="minIdle" value="${minIdle}"/>
                <property name="logAbandoned" value="${logAbandoned}"/>
                <property name="removeAbandoned" value="${removeAbandoned}"/>
                <property name="jdbcInterceptors" value="${jdbcInterceptors}"/>
                <property name="validationQuery" value="${validationQuery}"/>
                <property name="testOnBorrow" value="${testOnBorrow}"/>
                <property name="testOnReturn" value="${testOnReturn}"/>
                <property name="testWhileIdle" value="${testWhileIdle}"/>


            </bean>
        </property>
    </bean>
</beans>

 

7. spring-mybatis.xml配置:

<?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:tx="http://www.springframework.org/schema/tx"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
        ">

   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource"/>
      <property name="mapperLocations">
         <list>
            <value>classpath:mybatis_mapper/*.xml</value>
         </list>
      </property>
      <property name="typeAliasesPackage" value="com.wit.stock.model"/>
      <property name="plugins">
         <list>
            <bean class="com.github.pagehelper.PageHelper">
               <!-- 这里的几个配置主要演示如何使用,如果不理解,一定要去掉下面的配置 -->
               <property name="properties">
                  <value>
                     dialect=mysql
                     reasonable=true
                     supportMethodsArguments=true
                     returnPageInfo=check
                     params=count=countSql
                  </value>
               </property>
            </bean>
         </list>
      </property>
   </bean>

   <bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource2"/>
      <property name="mapperLocations">
         <list>
            <value>classpath:mybatis_mapper/*.xml</value>
         </list>
      </property>
      <property name="typeAliasesPackage" value="com.wit.stock.model"/>
      <property name="plugins">
         <list>
            <bean class="com.github.pagehelper.PageHelper">
               <!-- 这里的几个配置主要演示如何使用,如果不理解,一定要去掉下面的配置 -->
               <property name="properties">
                  <value>
                     dialect=mysql
                     reasonable=true
                     supportMethodsArguments=true
                     returnPageInfo=check
                     params=count=countSql
                  </value>
               </property>
            </bean>
         </list>
      </property>
   </bean>

   <bean id="sqlSessionFactory3" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource3"/>
      <property name="mapperLocations">
         <list>
            <value>classpath:mybatis_mapper/*.xml</value>
         </list>
      </property>
      <property name="typeAliasesPackage" value="com.wit.stock.model"/>
      <property name="plugins">
         <list>
            <bean class="com.github.pagehelper.PageHelper">
               <!-- 这里的几个配置主要演示如何使用,如果不理解,一定要去掉下面的配置 -->
               <property name="properties">
                  <value>
                     dialect=mysql
                     reasonable=true
                     supportMethodsArguments=true
                     returnPageInfo=check
                     params=count=countSql
                  </value>
               </property>
            </bean>
         </list>
      </property>
   </bean>

<!—mybatis数据库基本操作插件配置—>
   <bean id="msc1" class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
      <property name="basePackage" value="com.wit.stock.mapper"/>
      <!-- 3.2.2版本新特性,markerInterface可以起到mappers配置的作用,详细情况需要看Marker接口类 -->
      <!-- <property name="markerInterface" value="com.isea533.mybatis.util.MyMapper"/>-->
      <!-- 通用Mapper通过属性注入进行配置,默认不配置时会注册Mapper<T>接口 -->
      <!--<property name="properties">
            <value>
                mappers=tk.mybatis.mapper.common.Mapper
            </value>
        </property>-->

   </bean>

   <bean id="msc2" class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory2"></property>
      <property name="basePackage" value="com.wit.stock.mapper2"/>
      <!-- 3.2.2版本新特性,markerInterface可以起到mappers配置的作用,详细情况需要看Marker接口类 -->
      <!-- <property name="markerInterface" value="com.isea533.mybatis.util.MyMapper"/>-->
      <!-- 通用Mapper通过属性注入进行配置,默认不配置时会注册Mapper<T>接口 -->
      <!--<property name="properties">
            <value>
                mappers=tk.mybatis.mapper.common.Mapper
            </value>
        </property>-->

   </bean>

   <bean id="msc3" class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory3"></property>
      <property name="basePackage" value="com.wit.stock.mapper3"/>
      <!-- 3.2.2版本新特性,markerInterface可以起到mappers配置的作用,详细情况需要看Marker接口类 -->
      <!-- <property name="markerInterface" value="com.isea533.mybatis.util.MyMapper"/>-->
      <!-- 通用Mapper通过属性注入进行配置,默认不配置时会注册Mapper<T>接口 -->
      <!--<property name="properties">
            <value>
                mappers=tk.mybatis.mapper.common.Mapper
            </value>
        </property>-->

   </bean>

   <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"
      scope="prototype">
      <constructor-arg index="0" ref="sqlSessionFactory" />
   </bean>

<!—spring mvc数据库事务配置—>
   <aop:aspectj-autoproxy />

   <aop:config>
      <aop:pointcut id="appService"
         expression="execution(* com.wit.stock.service..*Service*.*(..))" />
      <aop:advisor advice-ref="txAdvice" pointcut-ref="appService" />
   </aop:config>

   <tx:advice id="txAdvice" transaction-manager="transactionManager">
      <tx:attributes>
         <tx:method name="select*" read-only="true" />
         <tx:method name="find*" read-only="true" />
         <tx:method name="get*" read-only="true" />
         <tx:method name="sava*" />

      </tx:attributes>
   </tx:advice>

   <bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
   </bean>





</beans>

 

8.spring-mvc-shiro.xml配置:

<?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:aop="http://www.springframework.org/schema/aop"
   xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
           http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
        ">



   <aop:config proxy-target-class="true" />

   <bean
      class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
      depends-on="lifecycleBeanPostProcessor">
      <!--<property name="proxyTargetClass" value="true" />-->
   </bean>
   <bean
      class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
      <property name="securityManager" ref="securityManager" />
   </bean>

</beans>
        

 

9.请求过滤器定义:

AbstractFilter.java

 

package com.wit.stock.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public abstract class AbstractFilter implements Filter {

   @Override
   public void doFilter(ServletRequest req, ServletResponse res,
         FilterChain chain) throws IOException, ServletException {
      HttpServletRequest request = (HttpServletRequest) req;
      HttpServletResponse response = (HttpServletResponse) res;
      HttpSession session = request.getSession(false);
      String menthod = request.getMethod();

      String requestUri = request.getRequestURI();
      String contextPath = request.getContextPath();
      String url = requestUri.substring(contextPath.length());
      
      
/*    System.out.println("requestUri: " + requestUri);
      System.out.println("contextPath: " + contextPath);
      System.out.println("url: " + url);*/
      
      doFilter(request, response, chain, session, menthod, url);

   }

   /**
    * 
    * @param request
    *            request
    * @param response
    *            response
    * @param session
    *            session 可能为空
    * @param menthod
    *            menthod
    * @param url
    *            url
    */
   public abstract void doFilter(HttpServletRequest request,
         HttpServletResponse response, FilterChain chain,
         HttpSession session, String menthod, String url)
         throws IOException, ServletException;

}

 

RequestLogFilter.java

package com.wit.stock.filter;

import java.io.IOException;
import java.util.Map;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RequestLogFilter extends AbstractFilter {

   private static Logger logger=null;

   public void init(FilterConfig config) {
      logger = LoggerFactory.getLogger(RequestLogFilter.class);
   }

   public void destroy() {
      logger = null;
   }

   public static String getParamsString(Map<String, String[]> params) {

      if (params == null || params.isEmpty())
         return "";

      StringBuilder builder = new StringBuilder();
      builder.append("?");
      

      for (String key : params.keySet()) {
         builder.append(key).append("=").append(params.get(key)[0])
               .append("&");

      }
      builder.deleteCharAt(builder.lastIndexOf("&"));

      return builder.toString();
   }

   @Override
   public void doFilter(HttpServletRequest request,
         HttpServletResponse response, FilterChain chain,
         HttpSession session, String menthod, String url)
         throws IOException, ServletException {
      logger.info("Accept:{}",request.getHeader("Accept"));
      logger.info("Content-Type:{}",request.getHeader("Content-Type"));
      logger.info("------开始过滤--------");

      long before = System.currentTimeMillis();
      logger.info("拦截到请求:{} : {}{}", menthod,url,getParamsString(request.getParameterMap()));


      chain.doFilter(request, response);
      long after = System.currentTimeMillis();
      logger.info("请求结果:" + url + " status:" + response.getStatus());
      logger.info("花费时间:" + (after - before) + "ms");

      

      logger.info("------过滤结束---------\n");

   }

}

 

10.gradle配置:

version '2.0'



apply plugin: 'war'
apply plugin: 'idea'
apply plugin: 'eclipse-wtp'

apply plugin: 'org.akhikhl.gretty'
apply plugin: 'org.flywaydb.flyway'
apply plugin: 'io.github.robwin.swagger2markup'
apply plugin: 'org.asciidoctor.convert'

//指定gradle wrapper版本
task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}


configurations {
    mybatisGenerator


}

//配置插件仓库
buildscript {

    repositories {
        mavenCentral()
        jcenter()
    }

    dependencies {

        classpath 'org.akhikhl.gretty:gretty:1.2.4'
        classpath: 'mysql:mysql-connector-java:5.1.36'
        classpath "org.flywaydb:flyway-gradle-plugin:4.0"

        //swagger2markup
        classpath 'io.github.robwin:swagger2markup-gradle-plugin:0.9.2'
        classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3'
        classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.10.1'
        classpath 'io.github.robwin:swagger2markup-gradle-plugin:0.9.2'
    }


}

//gretty设置
gretty {
    port = 8080
    contextPath = "/"
}


ext {
    if (!project.hasProperty("env")) {
        println '没有配置数据环境,默认使用 开发环境'
        env = "dev"

    }
    println "使用数据库环境为:${project['env']}"

    asciiDocOutputDir = file("${buildDir}/asciidoc")
    println asciiDocOutputDir.absolutePath
    swaggerOutputDir = file("${buildDir}/swagger")
    println swaggerOutputDir.absolutePath

}

def getDbProperties = {
    def properties = new Properties()
    def dbPropertiesPath = sourceSets.main.resources.srcDirs[1].path;
    file("$dbPropertiesPath/jdbc-mysql.properties").withInputStream { inputStream ->
        properties.load(inputStream)
    }

    properties;

}






sourceSets {
    main {
        resources {
            srcDir("src/main/resources")

            if (project['env'] == 'dev') {
                srcDir("src/main/resources-dev")
            } else if (project['env'] == 'prod') {
                srcDir('src/main/resources-prod')
            }

        }


    }


}

test {
    systemProperty 'io.springfox.staticdocs.outputDir', swaggerOutputDir
}

convertSwagger2markup {
    dependsOn clean,test
    inputDir swaggerOutputDir
    examplesDir asciiDocOutputDir
    pathsGroupedBy io.github.robwin.swagger2markup.GroupBy.TAGS
}


asciidoctor {
    dependsOn convertSwagger2markup
    sources {
        include 'index.adoc'
    }
    backends = ['html5', 'pdf']
    attributes = [
            doctype: 'book',
            'source-highlighter': 'coderay',
            toc: 'left',
            toclevels: '3',
            numbered: '',
            sectlinks: '',
            sectanchors: '',
            hardbreaks: '',
            generated: asciiDocOutputDir
    ]
}



flyway {
    def prop = getDbProperties()
    user = prop.getProperty('jdbc.user')
    url = prop.getProperty('jdbc.url')
    password = prop.getProperty('jdbc.pass')
    locations = ["filesystem:db/migration"]

}

repositories {
    mavenCentral()
    maven {
        url 'https://repo.spring.io/libs-milestone'
    }
}

//统一编码为utf-8
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

//依赖
dependencies {
    testCompile 'com.jayway.restassured:rest-assured:2.9.0'
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile 'org.springframework:spring-test:4.2.5.RELEASE'
    testCompile 'org.hamcrest:hamcrest-core:1.3'
    testCompile 'org.mockito:mockito-core:1.10.19'
    testCompile 'com.jayway.restassured:json-schema-validator:2.9.0'
    testCompile 'com.jayway.restassured:spring-mock-mvc:2.9.0'
    testCompile "org.springframework.restdocs:spring-restdocs-restassured:1.1.0.RC1"

    //maven仓库中心没有的jar,则放入libs目录下
    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile 'org.springframework:spring-webmvc:4.2.5.RELEASE'
    compile 'org.springframework:spring-orm:4.2.5.RELEASE'
    compile 'org.springframework:spring-context-support:4.2.5.RELEASE'
    compile 'mysql:mysql-connector-java:5.1.38'
    compile 'org.mybatis:mybatis:3.4.0'
    compile 'org.mybatis:mybatis-spring:1.3.0'
    compile 'com.github.pagehelper:pagehelper:4.1.3'
    compile 'org.apache.shiro:shiro-spring:1.2.4'
    compile 'org.apache.shiro:shiro-web:1.2.4'


    compile 'org.apache.tomcat:tomcat-jdbc:8.0.33'
    compile 'javax.mail:mail:1.4.7'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.7.3'
    compile 'org.aspectj:aspectjweaver:1.8.9'
    compile 'commons-fileupload:commons-fileupload:1.3.1'
    compile 'org.slf4j:slf4j-log4j12:1.7.21'
    compile 'tk.mybatis:mapper:3.3.8'
    providedCompile 'javax.servlet:javax.servlet-api:3.1.0'


    compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.7.3'

    //swagger
    compile "io.springfox:springfox-swagger2:2.4.0"
    compile 'io.springfox:springfox-swagger-ui:2.4.0'
    compile 'io.springfox:springfox-staticdocs:2.4.0'

    testCompile 'org.springframework.restdocs:spring-restdocs-mockmvc:1.1.0.RC1'
    compile 'io.github.robwin:assertj-swagger:0.1.2'
    testCompile 'com.fasterxml.jackson.module:jackson-module-jsonSchema:2.4.0'




    mybatisGenerator 'org.mybatis.generator:mybatis-generator-core:1.3.2'
    mybatisGenerator 'mysql:mysql-connector-java:5.1.38'
    mybatisGenerator 'tk.mybatis:mapper:3.3.8'

}





task mybatisGenerate << {
    def prop = getDbProperties()

    ant.properties['targetProject'] = projectDir.path
    ant.properties['driverClass'] = prop.getProperty('jdbc.driverClassName')
    ant.properties['connectionURL'] = prop.getProperty('jdbc.url')
    ant.properties['userId'] = prop.getProperty('jdbc.user')
    ant.properties['password'] = prop.getProperty('jdbc.pass')
    ant.properties['src_main_java'] = sourceSets.main.java.srcDirs[0].path
    ant.properties['src_main_resources'] = sourceSets.main.resources.srcDirs[0].path
    ant.properties['modelPackage'] = this.modelPackage
    ant.properties['mapperPackage'] = this.mapperPackage
    ant.properties['sqlMapperPackage'] = this.sqlMapperPackage

    ant.taskdef(
            name: 'mbgenerator',
            classname: 'org.mybatis.generator.ant.GeneratorAntTask',
            classpath: configurations.mybatisGenerator.asPath
    )
    ant.mbgenerator(overwrite: true,
            configfile: 'db/generatorConfig.xml', verbose: true) {
        propertyset {
            propertyref(name: 'targetProject')
            propertyref(name: 'userId')
            propertyref(name: 'driverClass')
            propertyref(name: 'connectionURL')
            propertyref(name: 'password')
            propertyref(name: 'src_main_java')
            propertyref(name: 'src_main_resources')
            propertyref(name: 'modelPackage')
            propertyref(name: 'mapperPackage')
            propertyref(name: 'sqlMapperPackage')

        }
    }
}



 

11.logback.xml配置(logback和log4j都可以作为spring mvc的日志输出,但logback比log4j更新,使用时选择一种即可):

<!--?xml version="1.0" encoding="UTF-8"?-->
<configuration debug="true">

    <appender name="console-std" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file-std" class="ch.qos.logback.core.FileAppender">
        <file>c:/ben/ben.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>c:/ben/ben.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder><!-- 必须指定,否则不会往文件输出内容 -->
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
        </encoder>
        <append>true</append>
        <prudent>false</prudent>
    </appender>

    <root level="error">
        <appender-ref ref="file-std"/>
    </root>
</configuration>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值