zoukankan      html  css  js  c++  java
  • 线程异步调用实例

    更新content时更新Lucene的索引

    Content newContent = contentService.update(content);
    afterContentStatusChange(newContent, ContentStatusChangeThread.OPERATE_UPDATE);

      private void afterContentStatusChange(Content content, Short operate){

      ContentStatusChangeThread afterThread = new ContentStatusChangeThread(
                    content,operate,
                    new LuceneListener());
      afterThread.start();
    }
    package com.jeecms.cms.staticpage;
    
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.transaction.TransactionDefinition;
    import org.springframework.transaction.TransactionStatus;
    import org.springframework.transaction.support.DefaultTransactionDefinition;
    import org.springframework.util.Assert;
    import org.hibernate.Session;
    import org.springframework.orm.hibernate4.HibernateTransactionManager;
    import com.jeecms.cms.entity.main.Content;
    import com.jeecms.cms.manager.main.ContentMng;
    import com.jeecms.cms.service.ContentListener;
    import com.jeecms.cms.web.ApplicationContextUtil;
    
    public class ContentStatusChangeThread extends Thread {
        
        public static Short OPERATE_ADD=1;
        public static Short OPERATE_UPDATE=2;
        public static Short OPERATE_DEL=3;
    
        private Content content;
        //=1保存  =2修改 =3删除
        private Short operateType;
        private LuceneListener listener;public ContentStatusChangeThread(Content content,Short operateType,LuceneListener listener) {
            super();
            this.content=content;
            this.operateType=operateType;
            this.listener=listener;
        }
        
    
        @Override
        public void run() {
                HibernateTransactionManager transactionManager = (HibernateTransactionManager) ApplicationContextUtil
                .getBean("transactionManager"); DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务 TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态 try { //逻辑代码 if(operateType==1){ afterSave(content); }else if(operateType==2){ ContentMng contentMng=(ContentMng) ApplicationContextUtil.getBean("contentMng"); content=contentMng.findById(content.getId()); afterChange(content, listener); }else if(operateType==3){ afterDelete(content); } transactionManager.commit(status); } catch (Exception e) { transactionManager.rollback(status); } } private void afterSave(Content content) { if (listener != null) { listener.afterSave(content); } } private void afterChange(Content content, LuceneListener listener) { if (listener != null) { listener.afterChange(content); } } private void afterDelete(Content content) { if (listener != null) { listener.afterDelete(content); } } }
    @Override
    public void afterChange(Content content) {
        luceneContentService.updateIndex(content);
    }
  • 相关阅读:
    redis五类型及原理|redis主从及问题|Uninstall Redis CentOs 7
    netty4与netty5序列化问题记录
    [转载]【深入Java虚拟机】之四:类加载机制
    序列化原理机制新谈
    [Eclipse使用技巧] Eclipse使用External Tools定位java 源文件目录路径
    学习vue的一些资源
    中国国内可用API合集
    适合初学者学习的的vue+webpack的小项目
    前端性能优化----yahoo前端性能团队总结的35条黄金定律
    Angular2优质学习资源收集
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/7487615.html
Copyright © 2011-2022 走看看