Как я могу загрузить файл в веб-приложение через определенные промежутки времени? - PullRequest
1 голос
/ 17 мая 2010

У меня следующая задача: мне нужно загружать один и тот же файл в мое веб-приложение несколько раз, например - два раза в день! Предположим, в этом файле у меня есть информация, которая меняется, и мне нужно загрузить эту информацию в мое приложение, чтобы изменить статистику, например.

Как я могу загрузить файл несколько раз (два раза в час или два раза в день)? Что я должен использовать? Есть ли алгоритм, чтобы сделать это?

Мне не разрешено использовать внешние библиотеки, такие как Quartz Scheduler. Так что мне нужно сделать это с помощью Thread и / или Timer. Кто-нибудь может дать мне пример или алгоритм, как это сделать. Где я могу создать точку входа в свой поток, могу ли я сделать это в управляемом компоненте или мне нужен какой-то фильтр / слушатель / сервлет. Я работаю с JSF и RichFaces. Может быть, в этой технологии есть какие-то алгоритмы для решения моей проблемы.

Есть идеи?

Большое спасибо за помощь!

Ответы [ 6 ]

2 голосов
/ 18 мая 2010

Если вы не можете использовать планировщик, используйте сервлет и таймер.

В этой статье описано, как это сделать. Это именно то, что вам нужно.

1 голос
/ 17 мая 2010

Проверьте java.util.Timer , этого должно быть достаточно для того, что вам нужно

0 голосов
/ 26 мая 2010

Спасибо всем за помощь - я делаю эту задачу с помощью Timer, TimerTask и ServletContextListener:

        servletContext = event.getServletContext();

        // create the timer and timer task objects
        Timer timer = new Timer();
        // get a calendar to initialize the start time
        Date startTime = Calendar.getInstance().getTime();

        List<Company> companies = CompanyUtils.getInstance().getCompanies();
        if (companies.size() == 0)
            return;

        for (int i = 0; i < companies.size(); i++) 
        {
            FileUpdater task = new FileUpdater(companies.get(i).getUrl());

            // schedule the task to run hourly
            timer.scheduleAtFixedRate(task, startTime, companies.get(i).getUpdatePeriod());
        }

        // save our timer for later use
        servletContext.setAttribute("timer", timer);

Еще раз спасибо!

С наилучшими пожеланиями!

0 голосов
/ 17 мая 2010

Я бы открыл для точки входа функцию загрузки в качестве сервлета в вашем веб-приложении, а затем использовал бы внешний планировщик (cron в Unix, Запланированные задачи в Windows) для вызова этого сервлета через wget или любой другой http-клиент командной строки.

Этот подход имеет преимущества, заключающиеся в том, что он не зависит от каких-либо сторонних библиотек (добавление Qurtz только для одной задачи кажется излишним для меня), а также обладает гибкостью изменения расписания без касания вашего кода, а также запуска «загрузки» вручную при желании.

0 голосов
/ 17 мая 2010

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

0 голосов
/ 17 мая 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...