В предыдущем разделе мы закончили интерфейс пользовательского интерфейса домашней страницы, но есть проблема: если я добавляю продукт в фоновом режиме, я должен перезагрузить сервер для повторного ресинходоровки фоновых данных, а затем обновить домашнюю страницу, чтобы синхронизировать данные. Это, очевидно, не тот эффект, который мы хотим. Как правило, такая домашняя страница онлайн -торговых центров определенно не является вручную синхронизированную данные, так как ее решить? Нам нужно использовать потоки и таймеры для автоматической синхронизации данных домашней страницы.
1. Таймер и Timertask
Нам нужно использовать классы таймера и Timertask. Давайте сначала представим эти две категории.
Таймер - это класс инструментов. В пакете java.util потоки используют его для распоряжения задач, которые будут выполняться в фоновых потоках позже. Задачи могут быть выполнены один раз, или они могут быть выполнены регулярно. У него есть конструктор:
Таймер (логический isdaemon) // Создать новый таймер, который может указать связанный с ним поток, чтобы работать как демон.
После потока демона, то есть основной резьбы заканчивается, поток также заканчивается, а после потока, не являющегося даемоном, то есть основной поток заканчивается, поток продолжает выполняться. Когда Isdaemon верен, это нить Daemon. У класса таймера есть метод расписания, который может создать задачу следующим образом:
Расписание void (задача Timertask, дата первого периода, длительный период) // Запланировано указанную задачу для выполнения повторного выполнения с фиксированной задержкой в указанное время. // Первый параметр - это указанная задача, то есть объект Timertask; Второй параметр является первым временем открытия задачи; Третий параметр - это интервал времени, то есть сколько времени нужно для выполнения каждый раз
Давайте посмотрим на Timertask. Timertask используется для создания новой задачи потока. Он реализует запускаемый интерфейс. Если мы хотим создать новую задачу потока, нам нужно только унаследовать Timertask и переписать метод запуска.
2. Создайте новую задачу потока
Давайте создадим новую задачу потока для обновления фоновых данных:
@Component // Оставить объект в Spring Management Propellimertask Extends Timertask {@Resource productservice productservice = null; // Inject Productservice @Resource Private CategoryService CategoryService = null; // инъекция категории Service Private ServletContext Application = null; // Определите объект ServletContext, потому что после обновления фоновых данных нам необходимо сохранить его в приложении Public void setApplication (приложение ServletContext) {this.Application = Application; // Установите этот объект приложения через слушатель, потому что объект приложения не может быть принят здесь} @Override // та же логика, что и инициализация данных слушателя, когда проект начинает public void run () {System.out.println ("--------"); Список <list <Продукт >> biglist = new ArrayList <List <Продукт >> (); // Хранение списка с классом категории в BigList // 1. Запрос горячей категории для (категория категория: CategoryService.querybyhot (true)) {// Получить рекомендуемую информацию о продукте на основе списка идентификаторов Hot Category <drop> lst = productservice.querbycategoryId (category.getid ()); biglist.add (lst); // Поместите список с категорией в BigList} // 2. Оставьте запрос Biglist в приложение встроенного объекта Application.setAttribute ("BigList", BigList); // Предположим, у нас есть объект приложения}}Затем мы изменяем содержимое слушателя, когда проект запускается. Оригинальная операция запроса выше была помещена в слушатель. Когда проект запускается, слушатель начинает выполнять, получает фоновые данные и хранит их в домене приложения. Затем передний план получает данные из домена приложения через тег JSTL. Теперь мы передаем эти вещи на продукт, который мы определили, поэтому просто установите таймер в слушателе и позволим ProductTimetask регулярно обновлять фоновые данные. Проверьте измененный код в слушателе:
3. Начните таймер в слушателе
//@Component // Слушатель является компонентом веб -слоя. Это создается Tomcat, а не весной. Нельзя поместить в весенний открытый класс initDatalistener реализует ServletContextLister {productTimertask ProductTimerTask = null; // Определите объект ProductTimertask Private ApplicationContext context = null; @Override public void contextDestroyed (EventContexTevent Event) {// TODO Auto Generated Method stub} @Override public void contextInitialized (EventContexTextent Event) {context = webApplication contextiltils.getwebpplication context (event.getServletContext ()); ProductTimerTask = (productTimerTask) context.getBean ("ProductTimertask"); // Получить объект ProductTimertask из файла конфигурации // Распространение встроенного объекта в ProductTimErtask, потому что ProductTimertask не может получить приложение, вы можете дать его только через слушатель установить продукт Throwtask.setApplication (event.getServletContext ()); // Установите таймер для синхронизации данных на домашней странице один раз в час (настраивается в виде потока демона) Новый таймер (true) .schedule (ProductTimerTask, 0, 1000*60*60); // выполнить задачу ProductTimerTask один раз в час, то есть обновлять фоновые данные}}}}}}}}}}} Что касается исходного кода операции в прослушивателе initDatalistener, вы можете сравнить контент в предыдущем разделе. На самом деле, это данные об обновлении фоновых данных в ProductTimetask, но сейчас они просто помещены в Timertask. Таким образом, мы завершаем использование потоков и таймеров для регулярной синхронизации данных домашней страницы, и этот интервал времени может быть установлен самим.
На самом деле, некоторые данные домашней страницы в блогах CSDN не обновляются в режиме реального времени. Каждую ночь будет время обновлять время, например, рейтинг блога в левом столбце, количество просмотров, отображаемых после чтения рейтинга и т. Д. Они обновляются каждую ночь, и его следует устанавливать в фоновом режиме для обновления раз в день. Принцип должен быть таким же, как и здесь. Это также снижает давление на сервер.
Ссылка на эту статью: http://blog.csdn.net/eson_15/article/details/51387378
Вышеуказанное - все содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.