Spring+SpringMvc+Quartz+Mybatis多数据源 完整项目

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_2_5.xsd"
version="2.5">
  <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>
  <servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <session-config>
   <session-timeout>10</session-timeout>
   </session-config>

  <!--编码过滤-->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <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>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <error-page>
    <error-code>403</error-code>
    <location>/common/error_403.html</location>
  </error-page>
  <error-page>
    <error-code>404</error-code>
    <location>/common/error_404.html</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/common/error_500.html</location>
  </error-page>
  
</web-app>

  

 spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:context="http://www.springframework.org/schema/context"
             xmlns:aop="http://www.springframework.org/schema/aop"
             xsi:schemaLocation="http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc.xsd
		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-3.0.xsd">
    <!--上面的xsd最好和当前使用的Spring版本号一致,如果换了Spring版本,这个最好也跟着改-->

    <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
    <context:component-scan base-package="com.waihoo.hlj.controller.*"/>
    <context:component-scan base-package="com.waihoo.hlj.hljmall.controller"/>
    <context:component-scan base-package="com.waihoo.hlj.jkxw.controller"/>
    <context:component-scan base-package="com.waihoo.hlj.client.controller"/>
    <context:component-scan base-package="com.waihoo.hlj.youhe.controller"/>

    <!--自启任务-->
    <beans:bean id="taskPolling" class="com.waihoo.hlj.automation.TaskPolling"/>

    <!-- 配置注解驱动 -->
    <annotation-driven/>
    <beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <beans:property name="messageConverters">
            <beans:list>
                <beans:bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <beans:property name="supportedMediaTypes">
                        <beans:list>
                            <beans:value>text/html;charset=UTF-8</beans:value>
                        </beans:list>
                    </beans:property>
                </beans:bean>
            </beans:list>
        </beans:property>
    </beans:bean>


    <!--静态资源映射-->
    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/assets/**" location="/assets/"/>
    <resources mapping="/pager/**" location="/pager/"/>
    <!--<resources mapping="/unify_resources/**" location="/unify_resources/" />-->
    <resources mapping="/common/**" location="/common/"/>

    <!--默认Controller-->
    <beans:bean id="defaultController" class="com.waihoo.hlj.controller.base.DefaultController"/>
    <beans:bean id="defaultUrlMapping"
                class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <beans:property name="order" value="2147483647"/><!-- 此处的order很重要,要低于 mvc:resources的默认值2147483646-->
        <beans:property name="mappings">
            <beans:props>
                <beans:prop key="/*/**">defaultController</beans:prop>
            </beans:props>
        </beans:property>
    </beans:bean>

    <!--html 解析器-->
    <beans:bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <beans:property name="templateLoaderPaths" value="/"/>
        <!-- 设置页面中文乱码问题 -->
        <beans:property name="freemarkerSettings">
            <beans:props>
                <beans:prop key="defaultEncoding">UTF-8</beans:prop>
            </beans:props>
        </beans:property>
    </beans:bean>

    <beans:bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <beans:property name="suffix" value=".html"/>
        <beans:property name="order" value="0"/>
        <beans:property name="contentType" value="text/html;charset=UTF-8"/>
    </beans:bean>

</beans:beans>

  

DefaultController.java
package com.waihoo.hlj.controller.base;


import com.waihoo.hlj.utils.JsonUtil;
import net.sf.json.JSONObject;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by g_sheng on 2017/5/9
 */
public class DefaultController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=utf-8");
        System.out.println("***************************************" + request.getRequestURI());

        modelAndView.setViewName("/common/error_404");

        try {
            String code = JSONObject.fromObject(request.getParameter("content")).getString("code");
            if(code!=null){
                JsonUtil.outputResponse(response, JsonUtil.getFailJson());
            }
        }catch (Exception e){
        }

        return modelAndView;
    }

}

  

TaskPolling.java
package com.waihoo.hlj.automation;

import com.waihoo.hlj.base.MultipleDataSource;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.ServletConfigAware;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

import javax.servlet.ServletConfig;

/**
 * Created by g_sheng on 2017/4/21
 */
