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


  • 相关阅读:
    移植thinkPHP的dump()函数
    PHP生成linux命令行进度条
    没有ORM库的时候,通过PDO连接MySQL的方法
    mysql json字符串 解析成对应字段
    linux上安装并启动nginx
    linux上启动redis
    mui的input搜索框里的清除按钮的点击监听事件
    miniui 修改input样式及弹出框按钮文字
    js 删除数组元素的方法
    miniui反选
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462668.html
Copyright © 2011-2022 走看看