springboot定时任务出现java.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: In this case, use RequestContextListener or RequestContextFilter to expose the current request.异常
时间: 2023-07-15 15:15:16 浏览: 408
这异常通常出现在使用了`@Scheduled`注解的定时任务方法中,因为这种方法默认是在一个新线程中执行的,没有与请求相关联的上下文信息。解决这个问题可以尝试以下两种方法:
1. 给定时任务方法添加`@Async`注解,并在调用该方法的地方使用`@Async`注解标注的方法中调用该方法。
2. 在Spring Boot中配置`TaskScheduler`时,使用`ThreadPoolTaskScheduler`代替默认的`ConcurrentTaskScheduler`,并设置线程池大小为1。这样就可以保证所有任务都在同一个线程中执行,避免了上下文信息丢失的问题。
```java
@Configuration
@EnableScheduling
public class ScheduledConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(1);
scheduler.initialize();
taskRegistrar.setTaskScheduler(scheduler);
}
}
```
同时,如果你的定时任务中需要获取请求相关的信息,比如Session等,也可以在定时任务方法中手动获取和设置。
阅读全文