Chcę uruchomić proces w tle równolegle z moją aplikacją webową spring-mvc. Potrzebuję sposobu, aby zacząć automatycznie przy ładowaniu kontekstowym. Proces w tle jest klasą, która implementuje Runnable
. Czy spring-mvc ma w tym coś do zaoferowania?Jak stworzyć proces w tle na wiosnę?
Odpowiedz
Wiosna ma kompleksowe ramy wykonywania zadań. Zobacz relevant part of the docs.
Proponuję posiadanie Spring bean w twoim kontekście, który po zainicjowaniu przesyła twoje tło Runnable
do fasoli SimpleAsyncTaskExecutor
. To najprostsze podejście, które możesz uczynić bardziej złożonym i zdolnym, jak uważasz za stosowne.
Chciałbym przeczytać dokumentację planowania zadań powiązaną ze skaffmanem, ale jest też prostsza metoda, jeśli naprawdę chcesz tylko uruchomić wątek w tle podczas inicjalizacji kontekstu.
<bean id="myRunnableThingy">
...
</bean>
<bean id="thingyThread" class="java.lang.Thread" init-method="start">
<constructor-arg ref="myRunnableThingy"/>
</bean>
Jako kolejna opcja, można teraz korzystać z funkcji planowania Spring. Z wersją Spring 3 lub wyższą ma ona adnotację typu cron, która pozwala zaplanować uruchamianie zadań za pomocą prostej adnotacji metody. Jest również przyjazny w przypadku autowirowania.
W tym przykładzie zadania są planowane co 2 minuty przy początkowym okresie oczekiwania (przy uruchomieniu) wynoszącym 30 sekund. Następne zadanie uruchomi się 2 minuty po zakończeniu metody! Jeśli chcesz, aby był uruchamiany dokładnie co 2 minuty, użyj zamiast niego fixedInterval.
@Service
public class Cron {
private static Logger log = LoggerFactory.getLogger(Cron.class);
@Autowired
private PageService pageService;
@Scheduled(initialDelay = 30000, fixedDelay=120000) // 2 minutes
public void cacheRefresh() {
log.info("Running cache invalidation task");
try {
pageService.evict();
} catch (Exception e) {
log.error("cacheRefresh failed: " + e.getMessage());
}
}
}
Należy również dodać @EnableAsync @EnableScheduling do klasy aplikacji, aby włączyć tę funkcję.
- 1. Proces PHP w tle
- 2. Jak stworzyć proces demona w Golang?
- 3. Proces w tle błędu pracownika
- 4. iOS - jak ukończyć długi proces w tle
- 5. Jak stworzyć proces Django ViewFlow programowo
- 6. Długi proces w tle w ASP.NET - Application_Start lub oddzielny proces?
- 7. Proces uruchamiania w tle w systemie Android
- 8. Wstrzymaj proces w tle w robospice
- 9. Uruchamianie polecenia jako proces w tle/usługa
- 10. dane zapisywać na dysk w Pythonie jako proces w tle
- 11. Jak zainicjować aplikację na wiosnę?
- 12. Jak wykonać exec() proces w tle w C?
- 13. Jak uruchomić proces ~ 30sek w tle co godzinę (aplikacja iPhone)
- 14. Jak zabić proces w tle z funkcji systemowej zadzwoń
- 15. Jak uruchomić polecenie jako proces w tle za pomocą ADB?
- 16. Jak mogę umieścić bieżący działający proces linuxowy w tle?
- 17. Dynamiczne formy na wiosnę
- 18. Poprawnie zaimplementuj proces w tle Wątek w ASP.NET
- 19. Czy serwer jest nieskończoną pętlą działającą jako proces w tle?
- 20. golang exec proces w tle i pobierz jego pid
- 21. php proces w tle za pomocą funkcji exec
- 22. Rozpocznij proces w tle z nohup przy użyciu tkaniny
- 23. Uruchamianie skryptu PHP z wiersza poleceń jako proces w tle
- 24. MessageInterpolator na wiosnę
- 25. Jak zatrzymać skrypt PHP uruchomionych na tle
- 26. Warunkowe zatwierdzenia na wiosnę
- 27. globalne właściwości na wiosnę
- 28. gdzie jest wyjście, gdy działa jako proces w tle?
- 29. Powielanie formularza na wiosnę
- 30. json na wiosnę-boot
Czy to działa dobrze z zamykaniem kontekstu i tak dalej? –
To dobre pytanie, zamknięcie może być trudne. Idealnie chciałbyś zrobić 'interrupt()', po którym następuje 'join()'. Niestety, nie wierzę, że możesz mieć dwie "metody niszczenia", więc najlepiej, jak to możliwe, jest 'destroy-method =" interrupt "'. Dla prawidłowego zachowania podczas zamykania zaleca się wdrożenie [Lifecycle] (http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/javadoc-api/org/springframework/context/Lifecycle.html) lub [Cykl SmartLifecycle] (http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/javadoc-api/org/springframework/context/SmartLifecycle.html) – washley
Implementacja interfejsu sprężynowego nie jest dostępna oczywiście duch mojej oryginalnej odpowiedzi. – washley