#java #spring #spring-scheduled
Вопрос:
У меня есть требование, чтобы я создал планировщик, и мне нужно вызвать службу, которая внутренне использует компонент с областью действия сеанса. Вызов завершается неудачно, в то время как spring создает компонент с областью действия сеанса, поскольку вызов выполняется из планировщика, который не привязан ни к какому сеансу или запросу.
Я попытался поискать в Google, чтобы проверить, не сталкивался ли кто-нибудь с подобными проблемами, но не получил большой помощи. Я изучаю возможность создания фиктивного запроса и добавления его в RequestContextHolder, но не уверен, что это работает.
Есть ли в любом случае способ это исправить? Пожалуйста, помогите.
Пример кода приведен ниже,
@Component
@Slf4j
public class SimpleScheduler {
@Autowired
MyMailService mailService;
@Scheduled(cron = ".......")
public void NotifyMeteringThreshold() {
mailService.sendMail();
}
}
@Service
@Slf4j
public class MyMailService {
@Autowired
MyMessages message;
void sendMail()
message.getMessage("id1");
}
@Slf4j
@SessionScope
@Component
public class MyMessages {
String getMessage(String id){
}
}
Комментарии:
1. Не. Область сеанса предназначена для использования в веб-запросе, в котором выполняется фоновая задача. Поэтому либо разделите вещи, чтобы не использовать область сеанса, либо вообще не используйте область сеанса.