在我的 Spring Boot 应用程序中,我有一个每隔一小时执行一次的调度程序任务。在尝试访问请求范围 bean 的调度程序方法中。总是得到异常org.springframework.beans.factory.BeanCreationException。
这是代码示例。
@Data
public class TestVo {
private String message = "Hello";
}
@Bean
@Scope(value="request", proxyMode=ScopedProxyMode.TARGET_CLASS)
public TestVo testVo() {
return new TestVo();
}
在调度程序方法中访问上面创建的 bean,如下所示,
@Autowired
private TestVo testVo;
@Scheduled(cron="0 0 * * * *")
public void greetings() {
System.out.println(testVo.getMessage()); // accessing request scope bean
}
使用上述代码获得以下异常,
org.springframework.beans.factory.BeanCreationException:创建名为“scopedTarget.scheduledJobTaskExecutor”的bean时出错:当前线程的范围“请求”无效;如果您打算从单例中引用它,请考虑为该 bean 定义一个作用域代理;嵌套异常是 java.lang.IllegalStateException:未找到线程绑定请求:您是指实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上是在 Web 请求中操作并且仍然收到此消息,则您的代码可能在 DispatcherServlet 之外运行:在这种情况下,请使用 RequestContextListener 或 RequestContextFilter 来公开当前请求。
会有帮助的..谢谢。