Отправить автоматическое сообщение на указанную дату - PullRequest
1 голос
/ 11 марта 2019

Я сделал приложение для SMS с Java, которое работает как шарм. Я хочу, чтобы приложение отправляло SMS на указанную дату. Для этого я использую Quartz Job Scheduling. Сначала мне нужно, чтобы эти два приложения были связаны друг с другом. Затем мне нужно, чтобы Quartz собрал дату и время из списка (можно превзойти список) и отправить сообщение. Это возможно? Ценю любую помощь.

Вот приложение сообщения:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.commons.codec.binary.Base64;

public class SMSApplication {

    public static void main(String[] args) {

        try {
            String phoneNumber = "+XXXXXXXXX";
            String appKey = "XXXXXXX";
            String appSecret = "XXXXXXXX";
            String message = "Hello world!";

            URL url = new URL("https://messagingapi.sinch.com/v1/sms/" + phoneNumber);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json");

            String userCredentials = "application\\" + appKey + ":" + appSecret;
            byte[] encoded = Base64.encodeBase64(userCredentials.getBytes());
            String basicAuth = "Basic " + new String(encoded);
            connection.setRequestProperty("Authorization", basicAuth);

            String postData = "{\"Message\":\"" + message + "\"}";
            OutputStream os = connection.getOutputStream();
            os.write(postData.getBytes());

            StringBuilder response = new StringBuilder();
            BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));

            String line;
            while ( (line = br.readLine()) != null)
                response.append(line);

            br.close();
            os.close();

            System.out.println(response.toString());

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

Вот класс работы Кварц:

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class QuartzJob implements Job{

    @Override
    public void execute(JobExecutionContext jec) throws JobExecutionException {

            System.out.println("Hello");
            System.out.println(new Date())
    }
   }

А вот Кварц основной класс:

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.ScheduleBuilder;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;


public class QuartzMain {

    public static void main(String[] args) throws SchedulerException {

        JobDetail job = JobBuilder.newJob(QuartzJob.class).build();

        Trigger tl = TriggerBuilder.newTrigger().withIdentity("SimpleTrigger").startNow().build();

        Scheduler sc = StdSchedulerFactory.getDefaultScheduler();

        sc.start();
        sc.scheduleJob(job, tl);

    }}

1 Ответ

0 голосов
/ 12 марта 2019
Чтобы начать с определенной даты:

В триггере замените .startNow() на .startAt(date) с датой, равной java.util.Date, которая представляет дату и время, когда он должен начаться.

Для подключения:

В вашем классе заданий Quartz вызовите метод sendSMS () (в настоящее время ваш основной метод в SMSApplication), и любые переменные (например, номер телефона) должны быть переданы в класс задания в компоновщике заданий с помощью .usingJobData("key","value"). См. http://www.quartz -scheduler.org / Documentation / quartz-2.3.0 / и ознакомьтесь с Руководствами и Поваренной книгой для получения дополнительной информации.

...