• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

147
Vistas
Cómo programar una tarea en Angular

Tengo que crear un componente en angular que limpie los datos en la base de datos (a través de una llamada de servicio) cada hora y muestre el último tiempo de limpieza en HTML. par de preguntas

  1. Cuando enrutamos de un componente a otro, ¿el componente se destruye automáticamente y pierde todos sus datos?
  2. ¿Es posible conservar los datos y usarlos en el futuro?
 @Component({ selector: 'demo-app', template:` <button (click)="clearData()"></button> <h2>Last synced time: {{ time }}</h2> ` }) export class AppComponent { public time; constructor(private demoService: DemoService) { } // ----> this should be triggered every hour <---- clearData() { this.demoService.deleteData() .subscribe((lastCleanTime) => {this.time = lastCleanTime;}); } }
almost 3 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

No prefiero hacer eso a través del lado del cliente, está bien agregar un botón para ejecutarlo, solo imagina estos casos:

  • Tiene 3 usuarios, por lo que esta tarea se ejecutará aproximadamente 3 veces cada hora, ¿qué pasa con más?
  • No tiene usuarios, por lo que la tarea nunca se ejecutará.

Prefiero hacerlo desde el lado del servidor, y puede actualizar la hora a través de una API para obtener la última hora o puede agregar un WebSocket para que esté siempre actualizado.

almost 3 years ago · Juan Pablo Isaza Denunciar

0

De hecho, una tarea de limpieza de la base de datos debe ejecutarse periódicamente en el lado del servidor. En proyectos Java en los que he participado, hemos realizado tareas similares con Tomcat o Jetty utilizando ServletContextListener . Otros servidores, por ejemplo, node, tienen sus propios mecanismos, por supuesto.

Usted crea una clase que implementa esta interfaz, cuyos métodos se llaman cuando su servlet se inicia o se destruye. En el método de inicio, crea un hilo que limpia la base de datos en un bucle cada hora, hasta que se destruye el servlet:

 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class DBCleanupContextListener implements ServletContextListener { private ExecutorService threadPool; private DBCleanupTask dbCleanupTask; public DBCleanupContextListener() { threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); dbCleanupTask = new DBCleanupTask(); } @Override public void contextInitialized(ServletContextEvent arg0) { threadPool.execute(dbCleanupTask); // submit additional tasks here if needed... } @Override public void contextDestroyed(ServletContextEvent arg0) { dbCleanupTask.shutdown(); threadPool.shutdown(); } class DBCleanupTask implements Runnable { boolean finished = false; @Override public void run() { while (!finished) { System.out.println("db cleanup code goes here ...."); try { Thread.sleep(60 * 60 * 1000); // sleeps 1 hour = 60min*60sec*1000ms } catch (InterruptedException e) { finished = true; } } } public void shutdown() { finished = true; } } }

He ejecutado este código con Tomcat, Jetty y Spring Boot. En teoría, debería ejecutarse en cualquier servidor JavaEE, pero debe investigar cómo configurar el servlet. En Tomcat, por ejemplo, debe agregarse a web.xml, como se describe aquí :

 <web-app ...> <listener> <listener-class> com.example.DBCleanupContextListener </listener-class> </listener> </web-app>
almost 3 years ago · Juan Pablo Isaza Denunciar

0

1 Sí, los datos de los componentes se borran cuando navega de un componente a otro. si desea hacer algo antes de que el componente se destruya, puede usar el método ngOnDestroy Lifecycle del componente.

2 puede usar el servicio para almacenar datos mientras navega entre componentes.

almost 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda