在给定日期发送自动消息

时间:2019-03-11 08:41:17

标签: java sms quartz-scheduler sinch

我已经用Java制作了一个SMS应用程序,它的工作原理像个魅力。我希望应用程序在给定的日期发送短信。我正在为此使用Quartz Job Scheduling。首先,我需要将这两个应用程序相互连接。然后,我需要Quartz从列表(可以是excel列表)中收集日期和时间并发送消息。这可能吗?感谢任何帮助。

这是消息应用程序:

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();
        }

    }

}

这是Quartz作业类:

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())
    }
   }

这是Quartz主类:

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 :(得分:0)

要从给定的日期开始:

在触发器中,将.startNow()替换为.startAt(date),日期为java.util.Date,代表它应开始的日期和时间。

连接:

在您的Quartz作业类中,调用sendSMS()方法(当前是SMSApplication中的主要方法),所有变量(例如电话号码)都应使用.usingJobData("key","value")传递到作业构造器中的作业类。请参阅http://www.quartz-scheduler.org/documentation/quartz-2.3.0/,并通读教程和食谱以获取更多信息。