java定时器任务重获取HttpServletRequest对象不成功

项目中在做一个定时任务,发送邮件的过程中,使用request获取文件模板路径的过程中,发现request获取失败,由于在测试时候是前端触发的,所以在获取request时候,并未发现异常,当触发自动跑批时候,发现request获取失败

1.在尝试使用静态获取和使用直接注入HttpServletRequest的办法,都没有解决问题,会抛出如下异常:


ERROR [org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler] 
 - Unexpected error occurred in scheduled task.

2、使用@Autowired注入HttpServletRequest,会抛出如下异常:

ava.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131)
	at org.springframework.web.context.support.WebApplicationContextUtils.currentRequestAttributes(WebApplicationContextUtils.java:273)

问题解决:
通过ContextLoader获取getCurrentWebApplicationContext方法解决


WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
 ServletContext servletContext = webApplicationContext.getServletContext();
 String realPath = servletContext.getRealPath(File.separator);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值