Spring Boot @Scheduled метод создания экземпляра @Scope (запрос) - PullRequest
1 голос
/ 03 марта 2020

У меня проблема с пружинными прицелами. Я уверен, что мое решение не самое оптимальное, но я не знаю лучшего способа сделать это. Есть ли у вас какие-либо предложения?

Моя проблема:

Что мне нужно:

Я пытаюсь выполнить ту же операцию, что и сопоставленный метод @RESTController, но периодически в фоновом режиме, без какого-либо пользовательского вызова http / s.

Что у меня есть:

В настоящее время у меня есть некоторые @Service классы, ограниченные @Scope(REQUEST) @RestController

Что я пытаюсь

Я создал новый класс @Component с @Scheduled метод, который пытается вызвать @Service, который определен как @Scope(REQUEST).

Моя проблема:

Метод @Scheduled не может использовать REQUEST ограничен @Service, потому что они не входят в область запроса, и слишком сложно изменить все связанные службы для этой операции.

Спасибо!

1 Ответ

1 голос
/ 03 марта 2020

Таким образом, это будет означать, что экземпляр службы создается для запроса, но если нет запроса, то нет экземпляра компонента. Не могли бы вы создать отдельный экземпляр компонента для запланированного задания?

В основном удалите @Service из вашего класса обслуживания и создайте файл конфигурации

@Configuration
class FooServiceConfiguration {

    @Bean
    @RequestScope
    FooService requestFooService(){
        return new FooService()
    }

    @Bean
    FooService scheduledFooService(){
        return new FooService()
    }
}

И затем автоматически подключите requestFooService, откуда - всякий раз, когда он используется в вашем потоке запросов и автоматически связывает запланированный сервис от запланированного задания.

...