zoukankan      html  css  js  c++  java
  • Spring异步执行(@Async)2点注意事项

      Spring中可以异步执行代码,注解方式是使用@Async注解。

      原理、怎么使用,就不说了。


      写2点自己遇到过的问题。

    1.方法是公有的

      // 通知归属人
    @Async
    public void notifyPusher(Project project) {

         

          }


    2.异步代码,需要放在外部单独的类中。

       @Service("asyncBiz")
    public class AsyncBiz {

        

    @Async
    public void notifyPusher(Project project) {

         

           }


     据说这是一个“常识”,外部方法才会被Spring拦截器拦截到额。


    代码调用示例

    @Service
    public class ProjectServiceImpl implements ProjectService{
    
    public void audit(long id, short status) {
    		
    			if(project.getPusher() != null){
    				AsyncBiz asyncBiz = SpringContextUtil.asyncBiz();
    				asyncBiz.notifyPusher(project);
    				asyncBiz.notifyCare(project);
    			}
    		
    	}
    
    }


    一个工具类

    @Component
    public class SpringContextUtil implements ApplicationContextAware{
    
    	private static ApplicationContext ctx;
    	@Override
    	public void setApplicationContext(ApplicationContext applicationContext)
    			throws BeansException {
    		this.ctx = applicationContext;		
    	}
    	
    	public static ApplicationContext getCtx(){
    		return ctx;
    	}
    	
    	public static Object getBean(String name) throws BeansException { 
            return ctx.getBean(name); 
    	} 
    	
    	public static AsyncBiz asyncBiz() throws BeansException { 
            return (AsyncBiz) ctx.getBean("asyncBiz"); 
    	} 
    
    }

    可以灵活手动获得Spring容器中的bean,也可以很好地解决循环依赖问题。


  • 相关阅读:
    转一篇:arp欺骗的原理和防御
    CF1209A Paint the Numbers
    字符串专题之KMP算法
    CF1209B Koala and Lights
    CF1217A Creating a Character
    CF1217B Zmei Gorynich
    各种模板
    开通博客园拉..
    汇编语言程序设计学习笔记(第一遍学习)第4节:汇编就像HTML一样简单
    我也要学C语言第二十章:结构体类型变量,结构体数组
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462669.html
Copyright © 2011-2022 走看看