2012-02-20 3 views
2

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

Заранее спасибо .. !!

ответ

1
Timer timer = new Timer(); 

Создайте таймер и задачу для каждой записи БД следующим образом.

TimerTask task = new TimerTask(){ 
    public void run() 
    { 
    //execute the code for every 10 mins 
    } 
} 
timer.scheduleAtFixedRate(task, 0, 10 * 60 * 1000); // period is 10 mins 
1

Работает cron job, cron - это планировщик заданий по времени, который позволяет периодически запускать код в определенные моменты времени или даты.

http://en.wikipedia.org/wiki/Cron

Для eaxmple это работает '' dosomething.sh каждые 10 минут.

*/10 * * * * /home/me/dosomething.sh

Примеры: http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/

1

Это зависит от вашего приложения.

Если вы используете только сервлеты и jsps и не используете EJB, кластеризацию и т. Д., Просто создайте java.util.Timer и добавьте туда задачу каждый раз, когда вы обновляете БД. Таймер запускает задачу в соответствии с планированием.

Если вы разрабатываете более «серьезное» приложение, вы можете использовать кварц.

Другим возможным подходом является использование отложенных сообщений JMS. См. here.

И следующий, самый сложный подход - использование JCA. Вы можете создать компонент JCA, который имеет «законный» доступ к опросу и таймеру опроса Application Server.

+0

Это также зависит от того, должна быть гарантирована отсроченная обработка или нет. Если система должна гарантировать ее обработку, таймер должен быть либо постоянным, либо система должна записывать, какая запись была обработана заданием, чтобы ее можно было перезапустить в худшем случае (например, сбой). – ewernli

+0

Спасибо за ответ .. !! Да Я использую только JSP и сервлеты. Я хочу сейчас рассказать о своем вопросе, любезно помогите мне, поскольку я новичок в этом. То, что я точно хочу сделать, - при каждой записи в базе данных я также хочу записать время, когда запись была сделана в базе данных (скажем, 16:00). Затем через 10 минут (в 16:10) я хочу выполнить код. Как это сделать конкретно? прилагается какой-либо код link если возможно. Спасибо, тонна .. !!! –

0

Это зависит от того, насколько точны ваши «10 минут после входа пользователя в строку». Ключевым моментом будет привязка «задачи», которую вы хотите выполнить, к данным триггера. Таким образом, вы, вероятно, захотите добавить какой-то идентификатор транзакции к данным. Затем вы можете добавить метку времени к данным транзакции, а затем провести запланированное событие, которое периодически проверяется (скажем каждые 15 секунд), и если он найдет какую-либо транзакцию, которая только что прошла свою 10-минутную отметку, выполните следующий шаг.

Смежные вопросы