нам нужно периодически запускать одну функцию в веб-приложении Java. Как периодически вызывать функцию некоторого класса? Есть ли способ, который вызывает функцию, когда какое-то событие происходило как высокая загрузка на сервере и так далее. что такое кронтаб? Это работает периодически?Функция вызова периодически в Java
ответ
Чтобы позвонить что-то периодически, см TimerTask
Если вам нужно что-то более надежное вы можете использовать Quartz
Что касается crontab
является инструментом планирования на машинах Unix.
Если вы хотите что-то периодически запускать, не делайте этого на веб-сервере. Это был бы очень неправильный подход ИМО. Лучше использовать cron
, если вы работаете в Unix-подобной операционной системе. Серверы Windows предлагают аналогичную функциональность.
Java Web App вполне может работать на сервере приложений JEE. Если периодическое действие, которое вы хотите вызвать Business Logic, реализованное в JEE, то использование ошибок JEE Timer вполне разумно и полностью поддерживается. – djna
Возможно, вы могли бы объяснить, почему это плохой подход, чтобы поместить его в веб-сервер против использования чего-то вроде cron? – chrisbunney
djna: Согласен. Требуется дополнительная информация. –
Для вызова методов, когда сервер имеет большую нагрузку, у вас есть как минимум два возможных подхода. У вашего сервера приложений могут быть крючки управления, которые позволяют контролировать его поведение и предпринимать прогромматические действия. Альтернативно у вас есть возможность мониторинга системы (например, Tivoli или OpenView), и она генерирует «события», не должно быть слишком сложно доставлять такие события, как (например) JMS-сообщения, и ваш сервер забирает их.
Однако, возможно, вам захочется объяснить немного больше о том, чего вы хотите достичь. Адаптивное приложение beahviour может быть довольно сложным, чтобы получить право.
Как вызвать функцию некоторого класса периодически?
Есть несколько решений: а Timer, реализация хрон Java как cron4j, Quartz или даже EJB Timer API. Выбор одного или другого сильно зависит от контекста: тип приложения, используемые технологии, количество заданий и т. Д.
Есть ли способ вызова, когда происходит какое-либо событие, например, высокая загрузка на сервере и так и на
Возможно, вы можете использовать JMX на своих рабочих местах для доступа к информации и отслеживания информации и запуска действий в определенных условиях. Но это больше режим pull, а не событие.
нам нужно запустить одну функцию периодически в веб-приложения Java
(1) Так что смотрите в дескрипторе развертывания (web.xml) определяют слушателя для запуска во время запуска.
Как позвонить функции некоторого класса ?
(2) Создайте Timer в слушателе.
Есть ли способ, который вызывает функцию , когда какое-то событие произошло, как высокие нагрузки сервер и так далее
(3) и запустить Темы для проверки состояния системы, которые подъезд с Java , даже запускать системные проги (время простоя и т. д.) и анализировать выходные данные.
crontab может быть способом, но выполнение Java запустит другую JVM, и это действительно горячая вещь в контейнерах сервлетов: все работает в одной JVM.
Не забывайте о java.util.concurrent - у него есть много классов для планирования, например. ScheduledThreadPoolExecutor, если вам нужен более простой таймер.
http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html
Существует также портировать его на Java 1.4: http://backport-jsr166.sourceforge.net.
Если вы уже используете Spring, вы можете взглянуть на структуру выполнения задач Spring - используя @Scheduled и @Async для аннотирования методов в качестве задач и реализации функциональности в Процессоре, который делегирует фактическую работу Работнику, как описано в:
http://blog.springsource.com/2010/01/05/task-scheduling-simplifications-in-spring-3-0/
преимущество заключается в том, что вы можете определить таймеры используя хрон-подобный синтаксис в вашем весеннем контексте, и вы ничего особенного, чтобы настроить задачи не нужны, она также хорошо интегрированы в Java EE и должны хорошо работать с веб-серверами (какие пользовательские потоки, как правило, не всегда).
- 1. Периодически вызова сервлета из JSP-страницы (Java)
- 2. Функция вызова в Java
- 3. Функция вызова периодически в случайных интервалах в Swift
- 4. Периодически вызывающая функция триггера TinyMCE
- 5. Java функция динамического вызова
- 6. java автоматическая функция вызова
- 7. Функция динамического вызова в java
- 8. работает функция периодически в ходу
- 9. для вызова функции javascript периодически
- 10. C# метод асинхронного вызова периодически
- 11. Функция вызова javascript из Java
- 12. Выполнение программы Java периодически
- 13. Функция вызова при выходе программы в java
- 14. Функция вызова Java в цикле без stackoverflowerror
- 15. Динамическая функция вызова в Java 8 Потоки
- 16. Функция вызова вызова в C++?
- 17. Функция вызова вызова Android
- 18. функция вызова функции вызова
- 19. Android: функция обратного вызова из java-скрипта в java
- 20. Функция вызова на mousemove
- 21. Java: функция вызова из разных классов
- 22. Как функция вызова Java вызывает объект?
- 23. Функция обратного вызова Java как параметр
- 24. отдельная функция обратного вызова java script
- 25. Java нить периодически убивает процесс
- 26. Функция вызова Java из расширенного класса
- 27. вызова хранимой функция на Postgres из Java
- 28. C++ 11: Вызов C функция ++ периодически
- 29. Функция тм периодически выходит из строя R
- 30. Функция вызова периодически без использования потоков и метода sleep() в c
Более надежный, чем TimerTask? Это просто более гибко. – BalusC
@BalusC: Надежный был бы с Quartz, вы можете планировать различные объекты, вы можете использовать транзакции JTA, кластеризацию и многие другие функции Java EE. – OscarRyz
@Brian. Ну да, тогда это зависит от вашей концепции надежности. Одной из дополнительных функций Quartz является постоянство между перезапусками системы. Это только будущее, да, но это будущее, которое добавит устойчивости к библиотеке в любом случае, по крайней мере, с моей точки зрения. – OscarRyz