вызов компонента sessionscope с помощью планировщика весной

#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. Не. Область сеанса предназначена для использования в веб-запросе, в котором выполняется фоновая задача. Поэтому либо разделите вещи, чтобы не использовать область сеанса, либо вообще не используйте область сеанса.