elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Envío de correo programado en otra fecha en Java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Envío de correo programado en otra fecha en Java  (Leído 5,795 veces)
olimpico10

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Envío de correo programado en otra fecha en Java
« en: 4 Octubre 2018, 20:55 pm »

Buenas tardes,

estoy desarrollando una aplicación web con Java en el framework Struts2. Necesito que, a los X dias de realizar una acción en mi programa, se envíe un correo recordatorio a una dirección de email especifica de forma automática. Se como puedo enviar correos usando la API JAVA MAIL, pero no se si existe algún servicio o alguna cosa que pueda utilizar para programar el envío en una fecha concreta del futuro.

Agradezco vuestra ayuda de antemano, un saludo.


En línea

3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: Envío de correo programado en otra fecha en Java
« Respuesta #1 en: 4 Octubre 2018, 21:41 pm »

Hola amigo, eso comúnmente se programa aparte como parte de una tarea automática realiza por el SO. Puedes leer al respecto a continuación:

https://es.wikipedia.org/wiki/Cron_(Unix)

Por lo regular se programa un cron para que cada 24 horas acceda a una URL de tu servicio web (en este caso Java), que a su vez, verifique la base de datos y vea a quienes hay que enviarle correos, posterior a esto los envié.

Si haces esto, hay dos cosas que tienes que tener en consideración:
1. Crea un token de seguridad que impida que un usuario común pueda acceder a dicha URL.
2. Guarda un registro que impida que la query se ejecute 2 veces en un mismo día, por error.

La razón de estas dos recomendaciones surge a partir de una falla de seguridad que tenia wordpress que permitía que un usuario común accediera a la URL encargada de enviar correos de felicitaciones a usuarios que estuvieran de cumpleaños. Esta URL era llamada mediante un cron, y por tanto si tu accedías 1000 veces, se enviaban 1000 correos.


En línea

olimpico10

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Envío de correo programado en otra fecha en Java
« Respuesta #2 en: 4 Octubre 2018, 23:25 pm »

Hola 3n31ch, gracias por tu respuesta, imaginaba que sería así, era por confirmar. Me pondré a ello a ver como puedo hacerlo. Tengo que ver como programar en Struts 2 una URL de este tipo, y controlar la seguridad. ¿Podrias darme alguna directriz al respecto si conoces el framework? Gracias de antemano.

Por cierto, buscando por ahí encontre lo siguiente:

http://www.quartz-scheduler.org/

Es una librería que, al parecer, sirve para postergar la ejecución de código, lo que no tengo ni idea es de como funcionará, ya que entiendo que por supuesto esto debe ser el SO quien lo realice, no se como interactuará la librería con el. ¿Que te parece la librería a simple vista? ¿La conoces?

Un saludo.
En línea

3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: Envío de correo programado en otra fecha en Java
« Respuesta #3 en: 5 Octubre 2018, 00:21 am »

Lo lamento, mas de lo que ya te he dicho no te puedo ayudar.

PD: Puede ser una URL como también puede ser un programa en java de consola. Da igual..
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Envío de correo programado en otra fecha en Java
« Respuesta #4 en: 5 Octubre 2018, 04:38 am »