public class TaskPolling implements InitializingBean, ServletConfigAware {

    @Override
    public void afterPropertiesSet() throws Exception {

    }




    @Override
    public void setServletConfig(ServletConfig servletConfig) {

        
    }

}

  applicationContext.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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
http://www.springframework.org/schema/context  
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    <context:property-placeholder location="classpath*:properties/jdbc.properties"/>

    <context:component-scan base-package="com.waihoo.hlj.service"/>
    <context:component-scan base-package="com.waihoo.hlj.hljmall.service"/>
    <context:component-scan base-package="com.waihoo.hlj.jkxw.service"/>

    <!--<import resource="springConfig/applicationContent-quartz.xml"/>-->
    <import resource="springConfig/applicationContext-mybatis.xml"/>


</beans>

  

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

    <beans:bean id="hljMallJobQuartz" class="com.waihoo.hlj.hljmall.scheduler.AutoJobQuartz"/>
    <beans:bean id="hljMallJobQuartzDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <beans:property name="targetObject" ref="hljMallJobQuartz"/>
        <beans:property name="targetMethod" value="work"/>
    </beans:bean>

    <beans:bean id="hljMallTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <beans:property name="jobDetail" ref="hljMallJobQuartzDetail"/>
        <!--每天凌晨4点执行一次-->
        <beans:property name="cronExpression" value="0 0 4 * * ?"/>
    </beans:bean>

    <!-- 把触发器加入到任务列表中 -->
    <beans:bean id="hljScheduler"
                class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <beans:property name="triggers">
            <beans:list>
                <beans:ref bean="hljMallTrigger"/>
            </beans:list>
        </beans:property>
        <beans:property name="autoStartup" value="true"/>
        <beans:property name="quartzProperties">
            <beans:props>
                <!-- 主要是这个参数 将这个检测更新给禁用掉就可以了。-->
                <beans:prop key="org.quartz.scheduler.skipUpdateCheck">true</beans:prop>
            </beans:props>
        </beans:property>
    </beans:bean>

</beans:beans>

  

applicationContext-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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">


    <import resource="applicationContext-dataSource.xml"/>

    <!-- spring和MyBatis整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="multipleDataSourceAspectAdvice"/>
        <!-- 自动扫描 mapper.xml文件(读取的是编译出来的classes目录下的module目录下的具体模块的mapping目录下的任意xml文件) -->
        <property name="mapperLocations">
            <list>
                <value>classpath:module/mappers/*.xml</value>
              
                <value>classpath:module/mappers/hljMall/*.xml</value>
              
                <value>classpath:module/mappers/jkxw/*.xml</value>
              
                <value>classpath:module/mappers/client/*.xml</value>
            
                <value>classpath:module/mappers/common/*.xml</value>
              
                <value>classpath:module/mappers/authority/*.xml</value>
               
                <value>classpath:module/mappers/youhe/*.xml</value>
            </list>
        </property>
        <!--最新mybatis的配置文件位置-->
        <property name="configLocation" value="classpath:mybatisConfig/mybatis-config.xml"/>
    </bean>

    <!-- mapper 接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--<property name="basePackage" value="-->
        <!--com.waihoo.hlj.mapper-->
        <!--"/>-->
        <property name="basePackage">
            <value>
                com.waihoo.hlj.mapper;
              
                com.waihoo.hlj.hljmall.mapper;
               
                com.waihoo.hlj.jkxw.mapper;
              
                com.waihoo.hlj.client.mapper;
               
                com.waihoo.hlj.youhe.mapper;
            </value>
        </property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

    <bean id="multipleDataSourceAspectAdvice"
          class="com.waihoo.hlj.base.MultipleDataSourceControl"><!-- 这里写选择数据源的类地址 下面跟着给出-->
        <property name="defaultTargetDataSource" ref="onlineSource"/><!-- 设置默认为此mySqlDataSource数据源-->
        <property name="targetDataSources">
            <map>
                <entry key="test" value-ref="testSource"/>
                <entry key="online" value-ref="onlineSource"/>
            </map>
        </property>
    </bean>


</beans>

  applicationContext-dataSource.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-3.0.xsd">


    <!--测试环境-->
    <bean id="testSource"
          class="com.waihoo.hlj.base.BaseDriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url"
                  value=""/>
        <property name="username" value=""/>
        <property name="password" value=""/>
        <property name="environment" value="test"/>
    </bean>

    <!--正式环境-->
    <bean id="onlineSource"
          class="com.waihoo.hlj.base.BaseDriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url"
                  value=""/>
        <property name="username" value=""/>
        <property name="password" value=""/>
        <property name="environment" value="online"/>
    </bean>

</beans>

  

MultipleDataSourceControl.java
package com.waihoo.hlj.base;

import net.sf.json.JSONObject;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;


/**
 * Created by g_sheng on 2017/12/19
 */
