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


  • 相关阅读:
    spark性能调优 数据倾斜 内存不足 oom解决办法
    python2的中文编码
    spark UDF函数
    spark cache table
    spark 创建稀疏向量和矩阵
    mysql 分组排序
    给pyspark 设置新的环境
    CF662C Binary Table
    bzoj 4310 跳蚤
    3.29省选模拟赛 除法与取模 dp+组合计数
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462669.html
Copyright © 2020-2023  润新知