#java #sms #quartz-scheduler #sinch
#java #sms #quartz-планировщик #sinch
Вопрос:
Я создал SMS-приложение на 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. «Возможно ли это? Ценю любую помощь.», это очень широко и расплывчато — не могли бы вы уточнить в своем вопросе, о чем вы спрашиваете, и как это связано с опубликованным кодом?
2. Мне очень жаль. Я совсем новичок на этом форуме и совсем новичок в программировании. Я в принципе не знаю, как подключить SMS-приложение и Quartz? Я видел пару примеров с электронными письмами вместо SMS, но я все еще не понял, какая часть кода их соединяла. Я просто хочу сказать приложению Quartz отправить сообщение с помощью приложения SMS.
3. Эй, почему бы тебе просто не переместить код (или не создать класс, который не является основным из функциональности sms, и не переместить его в yoru job, где ты печатаешь hello world
4. Это отличная идея. Какой метод лучше? Переместить код или создать класс? Вы также знаете, как я могу включить класс SMS для выполнения действий при активации Quartz?
Ответ №1:
В триггере замените .startNow()
на .startAt(date)
, где date является java.util.Date
, представляющим дату и время, когда оно должно начаться.
Для подключения:
В вашем классе заданий Quartz вызовите свой метод sendSMS() (в настоящее время ваш основной метод в SMSApplication) любые переменные (такие как номер телефона) должны быть переданы классу job в сборщике заданий с помощью .usingJobData("key","value")
. Смотрите http://www.quartz-scheduler.org/documentation/quartz-2.3.0 и прочитайте руководства и кулинарную книгу для получения дополнительной информации.
Комментарии:
1. Большое вам спасибо. Это мне очень помогает.