zoukankan      html  css  js  c++  java
  • 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>
    

      



     

  • 相关阅读:
    SSIS 错误代码 DTS_E_OLEDB_EXCEL_NOT_SUPPORTED 没有可用的 OLE DB 访问接口 SSIS 的 64 位版本中不支持 Excel 连接管理器
    WIN8安装SQL SERVER2008:出现创建userSettings/Microsoft.SqlServer.Configuration.LandingPage.Properties.Settings 的配置节处理程序时出错的解决办法。
    WIN8安装SQL SERVER2008:出现"MsiGetPRoductInfo” 无法检索 Product Code {47439CBBCF57485B9994BE9E02D29193}的包的 ProductVersion;解决办法。
    解读QT信号与槽机制里 QMetaObject::connectSlotsByName(QObject *o)的源码
    初涉Windows Mobile下的QT程序移植和部署
    C++虚函数探索笔记(1)——虚函数的简单示例分析
    一个不应该发生的BUG。。。
    Qt.Visual.Studio.Integration.1.4.3 与 QT 4.5.0 Commercial for VS2008搭档的一个小问题
    C++ 逗号操作符二三事
    C++虚函数探索笔记(3)——延伸思考:虚函数应用的一些其他情形
  • 原文地址:https://www.cnblogs.com/g-sheng/p/8762773.html
Copyright © 2011-2022 走看看