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>

浙公网安备 33010602011771号