En la sección anterior, terminamos la interfaz de interfaz de usuario de la página de inicio, pero hay un problema: si agrego un producto en segundo plano, entonces tengo que reiniciar el servidor para volver a sincronizar los datos de fondo y luego actualizar la página de inicio para sincronizar los datos. Obviamente, este no es el efecto que queremos. En general, este tipo de página de inicio en el centro comercial en línea definitivamente no es datos sincronizados manualmente, entonces, ¿cómo resolverlo? Necesitamos usar hilos y temporizadores para sincronizar automáticamente los datos de la página de inicio regularmente.
1. Temporizador y TimerTask
Necesitamos usar las clases de temporizador y TimeTask. Presentemos estas dos categorías primero.
El temporizador es una clase de herramientas. En el paquete java.util, los hilos lo usan para organizar tareas que se ejecutarán en hilos de fondo más adelante. Las tareas se pueden ejecutar una vez, o se pueden ejecutar regularmente. Tiene un constructor:
Temporizador (booleano isdaemon) // crea un nuevo temporizador que puede especificar su hilo asociado para ejecutarse como un demonio.
Después de que el hilo de demonio, es decir, el hilo principal termina, el hilo también termina, y después del hilo de no damon, es decir, el hilo principal termina, el hilo continúa ejecutándose. Cuando Isdaemon es verdadero, es el hilo de demonio. La clase de temporizador tiene un método de programación que puede crear una tarea, como sigue:
Programa nulo (tarea de TimeTask, fecha en la primera vez, período largo) // Programe la tarea especificada para realizar la ejecución de retraso fijo repetido en el momento especificado. // El primer parámetro es la tarea especificada, es decir, el objeto TimeTask; El segundo parámetro es el primer tiempo de apertura de tarea; El tercer parámetro es el intervalo de tiempo, es decir, ¿cuánto tiempo se tarda en ejecutarse cada vez?
Echemos un vistazo a TimeTask. TimeTask se usa para crear una nueva tarea de hilo. Implementa la interfaz ejecutable. Si queremos crear una nueva tarea de hilo, solo necesitamos heredar TimeTask y reescribir el método Ejecutar.
2. Cree una nueva tarea de hilo
Creemos una nueva tarea de hilo para actualizar los datos de fondo:
@Component // Deje el objeto a la clase pública de la gestión de primavera ProductTimerTask extiende TimeTask {@Resource Productservice Productservice = null; // inyectar productos de productos @Resource Categoría privada CategyService = NULL; // Inyect CategyService Private ServletContext Application = NULL; // Definir un objeto ServletContext, porque después de actualizar los datos de fondo, necesitamos almacenarlos en el dominio de la aplicación public void setApplication (aplicación servletContext) {this.application = aplicación; // Establezca este objeto de aplicación a través del oyente, porque el objeto de aplicación no se puede tomar aquí} @Override // la misma lógica que la inicialización de datos del oyente cuando el proyecto inicia public void run () {system.out.println ("--------"); List <List <Product>> bigList = new ArrayList <List <Cutic>> (); // almacenamiento de una lista con la clase de categoría en BigList // 1. Consulte la categoría Hot para (Categoría Categoría: CategoryService.QueryByHot (True)) {// Obtenga información recomendada del producto basada en la lista de identificación de categoría Hot <Product> LST = Productservice.QuerbyCategoryId (categoría. GetID ();); BigList.Add (LST); // Pon la lista con categoría en BigList} // 2. Deje la consulta BigList a la aplicación Aplicación de objeto incorporado.SetAttribute ("BigList", BigList); // Suponga que tenemos el objeto de aplicación}}A continuación, modificamos el contenido del oyente cuando se inicia el proyecto. La operación de consulta original de arriba se colocó en el oyente. Cuando se inicia el proyecto, el oyente comienza a ejecutar, obtiene datos de fondo y los almacena en el dominio de la aplicación. Luego, el primer plano obtiene los datos del dominio de la aplicación a través de la etiqueta JSTL. Ahora entregamos estas cosas al producto que definimos, así que solo configure un temporizador en el oyente y dejamos que el producto TIMERTASK actualice los datos de fondo regularmente. Consulte el código modificado en el oyente:
3. Comience el temporizador en el oyente
//@componente // El oyente es un componente de la capa web. Está instanciado por Tomcat, no en la primavera. No se puede poner en la clase pública de primavera initDatalistener implementa servletContextListener {private producttimerTask producttimerTask = null; // Definir un objeto ProductTIMerTask Aplicación privada ContextEx context = null; @Override public void contextDestroyed (evento de servletContextEvent) {// TODO Auto Generated Method Stub} @Override public void contextInitialized (ServletContextEvent Event) {context = WebApplicationContextUtils.getWebApplicationContextExt (event.getServletContext ()); ProductTimerTask = (ProductTimerTask) context.getBean ("ProductTimerTask"); // Obtener el objeto ProductTimerTask desde el archivo de configuración // Hable el objeto incorporado a ProductTimerTask, porque el ProductTimerTask no puede obtener la aplicación, solo puede darlo a través del oyente Set ProductTimerTask. // Establezca el temporizador para sincronizar los datos en la página de inicio una vez que cada hora (configurado como un hilo de demonio) nuevo temporizador (verdadero) .schedule (producto de producto, 0, 1000*60*60); // Ejecutar la tarea de ProducttimerTask una vez cada hora, es decir, actualizar los datos de fondo}}} Con respecto al código de operación original en el oyente InitDatalistener, puede comparar el contenido en la sección anterior. De hecho, son los datos de fondo de actualización en ProducttimerTask, pero solo se pone en TimeTask por ahora. De esta manera, completamos el uso de hilos y temporizadores para sincronizar regularmente los datos de la página de inicio, y este intervalo de tiempo puede ser establecido por nosotros mismos.
De hecho, algunos datos de la página de inicio en los blogs CSDN no se actualizan en tiempo real. Habrá un tiempo para actualizar todas las noches, como la clasificación del blog en la columna izquierda, el número de vistas que se muestran después de la clasificación de lectura, etc. Estos se actualizan todas las noches, y se debe configurar en segundo plano para actualizar una vez al día. El principio debe ser el mismo que aquí. Esto también reduce la presión sobre el servidor.
Enlace a este artículo: http://blog.csdn.net/eson_15/article/details/51387378
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.