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>