My answer refers to a special case of the general problem the OP describes, but I'll add it just in case it helps somebody out.
When using @EnableOAuth2Sso
, Spring puts an OAuth2RestTemplate
on the application context, and this component happens to assume thread-bound servlet-related stuff.
My code has a scheduled async method that uses an autowired RestTemplate
. This isn't running inside DispatcherServlet
, but Spring was injecting the OAuth2RestTemplate
, which produced the error the OP describes.
The solution was to do name-based injection. In the Java config:
@Bean
public RestTemplate pingRestTemplate() {
return new RestTemplate();
}
and in the class that uses it:
@Autowired
@Qualifier("pingRestTemplate")
private RestTemplate restTemplate;
Now Spring injects the intended, servlet-free RestTemplate
.