@Component
@Aspect
public class MultipleDataSourceControl extends AbstractRoutingDataSource {

    @Around(
          
            "execution(* com.waihoo.hlj.hljmall.service.HljMallTofService.transferAccount(..)) " +
                 
                    "|| execution(* com.waihoo.hlj.jkxw.service.JKXWTofService.remitAccountToUser(..))" +
                 
                    "|| execution(* com.waihoo.hlj.jkxw.service.JKXWTof2Service.transferOfJKXW(..))" +
                   
                    "|| execution(* com.waihoo.hlj.youhe.service.YouHeTofService.tof(..))"
    )
    public Object doAround(ProceedingJoinPoint jp) throws Throwable {
        if (getEnvironment().equals("online")) {
            return jp.proceed();
        }
        return null;
    }

    @Override
    protected Object determineCurrentLookupKey() {
        return null;
    }

    private String getEnvironment() {
        try {
            Object object = this;
            Field f = this.getClass().getSuperclass().getDeclaredField("defaultTargetDataSource");
            f.setAccessible(true);
            object = f.get(object);
            f = object.getClass().getDeclaredField("environment");
            String environment = f.get(object) + "";
            return environment;
        } catch (Exception E) {
            return "";
        }
    }

}

  

BaseDriverManagerDataSource.java
package com.waihoo.hlj.base;

import org.springframework.jdbc.datasource.DriverManagerDataSource;

/**
 * Created by g_sheng on 2017/12/21
 */
public class BaseDriverManagerDataSource extends DriverManagerDataSource {
    public String environment = "";

    public void setEnvironment(String environment) {
        this.environment = environment;
    }
}

  AutoJobQuartz.java

package com.waihoo.hlj.hljmall.scheduler;


import com.waihoo.hlj.hljmall.service.AutoHandlerService;
import com.waihoo.hlj.hljmall.service.HljMallTofService;
import com.waihoo.hlj.http.CalcRequest;
import org.springframework.beans.factory.annotation.Autowired;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * Created by g_sheng on 2017/7/6
 */
public class AutoJobQuartz {

    public static final int MIN_MONEY = 30; //处理金额(分)

    @Autowired
    private AutoHandlerService autoHandlerService;

    @Autowired
    private HljMallTofService tofService;


    public void work() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("当前时间:" + sdf.format(new Date()));
        autoHandlerService.handlerOrder();

        tofService.transferOfAssociate();  //合伙人分配
        tofService.transferOfStaff();     //员工分配

    }


}

  mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>


	<settings>
		<!-- 开启mybatis缓存设置,一般都是true -->
		<setting name="cacheEnabled" value="true"/>
		
		<!--延迟加载的全局开关-->
		<setting name="lazyLoadingEnabled" value="false"/>
		
		<!--设置超时时间-->
		<setting name="defaultStatementTimeout" value="3000"/>
		
		
		<!--本地缓存机制-->
		<setting name="localCacheScope" value="STATEMENT"/>
		
		<setting name="defaultExecutorType" value="SIMPLE"/>
		
		
		
		<setting name="mapUnderscoreToCamelCase" value="true"/>



		<!--允许JDBC支持自动生成主键,需要驱动的兼容-->
		<setting name="useGeneratedKeys" value="true"/>
	</settings>

</configuration>

  



 

原文地址:https://www.cnblogs.com/g-sheng/p/8762773.html