首页 > 编程知识 正文

spring异步线程池,schedule默认的线程池

时间:2023-05-03 13:17:27 阅读:127262 作者:2857

如果使用spring线程池,则在调用线程池时,新创建的线程将无法获取注入的实例,并且在调用方法时会报告空指针异常,如service业务层方法。

java线程方法执行如下,然后在调试程序中进行调试,测试管理器报告空指针

publicclasstesttaskimplementscallable { @ autowiredprivatetestmanagertestmanager; publictesttask (} @ overridepublicobjectcall ) ) throwsexception(/testmanager报告为空测试测试=测试管理器. select ber }解决方法(从上下文获取bean后(springboot可实测)在以applicationContext为静态变量、实现Runnable的接口类中,直接获取静态应用上下文

publicclasstesttaskimplementscallable { @ autowiredprivatetestmanagertestmanager=springcontextholder.get bean (测试管理器) publictesttask (} @ overridepublicobjectcall ) ) throws exception (test test=test manager.selectbyid ) '1); 返回真; }方法2作为参数传递给调用线程的方法,并将service作为参数直接传递给线程

公共类测试{私有类测试管理器测试管理器; @ resource (name=' taskqueuexecutor ' )专用readpooltaskexecutor; publicstaticvoidmain ((testtasktesttask=new test task ) ) testmanage ); //futuretaskintegerfuturetask=executor.execute (测试任务),可以忽略newfuturetaskinteger (测试任务); } publicclasstesttaskimplementscallable { privatefinaltestmanagetestmanage; publictesttask (测试管理) ) /作为参数是super ); this.testManage=testManage; } @Override public Object call () Throwsexception ) test test=test manager.selectbyid ('1' ); 返回真; }方法通过向三spring容器的重新扫描(无测试)线程类中添加静态代码块来重新扫描spring容器

publicclasstesttaskimplementscallable { privatestatictestmanage=测试管理; 私有状态应用程序内容上下文=空值; static { context=newclasspathxmlapplicationcontext (' class path :/spring-context *.XML ' ); testmanage=(testmanage ) context.getbean('testmanage ' ) } public test task ({ } @ override public object call ) ) Throwt 返回真; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。