Я сделал один планировщик для планирования какой-то задачи
public class CronTriggerApp {
@SuppressWarnings("rawtypes")
public static void main(String[] args) throws Exception {
System.out.println("****************************************************************************");
System.out.println("* *");
System.out.println("* Note : Please Place Jar and Properties file in same Folder *");
System.out.println("* *");
System.out.println("****************************************************************************");
Properties cronProp = Utility.getPropFileData();
Set set = cronProp.entrySet();
Iterator itr = set.iterator();
while (itr.hasNext()) {
Map.Entry entry = (Map.Entry) itr.next();
String propKey = (String)entry.getKey();
String propValue = (String)entry.getValue();
String timeArr[] = propValue.split(":");
String seconds = timeArr[2];
String minuts = timeArr[1];
String hour = timeArr[0];
String cronExp = seconds.trim()+" "+minuts.trim()+" "+hour.trim()+" "+"? "+ "* "+ "MON-FRI";
System.out.println("Is Valid Time Declaration: "+CronExpression.isValidExpression(cronExp));
if(CronExpression.isValidExpression(cronExp)) {
JobDataMap map = new JobDataMap();
map.put("TAG", propKey);
JobKey jobKey = new JobKey("jobObj"+propKey, "group"+propKey);
JobDetail jobObj = JobBuilder.newJob(ScheduleTask.class).withIdentity(jobKey).setJobData(map).build();
//CRON_SCHEDULE = 0 46 11,12 ? * MON-FRI
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("TriggerName"+propKey, "group"+propKey)
.withSchedule(CronScheduleBuilder.cronSchedule(cronExp)).build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(jobObj, trigger);
}else {
System.out.println("Please Provide Time in HOUR:MINUTS:SECONDS[(0-23):(1-59):(1-59)] Formate for "+propKey);
}
}
}
когда триггер выполнения ниже класса будет вызываться
public class ScheduleTask implements Job {
@SuppressWarnings("static-access")
public void execute(JobExecutionContext arg) throws JobExecutionException{
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println("Today's Date time : "+dtf.format(now));
OutputStream stdin = null;
BufferedReader stdError = null;
BufferedReader stdInput = null;
JobDataMap jobDataObj = arg.getMergedJobDataMap();
String tag = (String)jobDataObj.get("TAG");
System.out.println(tag);
//"OB" "Opening Bell" "Sensex:45,778,Nifty:75,888"
String headerAndmessage = SchedulerDto.pshNotification(tag);
String argumentParam = tag+" "+headerAndmessage;
Hashtable<String, String> hashTable = new Hashtable<String, String> ();
hashTable.put("REQDATA",headerAndmessage);
hashTable.put("ACTION","I");
String uniqueId = SchedulerDto.reqRespLog(hashTable);
File file = new File("");
String filepath = file.getAbsolutePath()+file.separator+"IVLGenericAlerts.jar";
String cmdwithArg =" java -jar " +filepath+" "+argumentParam ;
System.out.println("command and jar path detail with database response: "+cmdwithArg);
try {
// suppose cmdWithArg is java -jar D:\\user_workspace\\IVLGenericAlerts.jar
**Process process = Runtime.getRuntime().exec(cmdwithArg);**
stdin = process.getOutputStream ();
stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
System.out.println("Here is the standard output of the command:");
String lastLine = null;
String currentLine = null;
System.out.println("is output" + (currentLine = stdInput.readLine()) != null);
while ((currentLine = stdInput.readLine()) != null) {
lastLine = currentLine;
System.out.println("abc");
System.out.println(currentLine);
}
System.out.println("before xml");
String xmlToJson = "<?xml version=\"1.0\" ?>"+lastLine;
JSONObject xmlJSONObj = XML.toJSONObject(xmlToJson);
String jsonPrettyPrintString = xmlJSONObj.toString();
JSONObject jsonObject = new JSONObject(jsonPrettyPrintString);
System.out.println(jsonObject);
JSONObject enp = (JSONObject)jsonObject.get("Envelope");
JSONObject Body = (JSONObject)enp.get("Body");
JSONObject RESULT = (JSONObject)Body.get("RESULT");
Object SUCCESS = RESULT.get("SUCCESS");
Object RecipientId = RESULT.get("RecipientId");
Object ORGANIZATION_ID = RESULT.get("SUCCESS");
hashTable.put("ACTION","U");
Map<String, String> hm = new HashMap<String, String>();
hm.put("SUCCESS", SUCCESS.toString());
hm.put("RecipientId", RecipientId.toString());
hm.put("ORGANIZATION_ID", ORGANIZATION_ID.toString());
hashTable.put("RESPDATA",hm.toString());
hashTable.put("UNIQUEID", uniqueId);
SchedulerDto.reqRespLog(hashTable);
//System.out.println(hashTable.toString());
System.out.println("Here is the standard error of the command (if any):\n");
System.out.println("in error");
stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while ((currentLine = stdError.readLine()) != null) {
System.out.println(currentLine);
}
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {
stdin.close();
stdError.close();
stdInput.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Вы можете видеть чуть выше класса String переменную cmdWithArg. когда я запускаю его из eclipse, это выдаст вывод, но когда я сделаю jar из eclipse с другим назначением, это не даст никакого вывода, мы используем наш пользовательский jar для вывода IVLGenericAlerts.jar . надеюсь, вы понимаете