Задача веб-приложения Java, которая запускается время от времени

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

Это первый раз, когда мне нужно сделать что-то подобное в Java Web, и я понятия не имею об этом (или, по крайней мере, это оптимально и безопасно), я знаю, что есть Timer и TimerTask

] Я пробовал следующее:

@Stateless
public class LoanBean{

    Timer timer;

    public LoanBean() {
        checkLoans();
    }

    public void checkLoans() {
        timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Tarea ejecutándose");
            }
        };

        timer.schedule(task, 10, 1000);
    }

}

Кажется, что это хорошо работает в отношении того факта, что задача выполняется время от времени, но только при взаимодействии с этим EJB, идея состоит в том, что она будет выполняться, когда приложение смонтировано на сервер приложений, поскольку, если я перезапущу его, задача больше не будет выполняться до тех пор, пока я снова не буду взаимодействовать с этим EJB (откройте страницу в веб-браузере), в этом случае я использую Oracle WebLogic в качестве сервера приложений

0
задан 05.07.2017, 19:56
1 ответ

quartz - cofigurable, но иногда способствует тому, чтобы был приведен к сбою твой сервер, с @Scheduled Спринг ты зависишь от внешних книжных магазинов, а следовательно я рекомендую тебе использовать классы самого Java и работать с MultiThreading Java

public class MiServicio extends TimerTask{
    private Timer timer;

    public MiServicio() {
        timer = new Timer(true);// indicador de que es un daeomon para prioridad de ejecución
        timer.scheduleAtFixedRate(this, 0, 4*60*60*1000); // ejecución inmediata y luego cada 4 horas
    }


    @Override
    public void run() {
        // ejecuta tu código de procesamiento 

        // valida tu condicion de salida y 
        timer.cancel(); // termina la ejecución periodica
    }

}
0
ответ дан 24.11.2019, 07:46