Вопрос

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

Это было полезно?

Решение

Чтобы периодически вызывать что-либо, см. ТаймерТаск

Другие советы

Если вам нужно что-то более надежное, вы можете использовать Кварц

Что касается crontab это инструмент планирования на машинах Unix.

Для вызова методов при высокой нагрузке на сервер у вас есть как минимум два возможных подхода.На вашем сервере приложений могут быть средства управления, которые позволят вам отслеживать его поведение и выполнять программные действия.Альтернативно у вас есть возможность мониторинга системы (например.Tivoli или OpenView) и генерирует «события», не должно быть слишком сложно доставить такие события, как (например) сообщения JMS, и заставить ваш сервер их забрать.

Однако, возможно, вы захотите объяснить немного больше о том, чего вы хотите достичь.Адаптивное поведение приложения может оказаться довольно сложной задачей.

Если вы хотите периодически запускать что-то, не делайте этого на веб-сервере.ИМХО, это был бы очень неправильный подход.Лучше использовать cron вместо этого, если вы используете Unix-подобную операционную систему.Серверы Windows предлагают аналогичную функциональность.

нам нужно периодически запускать одну функцию в веб-приложении Java

(1) Итак, посмотрите в своем дескрипторе развертывания (web.xml) определите прослушиватель для запуска во время запуска.

Как вызывать функцию некоторого класса периодически?

(2) Создать Таймер в слушателе.

Есть ли какой-либо способ вызвать функцию когда произошло какое-либо событие, например, высокая загрузка на сервере и так далее

(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/

Преимущество состоит в том, что вы можете определять таймеры, используя синтаксис, подобный cron, в контексте Spring, и вам не нужно ничего особенного для настройки задач, он также хорошо интегрирован в приложения Java EE и должен хорошо работать с веб-серверами (которые настраиваемы). Темы имеют тенденцию делать не всегда).

Как периодически вызывать функцию некоторого класса?

Есть несколько решений:а Таймер, реализация Java cron, например cron4j, Кварц, или даже API таймера EJB.Выбор того или иного варианта во многом зависит от контекста:тип применения, используемые технологии, количество рабочих мест и т. д.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top