Hola, que tal, Structs 2  >:( porque no Springframework :D ? pero bueno que mas da

bueno mira, usa


https://mvnrepository.com/artifact/org.quartz-scheduler/quartz/2.3.0

Código
  1. <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
  2. <dependency>
  3.    <groupId>org.quartz-scheduler</groupId>
  4.    <artifactId>quartz</artifactId>
  5.    <version>2.3.0</version>
  6. </dependency>

Código
  1. <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
  2. <dependency>
  3.    <groupId>javax.mail</groupId>
  4.    <artifactId>javax.mail-api</artifactId>
  5.    <version>1.6.2</version>
  6. </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
  1. public class TimerClass implements Job {
  2.  
  3.    public TimerClass() {
  4.  
  5.    }
  6.  
  7.    @Override
  8.    public void execute(JobExecutionContext jobExecutionContext) {
  9.         //Logica del mail aqui
  10.          try {
  11.               System.out.println("Hola");
  12.          }catch(JobExecutionException  ex) {
  13.          }
  14.  
  15.    }
  16. }
  17.  

En tu clase que implementa el ServletContextListener dentro del método

Código
  1. public void contextInitialized(ServletContextEvent param){
  2. new ExecTimer();
  3. }
  4.  

Código
  1. public class ExecTimer {
  2.  
  3.    private JobDetail job;
  4.    private Trigger trigger;
  5.    private Scheduler scheduler;
  6.  
  7.    private static final String TWENTY_SEC = "0/20 * * * * ?"; //cada 20 segundos
  8.  
  9.                                      //seg,min,hora,dia,mes,diaSemana,Año(Opcional)
  10.                                              //todos los viernes a las 6:30AM
  11.    private static final String FECHA_FUTURA = "00 30 6 ? * FRI";   // http://www.cronmaker.com/
  12.  
  13.  
  14.    public ExecTimer() {
  15.        initTask();
  16.    }
  17.  
  18.    private void initTask() {
  19.        try {
  20.            job = JobBuilder.newJob(TimerClass.class)
  21.                    .withIdentity("EnviarMail")
  22.                    .build();
  23.            trigger = TriggerBuilder
  24.                    .newTrigger()
  25.                    .withSchedule(CronScheduleBuilder.cronSchedule(FECHA_FUTURA))
  26.                    .build();
  27.            scheduler = new StdSchedulerFactory().getScheduler();
  28.            scheduler.start();
  29.            scheduler.scheduleJob(job, trigger);
  30.        } catch (SchedulerException e) {
  31.            e.printStackTrace();
  32.        }
  33.    }
  34. }

Con Springboot seria mas facil aun, menos codigo y sin .xml  >:D

Código
  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.scheduling.annotation.EnableAsync;
  4. import org.springframework.scheduling.annotation.EnableScheduling;
  5.  
  6. @EnableScheduling
  7. @SpringBootApplication
  8. public class Application {
  9.  
  10.    public static void main(String ...blabla) {
  11.        SpringApplication.run(Application.class);
  12.    }
  13.  
  14. }
  15.  


Código
  1.  
  2. @Scheduled(cron= "00 30 6 ? * FRI")
  3. public void enviarMail() {
  4.    System.out.println("Hola, ");
  5. }
  6.  

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  :D
« Última modificación: 5 Octubre 2018, 05:37 am por rub'n » En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
olimpico10

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Envío de correo programado en otra fecha en Java
« Respuesta #5 en: 7 Octubre 2018, 17:36 pm »

Buenas rub'n ,

estoy conociendo ahora Structs 2, y la verdad es que me está gustando como framework, Springframework no lo he trabajado aun.

En cuanto a tus indicaciones, muchas gracias, lo intentaré así. En cualquier caso, sabes como funciona exactamente Quartz internamente? Me refiero a como programa los trabajos. (Esto último es solo curiosidad  :laugh:)

Un saludo.
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Envío de correo programado en otra fecha en Java
« Respuesta #6 en: 9 Octubre 2018, 01:56 am »

Buenas rub'n ,

estoy conociendo ahora Structs 2, y la verdad es que me está gustando como framework, Springframework no lo he trabajado aun.

En cuanto a tus indicaciones, muchas gracias, lo intentaré así. En cualquier caso, sabes como funciona exactamente Quartz internamente? Me refiero a como programa los trabajos. (Esto último es solo curiosidad  :laugh:)

Un saludo.

Pues desde luego que no, guíate por su API  ;D
En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
olimpico10

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Envío de correo programado en otra fecha en Java
« Respuesta #7 en: 24 Octubre 2018, 21:16 pm »

Hola, que tal, Structs 2  >:( porque no Springframework :D ? pero bueno que mas da

bueno mira, usa


https://mvnrepository.com/artifact/org.quartz-scheduler/quartz/2.3.0

Código
  1. <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
  2. <dependency>
  3.    <groupId>org.quartz-scheduler</groupId>
  4.    <artifactId>quartz</artifactId>
  5.    <version>2.3.0</version>
  6. </dependency>

Código
  1. <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
  2. <dependency>
  3.    <groupId>javax.mail</groupId>
  4.    <artifactId>javax.mail-api</artifactId>
  5.    <version>1.6.2</version>
  6. </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
  1. public class TimerClass implements Job {
  2.  
  3.    public TimerClass() {
  4.  
  5.    }
  6.  
  7.    @Override
  8.    public void execute(JobExecutionContext jobExecutionContext) {
  9.         //Logica del mail aqui
  10.          try {
  11.               System.out.println("Hola");
  12.          }catch(JobExecutionException  ex) {
  13.          }
  14.  
  15.    }
  16. }
  17.  

En tu clase que implementa el ServletContextListener dentro del método

Código
  1. public void contextInitialized(ServletContextEvent param){
  2. new ExecTimer();
  3. }
  4.  

Código
  1. public class ExecTimer {
  2.  
  3.    private JobDetail job;
  4.    private Trigger trigger;
  5.    private Scheduler scheduler;
  6.  
  7.    private static final String TWENTY_SEC = "0/20 * * * * ?"; //cada 20 segundos
  8.  
  9.                                      //seg,min,hora,dia,mes,diaSemana,Año(Opcional)
  10.                                              //todos los viernes a las 6:30AM
  11.    private static final String FECHA_FUTURA = "00 30 6 ? * FRI";   // http://www.cronmaker.com/
  12.  
  13.  
  14.    public ExecTimer() {
  15.        initTask();
  16.    }
  17.  
  18.    private void initTask() {
  19.        try {
  20.            job = JobBuilder.newJob(TimerClass.class)
  21.                    .withIdentity("EnviarMail")
  22.                    .build();
  23.            trigger = TriggerBuilder
  24.                    .newTrigger()
  25.                    .withSchedule(CronScheduleBuilder.cronSchedule(FECHA_FUTURA))
  26.                    .build();
  27.            scheduler = new StdSchedulerFactory().getScheduler();
  28.            scheduler.start();
  29.            scheduler.scheduleJob(job, trigger);
  30.        } catch (SchedulerException e) {
  31.            e.printStackTrace();
  32.        }
  33.    }
  34. }

Con Springboot seria mas facil aun, menos codigo y sin .xml  >:D

Código
  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.scheduling.annotation.EnableAsync;
  4. import org.springframework.scheduling.annotation.EnableScheduling;
  5.  
  6. @EnableScheduling
  7. @SpringBootApplication
  8. public class Application {
  9.  
  10.    public static void main(String ...blabla) {
  11.        SpringApplication.run(Application.class);
  12.    }
  13.  
  14. }
  15.  


Código
  1.  
  2. @Scheduled(cron= "00 30 6 ? * FRI")
  3. public void enviarMail() {
  4.    System.out.println("Hola, ");
  5. }
  6.  

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  :D

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.
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Envío de correo programado en otra fecha en Java
« Respuesta #8 en: 25 Octubre 2018, 02:27 am »

Eso se puede ajustar agregando un método set o por el constructor del  

Código
  1. private String fecha;
  2. public ExecTimer(final String fecha) {
  3.    this.fecha = fecha;
  4.    initTask();
  5. }
  6.  

O con el método set

Código
  1. public void setFecha(final String fecha) {
  2.    this.fecha = fecha;
  3. }

Con guava event bus también sirve, dependiendo que tan acoplado este tu código  

Esta fecha futura es la que debemos de setear por lo antes nombrado

Código
  1. private static final String FECHA_FUTURA = "00 30 6 ? * FRI";

tu comentas

Citar
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.

justo en esa parte debería ver un trozo del código para ver que tal esta, recuerda que el método execute del TimerClass es donde debe ir tu logica cuando el usuario dispare algun evento

ver el entrypoint de tu aplicación es también importante.



Entonces refactorizando un poco crearemos nuestro builder para personalizar un poco homie, que se lo setearemos al método setTimeBean de la clase ExecTimer  :xD

el método toString le hacemos override para adaptarlo a nuestras necesidades  >:D, tanto day como month son requeridos sino la misma API de quartz atrapara el error en runtime XD

el string retornado es la expresión de cron


Código
  1.    @Override
  2.    public String toString() {
  3.        final StringBuilder stringBuilder = new StringBuilder()
  4.                .append(sec)
  5.                .append(" ")
  6.                .append(min)
  7.                .append(" ")
  8.                .append(hour)
  9.                .append(" ")
  10.                .append(day) // requeridp
  11.                .append(" ")
  12.                .append(month) // requerido
  13.                .append(" ")
  14.                .append("?");// opcional el YEAR XD
  15.        System.out.println("Expresion cron: "+stringBuilder.toString());
  16.        return stringBuilder.toString();


Código
  1. package foro;
  2.  
  3. public final class TimeBean {
  4.  
  5.    private final int sec;
  6.    private final int min;
  7.    private final int hour;
  8.    private final int day;
  9.    private final int month;
  10.  
  11.    private TimeBean(final Builder builder) {
  12.        this.sec = builder.sec;
  13.        this.min = builder.min;
  14.        this.hour = builder.hour;
  15.        this.day = builder.day;
  16.        this.month = builder.month;
  17.    }
  18.  
  19.    public int getSec() {
  20.        return sec;
  21.    }
  22.  
  23.    public int getMin() {
  24.        return min;
  25.    }
  26.  
  27.    public int getHour() {
  28.        return hour;
  29.    }
  30.  
  31.    public int getDay() {
  32.        return day;
  33.    }
  34.  
  35.    public int getMonth() {
  36.        return month;
  37.    }
  38.  
  39.    @Override
  40.    public String toString() {
  41.        final StringBuilder stringBuilder = new StringBuilder()
  42.                .append(sec)
  43.                .append(" ")
  44.                .append(min)
  45.                .append(" ")
  46.                .append(hour)
  47.                .append(" ")
  48.                .append(day)
  49.                .append(" ")
  50.                .append(month)
  51.                .append(" ")
  52.                .append("?");// opcional el YEAR XD
  53.        System.out.println("Expresion cron: "+stringBuilder.toString());
  54.        return stringBuilder.toString();
  55.    }
  56.  
  57.   public static class Builder {
  58.        private int sec;
  59.        private int min;
  60.        private int hour;
  61.        private int day;
  62.        private int month;
  63.  
  64.        public Builder withSec(final int sec) {
  65.            this.sec = sec;
  66.            return this;
  67.        }
  68.        public Builder withMin(final int min) {
  69.            this.min = min;
  70.            return this;
  71.        }
  72.        public Builder withHour(final int hour) {
  73.            this.hour = hour;
  74.            return this;
  75.        }
  76.        public Builder withDay(final int day) {
  77.            this.day = day;
  78.            return this;
  79.        }
  80.        public Builder withMonth(final int month) {
  81.            this.month = month;
  82.            return this;
  83.        }
  84.        public TimeBean build() {
  85.            return new TimeBean(this);
  86.        }
  87.    }
  88.  


Un ligero cambio a la clase ExecTimer

Código
  1. package foro;
  2.  
  3. import org.quartz.*;
  4. import org.quartz.impl.StdSchedulerFactory;
  5.  
  6. import java.util.Objects;
  7.  
  8. public class ExecTimer  {
  9.  
  10.    private JobDetail job;
  11.    private Trigger trigger;
  12.    private Scheduler scheduler;
  13.  
  14.    private TimeBean timeBean;
  15.  
  16.    public ExecTimer() {
  17.  
  18.    }
  19.  
  20.    public ExecTimer(final TimeBean timeBean) {
  21.        this.timeBean = Objects.requireNonNull(timeBean,()->"TimeBean sin instanciar crear builder");
  22.    }
  23.  
  24.    public void setTimeBean(final TimeBean timeBean) {
  25.        this.timeBean = Objects.requireNonNull(timeBean,()->"TimeBean sin instanciar crear builder");
  26.    }
  27.  
  28.    public void initTask() {
  29.        try {
  30.  
  31.            job = JobBuilder.newJob(TimerClass.class)
  32.                    .withIdentity("EnviarMail")
  33.                    .build();
  34.  
  35.            trigger = TriggerBuilder.newTrigger()
  36.                    .withIdentity("testing v1.1 para olimpico10", "group1")
  37.                    .withSchedule(CronScheduleBuilder.cronSchedule(timeBean.toString()))
  38.                    .build();
  39.  
  40.            scheduler = new StdSchedulerFactory().getScheduler();
  41.            scheduler.start();
  42.            scheduler.scheduleJob(job, trigger);
  43.  
  44.        } catch (SchedulerException e) {
  45.            e.printStackTrace();
  46.        }
  47.    }
  48. }
  49.  


Aquí esta clase ejecutara el ExecTimer a modo de ejemplo, tu puedes crear la tuya en tu proyecto para instanciar
Vemos 2 clases nuevas aquí ambas geniales con la nueva API de java.time



Código
  1. private final ZoneId zoneId = ZoneId.of("Europe/Madrid");
  2. private final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(),zoneId).plusSeconds(5);
  3.  


Este método añade 5 segundos despues de el actual al String final o mejor dicho a la Expresion cron homie


Código
  1. .plusSeconds(5);

Código
  1. package foro;
  2.  
  3. import java.time.Instant;
  4. import java.time.ZoneId;
  5. import java.time.ZonedDateTime;
  6.  
  7. public class ExcuteTaskOnNext {
  8.  
  9.    private ExecTimer execTimer = new ExecTimer();
  10.    private final ZoneId zoneId = ZoneId.of("Europe/Madrid");
  11.    private final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(),zoneId).plusSeconds(5);
  12.  
  13.    public ExcuteTaskOnNext() {
  14.        init();
  15.    }
  16.  
  17.    private void init() {
  18.  
  19.       final TimeBean timeBean = new TimeBean.Builder()
  20.                .withSec(zonedDateTime.getSecond())
  21.                .withMin(zonedDateTime.getMinute())
  22.                .withHour(zonedDateTime.getHour())
  23.                .withDay(zonedDateTime.getDayOfMonth())//el dia es requerido
  24.                .withMonth(zonedDateTime.getMonthValue()) //el mes es requrido
  25.                .build();
  26.  
  27.        execTimer.setTimeBean(timeBean);
  28.        execTimer.initTask();
  29.    }
  30.  
  31.    public static void main(String ...agaga) {
  32.        new ExcuteTaskOnNext();
  33.    }
  34. }
  35.  


Entonces vamos a lo siguiente tu me diras joderrr tiiioo, pero este chaval le digo mil veces que quiero mandar el fucking correo al mes siguiente  :xD

solo te tocara añadir esto  :xD


Código
  1. plusMonths(1)


nuestro builder podemos configurarlo de la siguente manera, o sea, valido también, si unicamente vas a usar el envio mensual


Código
  1. //para crear una tarea mensual el builder es valido asi segun cronmaker
  2.        final TimeBean timeBean = new TimeBean.Builder()
  3.                .withDay(zonedDateTime.getDayOfMonth())//el dia es requerido
  4.                .withMonth(zonedDateTime.getMonthValue()) //el mes es requrido
  5.                .build();
  6.  


si colocamos la expresion originada gracias a la linea 54 de la clase TimeBean Expresion cron: 0 0 0 25 11 ?

 en http://www.cronmaker.com/ tenemos


consta que debería crear el proyecto en struc2  :xD pero me da flojera quizás mañana, tu tienes que probar aunque sea mandando ese correo a los 5 segundos, pero no se como es tu código ahí




La clase ExcuteTaskOnNext a sido renombrada  RunNextTask , siendo una mejor versión

Código
  1. package com.example.javamail.executarnextmonth;
  2.  
  3. import com.example.javamail.util.GenericBuilder;
  4. import com.example.javamail.util.ShowData;
  5. import com.vaadin.spring.annotation.SpringComponent;
  6. import com.vaadin.ui.Label;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8.  
  9. import java.time.Instant;
  10. import java.time.ZoneId;
  11. import java.time.ZonedDateTime;
  12.  
  13. @SpringComponent
  14. public class RunNextTask implements ShowData {
  15.  
  16.    @Autowired
  17.    private ExecTimer execTimer;
  18.    private ZonedDateTime zonedDateTime;
  19.    private TimeBean timeBean;
  20.  
  21.  
  22.    public void initTimeBuilder(final Tiempos tiposTiempos, final Integer valueTime, Label label) {
  23.        try {
  24.            switch (tiposTiempos) {
  25.                case SEGUNDOS:
  26.                    zonedDateTime = getZoneDateTime().plusSeconds(valueTime);
  27.                    timeBean = getTimeBeanBuilder();
  28.                    break;
  29.                case MINUTOS:
  30.                    zonedDateTime = getZoneDateTime().plusMinutes(valueTime);
  31.                    timeBean = getTimeBeanBuilder();
  32.                    break;
  33.                case HORAS:
  34.                    zonedDateTime = getZoneDateTime().plusHours(valueTime);
  35.                    timeBean = getTimeBeanBuilder();
  36.                    break;
  37.                case MESES:
  38.                    zonedDateTime = getZoneDateTime().plusMonths(valueTime);
  39.                    timeBean = getTimeBeanBuilder();
  40.                    break;
  41.            }
  42.        }catch (Exception ex){
  43.            getLogger().error(null,ex);
  44.        }
  45.        execTimer.setTimeBean(timeBean);
  46.        label.setValue("Expresión cron "+timeBean.toString());
  47.        execTimer.initTask();
  48.    }
  49.  
  50.    /**
  51.      * Metodo de uso opcional
  52.      */
  53.    public void initTimeBeanMonth() {
  54.        final ZoneId zoneId = ZoneId.of("Europe/Madrid");
  55.        final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(),zoneId).plusMonths(1);
  56.        //para crear una tarea mensual el builder es valido asi segun cronmaker
  57.  
  58.        final TimeBean timeBean = GenericBuilder.of(TimeBean::new)
  59.                .with(TimeBean::setDay,zonedDateTime.getDayOfMonth())
  60.                .with(TimeBean::setMonth,zonedDateTime.getMonthValue())
  61.                .build();
  62.  
  63.        execTimer.setTimeBean(timeBean);
  64.        execTimer.initTask();
  65.    }
  66.  
  67.    private ZonedDateTime getZoneDateTime() {
  68.        return ZonedDateTime.ofInstant(Instant.now(),ZoneId.of("Europe/Madrid"));
  69.    }
  70.  
  71.    private TimeBean getTimeBeanBuilder() {
  72.        return GenericBuilder.of(TimeBean::new)
  73.                .with(TimeBean::setSec,this.zonedDateTime.getSecond())
  74.                .with(TimeBean::setMin,this.zonedDateTime.getMinute())
  75.                .with(TimeBean::setHour,this.zonedDateTime.getHour())
  76.                .with(TimeBean::setDay,this.zonedDateTime.getDayOfMonth())
  77.                .with(TimeBean::setMonth,this.zonedDateTime.getMonthValue())
  78.                .build();
  79.    }
  80. }


donde invocaremos al método initTimeBuilder, con 3 parámetros

  • El tipo de tiempo
  • El retardo
  • El label para mostrar la salida

Código
  1. @Autowired
  2. private RunNextTask runNextTask;
  3.  

Código
  1. runNextTask.initTimeBuilder(tiempo, valueTime, labelExpresionCron);

eso estará contenido en la clase FormEmailSender.java

> Opción guiarse por aquí

https://foro.elhacker.net/java/envio_de_emails_programados_con_springboot_vaadin_8_quartz-t489066.0.html
« Última modificación: 2 Mayo 2019, 13:05 pm por rub'n » En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programado para ejecutarse en fecha y hora
Programación Visual Basic
whiskises 1 1,797 Último mensaje 2 Agosto 2005, 00:47 am
por Slasher-K
Envio de Correo Con Php
PHP
yamatho 2 2,867 Último mensaje 27 Agosto 2010, 03:50 am
por yamatho
Problema en mi videojuego programado en JAVA, usando librerias Swing/AWT
Java
DarkSorcerer 2 5,048 Último mensaje 15 Marzo 2013, 05:52 am
por Kenkox
envio de correo
Software
ciberdelia 4 1,915 Último mensaje 27 Febrero 2014, 18:42 pm
por Sarbacán
[JAVA]Enviar parmetros tipo fecha de IN o Out Stored Procedures en Java
Java
elrepay 0 3,104 Último mensaje 17 Abril 2014, 04:32 am
por elrepay
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines