先定义一个功能类用于定时器定时调用功能类中的方法
功能类的写法:
<span style="font-size:18px;">
public class MatchingMaterialService extends QuartzJobBean {
private IMatchingTempMaterialService matchingTempMaterialService;
private IMatchingTempPharmacyService matchingTempPharmacyService;
public void setMatchingTempMaterialService(IMatchingTempMaterialService matchingTempMaterialService) {
this.matchingTempMaterialService = matchingTempMaterialService;
}
public void setMatchingTempPharmacyService(IMatchingTempPharmacyService matchingTempPharmacyService) {
this.matchingTempPharmacyService = matchingTempPharmacyService;
}
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
try {
matchingTempMaterialService.autoMatchMaterial();
matchingTempPharmacyService.autoMatchPharmacy();
} catch (Exception e) {
e.printStackTrace();
logger.error("***QuartzCartSalesService--->executeInternal error message:"+e);
}
}
}</span>
功能类写好了要配置定时器了,我们新建一个spring的配置文件
applicationContext-quartz-matching.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!-- 匹配临时表和大库表定时器任务 -->
<span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 </span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span>
<span style="font-size:18px;"><strong> </strong><bean id="webScheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cartSalesCrawlerTrigger" />
</list>
</property>
</bean></span>
<span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> 定义触发时间 </span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span>
<span style="font-size:18px;"> <bean id="cartSalesCrawlerTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="cartSalesCrawlerTaskJobDetail" />
</property>
<property name="cronExpression"><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> cron表达式 ,每十秒,其他时间可在网上搜,一大片</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span></span>
<value>0/10 * * * * ?</value>
<!-- <value>0/5 * * * * ?</value> -->
</property>
</bean></span>
<span style="font-size:18px;"><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> 定义调用对象和调用对象的方法 把刚才的功能类写在这里边</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span>
<bean id="cartSalesCrawlerTaskJobDetail"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> 要调用的工作类 </span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span>
<property name="jobClass" value="com.fufang.fftg.manager.service.MatchingMaterialService" />
<property name="jobDataAsMap"></span>
<span style="font-size:18px;"><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> <!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> 调用的类 ,即功能类中要调用的资源,此处时注入的service层代码</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span>
<map>
<entry key="matchingTempMaterialService" value-ref="matchingTempMaterialService" />
<entry key="matchingTempPharmacyService" value-ref="matchingTempPharmacyService" />
</map>
</property>
</bean>
</beans></span>
当然我们的定时器配置文件不要忘记加入wel.xml中得到加载:
<span style="font-size:24px;font-weight: bold;"> </span><span style="font-size:18px;"><context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/spring/applicationContext.xml,<strong>classpath:config/spring/applicationContext-quartz.xml,classpath:config/spring/applicationContext-quartz-matching.xml</strong></param-value>
</context-param></span>
定时器功能类调用了两个功能方法,即两个service层分别匹配数据库中的两张表,此处拿出其中一个简单的service的实现展现其匹配
<span style="font-size:18px;">
@Repository("matchingTempPharmacyDao")
public class MatchingTempPharmacyDaoImpl implements IMatchingTempPharmacyDao {
@Autowired
private SessionFactory sessionFactory;
@Override
public boolean autoMatchPharmacy() {//定时器功能类调用的就是此方法实现两个表的匹配,匹配后茶如另一张表</span>
<span style="font-size:18px;"> try {
StringBuffer sql=new StringBuffer();
sql.append("insert into wit_selection.middle_pharmacyMapping (dwbh,phId,suppId,createDate) ");
sql.append("select tm.dwbh, ph.id,tm.supplierId,GETDATE() from wit_selection.middle_temp_pharmacy tm join dbo.t_pharmacy ph ");
sql.append("on tm.dwmch = ph.name ");
sql.append("where tm.state <> 2 or tm.state is null and ph.used=1");
this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString()).executeUpdate();
//插入另一张表之后修改原先其中一张表的状态字段,使之不再参与匹配
StringBuffer sqls=new StringBuffer();
sqls.append("update wit_selection.middle_temp_pharmacy set state=2 where dwbh in(");
sqls.append("select tm.dwbh from wit_selection.middle_temp_pharmacy tm join dbo.t_pharmacy ph ");
sqls.append("on tm.dwmch = ph.name where tm.state <> 2 or tm.state is null and ph.used=1");
this.sessionFactory.getCurrentSession().createSQLQuery(sqls.toString()).executeUpdate();
return true;
} catch (HibernateException e) {
e.printStackTrace();
return false;
}
}</span>
<span style="font-size:18px;">//以下方法都是用于手动匹配,逻辑与自动相似,只是需要添加前台,分步骤进行,不再赘叙
@Override
public int getPharmacyCount(Map<String, Object> paramMap) {
int count = 0;
StringBuffer sql=new StringBuffer();
Map<String, Object> sqlMap = new HashMap<String, Object>();
sql.append("select count(mn.id) from t_pharmacy mn ")
.append(" where mn.used=1 ");
if (null != paramMap && paramMap.size() > 0) {
if (null != paramMap.get("key") && !"".equals(paramMap.get("key"))) {
sql.append( " and mn.name like :key ");
sqlMap.put("key", "%"
+ paramMap.get("key").toString().trim() + "%");
}
}
Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
query.setProperties(sqlMap);
List list = query.list();
if (null != list && list.size() > 0) {
count = Integer.valueOf(list.get(0).toString());
}
return count;
}
@Override
public List<Pharmacy> getPharmacyList(int page, int pageSize,
Map<String, Object> paramMap) {
Map<String, Object> sqlMap = new HashMap<String, Object>();
List<Pharmacy> PharmacyList = null;
StringBuffer sql=new StringBuffer();
sql.append("select mn.id,mn.name from t_pharmacy mn ")
.append(" where mn.used=1 ");
if (null != paramMap && paramMap.size() > 0) {
if (null != paramMap.get("key") && !"".equals(paramMap.get("key"))) {
sql.append( " and mn.name like :key ");
sqlMap.put("key", "%"
+ paramMap.get("key").toString().trim() + "%");
}
}
SQLQuery query = this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
query.setFirstResult(page);
query.setMaxResults(pageSize);
query.setProperties(sqlMap);
PharmacyList = query.setResultTransformer(
Transformers.aliasToBean(Pharmacy.class)).list();
return PharmacyList;
}
@Override
public int getTempPharmacyCount(Map<String, Object> paramMap) {
int count = 0;
StringBuffer sql=new StringBuffer();
Map<String, Object> sqlMap = new HashMap<String, Object>();
sql.append("select count(tm.dwbh) from wit_selection.middle_temp_pharmacy tm ")
.append(" where tm.state <> 2 or tm.state is null ");
if (null != paramMap && paramMap.size() > 0) {
if (null != paramMap.get("key") && !"".equals(paramMap.get("key"))) {
sql.append( " and tm.dwmch like :key ");
sqlMap.put("key", "%"
+ paramMap.get("key").toString().trim() + "%");
}
}
Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
query.setProperties(sqlMap);
List list = query.list();
if (null != list && list.size() > 0) {
count = Integer.valueOf(list.get(0).toString());
}
return count;
}
@Override
public List<MiddleTempPharmacy> getTempPharmacyList(int page, int pageSize,
Map<String, Object> paramMap) {
Map<String, Object> sqlMap = new HashMap<String, Object>();
List<MiddleTempPharmacy> TempPharmacyList = null;
StringBuffer sql=new StringBuffer();
sql.append("select tm.dwbh,tm.dwmch from wit_selection.middle_temp_pharmacy tm ")
.append(" where tm.state <> 2 or tm.state is null ");
if (null != paramMap && paramMap.size() > 0) {
if (null != paramMap.get("key") && !"".equals(paramMap.get("key"))) {
sql.append( " and tm.dwmch like :key ");
sqlMap.put("key", "%"
+ paramMap.get("key").toString().trim() + "%");
}
}
SQLQuery query = this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
query.setFirstResult(page);
query.setMaxResults(pageSize);
query.setProperties(sqlMap);
TempPharmacyList = query.setResultTransformer(
Transformers.aliasToBean(MiddleTempPharmacy.class)).list();
return TempPharmacyList;
}
@Override
public boolean updateState(Map<String, Object> paramMap) {
StringBuffer sql=new StringBuffer();
Map<String, Object> sqlMap = new HashMap<String, Object>();
sql.append("update wit_selection.middle_temp_pharmacy set state=2 where 1=1 ");
if (null != paramMap && paramMap.size() > 0) {
if (null != paramMap.get("dwbh") && !"".equals(paramMap.get("dwbh"))) {
sql.append( " and dwbh =:dwbh ");
sqlMap.put("dwbh", paramMap.get("dwbh").toString().trim() );
}
}
SQLQuery query=this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
query.setProperties(sqlMap);
int num=query.executeUpdate();
if(num>0){
return true;
}
return false;
}
@Override
public boolean saveToPharmacyMapping(MiddlePharmacyMapping entity) {
try {
this.sessionFactory.getCurrentSession().save(entity);
return true;
} catch (HibernateException e) {
e.printStackTrace();
}
return false;
}
@Override
public MiddleTempPharmacy getTempPharmacyById(String dwbh) {
List<MiddleTempPharmacy> PharmacyList = null;
StringBuffer sql=new StringBuffer();
sql.append("select tm.sptm ")
.append(" from wit_selection.middle_temp_pharmacy tm ")
.append(" where tm.dwbh=:dwbh ");
SQLQuery query = this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
query.setParameter("dwbh",dwbh);
PharmacyList = query.setResultTransformer(new AliasToBeanResultTransformer(MiddleTempPharmacy.class)).list();
if(!PharmacyList.isEmpty() && null!=PharmacyList){
return PharmacyList.get(0);
}
return null;
}
}</span>