Выполнение регулярного фонового события в веб-приложении Java

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

8
задан graham.reeds 30 September 2008 в 09:41
поделиться

5 ответов

Я думаю, разрабатывая настраиваемое решение для выполнения фоновых задач, делает не всегда ценность, таким образом, я рекомендую использовать Кварцевый Планировщик в Java.

В Вашей ситуации (должен выполнить фоновые задачи в веб-приложении) Вы могли использовать ServletContextListener, включенный в распределение для инициализации механизма при запуске веб-контейнера.

После этого у Вас есть много возможностей запуститься (инициировали) Ваши фоновые задачи (задания), например, можно использовать Календари или подобные крону выражения. В Вашей ситуации по всей вероятности необходимо уладить споры с SimpleTrigger, который позволяет Вам выполнить задания в фиксированных, равных интервалах.

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

12
ответ дан 5 December 2019 в 07:14
поделиться

Мы используем jtcron для наших запланированных фоновых задач. Это работает хорошо, и если Вы понимаете крон, это должно иметь смысл Вам.

2
ответ дан 5 December 2019 в 07:14
поделиться

Как упомянуто, Кварц является одним стандартным решением. Если Вы не заботитесь о кластеризации или персистентности фоновых задач через перезапуски, можно использовать созданный в поддержке ThreadPool (в Java 5,6). При использовании ScheduledExecutorService, можно поместить Runnables в пул фонового потока, которые ожидают определенное количество времени перед выполнением.

Если Вы действительно заботитесь о кластеризации и/или персистентности, можно использовать очереди JMS для асинхронного выполнения, хотя Вам все еще будет нужен некоторый способ задержать фоновые задачи (можно использовать Кварц или ScheduledExecutorService, чтобы сделать это).

5
ответ дан 5 December 2019 в 07:14
поделиться

Механизм Jeff должен был создать своего рода кэшируемый объект, который ASP.NET автоматически воссоздаст в своего рода интервале - Это, казалось, было ASP.NET определенное решение, так вероятно, не поможет Вам (или меня) очень в мире Java.

См. https://stackoverflow.fogbugz.com/default.asp? W13117

Atwood: Ну, я первоначально спросил в Твиттере, потому что я просто хотел что-то легкий вес. Я действительно не хотел любить, пишут сервис окон. Я чувствовал, что это было вне кода полосы. Плюс код, который на самом деле делает работу, веб-страница на самом деле, потому что мне, который является логической единицей работы на веб-сайте, веб-страница. Так, это действительно похоже, мы перезваниваем в веб-сайт, это точно так же, как другой запрос в веб-сайте, таким образом, я просмотрел его как что-то, что должно остаться встроенным, и мало подхода, что мы подошли, который рекомендовался мне в Твиттере, был по существу для добавления чего-то к кэшу приложения с фиксированным истечением, затем у Вас есть вызов назад поэтому, когда это истекает, это вызывает определенную функцию, которая делает работу затем, Вы добавляете, что это въезжает задним ходом к кэшу с тем же истечением. Так, это немного, возможно, "гетто" является правильным словом.

Мой подход должен был всегда иметь к ОС (т.е. Крон, или планировщик задач Windows) загружают определенный URL в некотором интервале и затем устанавливают страницу в том URL, чтобы проверить, что это - очередь, и выполните, любые задачи требовались, но мне будет интересно слышать, существует ли лучший путь.

Из расшифровки стенограммы похоже, что FogBugz использует сервис окон, загружающий подход URL также.

Spolsky: Таким образом, у нас есть эта специальная страница под названием heartbeat.asp. И та страница, каждый раз, когда Вы поражаете его, и кто-либо может поразить его в любое время: не причиняет боль. Но когда та страница работает, она проверяет очередь ожидающих задач, чтобы видеть, существует ли что-нибудь, что должно быть сделано. И если существует что-нибудь, что должно быть сделано, это делает одну вещь и затем смотрит в той очереди снова и если существует что-либо еще, чтобы быть сделанным, это возвращается плюс, и вся веб-страница, которую это возвращает, является просто отдельным символом с плюс в нем. И если нет ничего иного, чтобы быть сделанным, очередь теперь пуста, она возвращается минус. Так, кто-либо может назвать это и поразить его как много раз, можно загрузить heartbeat.asp в веб-браузере, Вы поражаете Ctrl-R Ctrl-R Ctrl-R Ctrl-R, пока Вы не начинаете получать минусы вместо плюсов. И то, когда Вы сделали тот FogBugz, завершит все его работы по техническому обслуживанию, которые он должен сделать. Таким образом, это - первая часть, и вторая часть очень, очень простая служба Windows, которая работает, и ее целое задание состоит в том, чтобы назвать heartbeat.asp и если это добирается плюс, назовите ее снова скоро, и если это получает минус вызов его снова, но не некоторое время. Так в основном существует эта служба Windows, которую это всегда выполняет, который имеет очень, очень, очень простая задача просто удара URL, и надеющийся видеть, добирается ли это плюс или минус и, и затем планирование, когда это работает снова на основе того, добралось ли это плюс или минус. И очевидно можно сделать любой вид изменения, как которое Вы хотите на этой теме, например, мм Вы могли на самом деле, вместо того, чтобы возвратиться просто плюс или минус Вы мог сказать, "Хорошо отзывают меня за 60 секунд", или "Отзывают меня сразу же, у меня есть больше работы, которая будет сделана". И это - то, как это работает... так, чтобы услуга по сопровождению, которую это просто выполняет, Вы знаете, это похоже, Вы знаете, половина страницы кода, который выполняет ту услугу по сопровождению, и она никогда не должна изменяться, и это не имеет ни одной логики там, это просто содержит щекотку, которая заставляет эти веб-страницы быть названными с определенной гарантируемой частотой. И в той веб-странице в heartbeat.asp существует код, который поддерживает очередь задач, которые должны быть сделаны и взгляды на то, сколько времени протекло и делает, Вы знаете, ночное обслуживание и каждые семь дней удаляете все старые сообщения, которые были отмечены как спам и все виды просто фоновых задач обслуживания. И мм, это - то, как это делает это.

3
ответ дан 5 December 2019 в 07:14
поделиться

Вот то, как они делают это на StackOverflow.com:

http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

1
ответ дан 5 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: