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,也可以很好地解决循环依赖问题。


  • 相关阅读:
    对《软件工程》这门课的总结
    结对编程项目---四则运算
    PSP记录个人项目耗时情况
    代码复审
    是否需要有代码规范
    四则运算的实现(C++)重做
    四则运算器的实现
    学习进度总结
    通过阅读教材,所得的不懂的问题
    自我介绍
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462669.html
Copyright © 2011-2022 走看看