Cita de: rub'n en 5 Octubre 2018, 04:38 AM
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.0Código (xml) [Seleccionar]<!-- 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 (xml) [Seleccionar]<!-- 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 mailCódigo (java) [Seleccionar]public class TimerClass implements Job {
public TimerClass() {
}
@Override
public void execute(JobExecutionContext jobExecutionContext) {
//Logica del mail aqui
try {
System.out.println("Hola");
}catch(JobExecutionException ex) {
}
}
}
En tu clase que implementa el ServletContextListener dentro del métodoCódigo (java) [Seleccionar]public void contextInitialized(ServletContextEvent param){
new ExecTimer();
}Código (java) [Seleccionar]public class ExecTimer {
private JobDetail job;
private Trigger trigger;
private Scheduler scheduler;
private static final String TWENTY_SEC = "0/20 * * * * ?"; //cada 20 segundos
//seg,min,hora,dia,mes,diaSemana,Año(Opcional)
//todos los viernes a las 6:30AM
private static final String FECHA_FUTURA = "00 30 6 ? * FRI"; // http://www.cronmaker.com/
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 .xmlCódigo (java) [Seleccionar]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 {
public static void main(String ...blabla) {
SpringApplication.run(Application.class);
}
}Código (java) [Seleccionar]
@Scheduled(cron= "00 30 6 ? * FRI")
public void enviarMail() {
System.out.println("Hola, ");
}
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.