Hola, que tal, Structs 2 porque no Springframework ? pero bueno que mas da
bueno mira, usa
https://mvnrepository.com/artifact/org.quartz-scheduler/quartz/2.3.0
Esto te ayuda a crear la expresion de cron http://www.cronmaker.com/
creas una clase que implente a Job, en ese metodo execute manda el mail
En tu clase que implementa el ServletContextListener dentro del método
Con Springboot seria mas facil aun, menos codigo y sin .xml
Y otra cosa importante la operación de envío del mail puedes ejecutarla de manera asíncrona, hay mucha maneras de hacerlo con java, hará que tu aplicación no se bloquee, mas reactiva
bueno mira, usa
https://mvnrepository.com/artifact/org.quartz-scheduler/quartz/2.3.0
Código
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency>
Código
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api --> <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.6.2</version> </dependency>
Esto te ayuda a crear la expresion de cron http://www.cronmaker.com/
creas una clase que implente a Job, en ese metodo execute manda el mail
Código
public class TimerClass implements Job { public TimerClass() { } @Override public void execute(JobExecutionContext jobExecutionContext) { //Logica del mail aqui try { }catch(JobExecutionException ex) { } } }
En tu clase que implementa el ServletContextListener dentro del método
Código
public void contextInitialized(ServletContextEvent param){ new ExecTimer(); }
Código
public class ExecTimer { private JobDetail job; private Trigger trigger; private Scheduler scheduler; //seg,min,hora,dia,mes,diaSemana,Año(Opcional) //todos los viernes a las 6:30AM public ExecTimer() { initTask(); } private void initTask() { try { job = JobBuilder.newJob(TimerClass.class) .withIdentity("EnviarMail") .build(); trigger = TriggerBuilder .newTrigger() .withSchedule(CronScheduleBuilder.cronSchedule(FECHA_FUTURA)) .build(); scheduler = new StdSchedulerFactory().getScheduler(); scheduler.start(); scheduler.scheduleJob(job, trigger); } catch (SchedulerException e) { e.printStackTrace(); } } }
Con Springboot seria mas facil aun, menos codigo y sin .xml
Código
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @EnableScheduling @SpringBootApplication public class Application { SpringApplication.run(Application.class); } }
Código
@Scheduled(cron= "00 30 6 ? * FRI") public void enviarMail() { }
Y otra cosa importante la operación de envío del mail puedes ejecutarla de manera asíncrona, hay mucha maneras de hacerlo con java, hará que tu aplicación no se bloquee, mas reactiva
Buenas rub'n, estoy implementando ahora esto que me comentaste, pero olvidé preguntarte algo importante que no comprendo.
¿Como puedo hacer para programar la tarea del envío del correo un mes despues de que un usuario realice un evento (alta en base de datos) ? Es decir, que en cuanto el usuario realice el evento, se programe la tarea.
Lo que no veo es como llamar desde la clase que gestiona el alta en base de datos a execTimer para pasarle la fecha en la que se debe enviar el correo.
De nuevo gracias por tu ayuda.