我使用石英调度程序自动运行进程。但它没有奏效。我按照以下步骤构建了该过程。
这是我的第一步,
BackUpModeOperator backUpModeOperator = new BackUpModeOperator();
backUpModeOperator.createBackUpMode();
BackUpMode backUpMode = backUpModeOperator.getBackUpMode(1);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
int day_of_week = c.get(Calendar.DAY_OF_WEEK);
System.out.println("Day Of Week - " + day_of_week);
int HOUR = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
int MINUTE = Calendar.getInstance().get(Calendar.MINUTE);
AutoBackUp autoBackUp = new AutoBackUp();
if (backUpMode != null)
{
if (backUpMode.isMode() == true)
{
String day = backUpMode.getDay();
String[] split = day.split(",");
for (String split1 : split)
{
Integer dt = Integer.parseInt(split1);
System.out.println("dt - " + split1);
if (dt == day_of_week)
{
if (backUpMode.getBackUpTime() != null)
{
Time backUpTime = backUpMode.getBackUpTime();
String toString = backUpTime.toString();
String[] split2 = toString.split(":");
Integer hour = 0;
Integer minute = 0;
for (int j = 0; j < split2.length; j++)
{
hour = Integer.parseInt(split2[0]);
minute = Integer.parseInt(split2[1]);
}
if (HOUR == hour && MINUTE == minute)
{
try
{
autoBackUp.createAutoBackUp(HOUR, MINUTE);
} catch (SchedulerException ex)
{
ex.printStackTrace();
}
} else
{
}
}
break;
}
}
}
}
然后我构建了一个调度程序类,
AutoBackUp.java
import java.util.Date;
import static org.quartz.DateBuilder.todayAt;
import static org.quartz.DateBuilder.tomorrowAt;
import static org.quartz.JobBuilder.newJob;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import org.quartz.Trigger;
import static org.quartz.TriggerBuilder.newTrigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
public class AutoBackUp
{
Scheduler scheduler;
int dayHour;
int dayMinute;
public void createAutoBackUp(int hour, int minute) throws SchedulerException
{
scheduler = new StdSchedulerFactory().getScheduler();
JobKey backUpJobKey = new JobKey("backUpJob", "backUpGroup");
TriggerKey backUpTriggerKey = new TriggerKey("backUpTrigger", "backUpTriggerGroup");
boolean checkExists = scheduler.checkExists(backUpJobKey);
dayHour = hour;
dayMinute = minute;
scheduleJob(AutoBackupCreator.class, checkExists, backUpJobKey, backUpTriggerKey, dayHour, dayMinute);
}
private void scheduleJob(Class c, boolean checkExists, JobKey jobKey, TriggerKey triggerKey, int day_hour, int day_minute)
{
System.out.println("Print First Line");
JobDetail jobDetail = null;
if (c.isInstance(new AutoBackupCreator()))
{
System.out.println("Print Second Line");
jobDetail = newJob(AutoBackupCreator.class).withIdentity(jobKey).build();
}
System.out.println("Print Third Line");
Date providedDate = todayAt(day_hour, day_minute, 0);
Date currentDate = new Date();
System.out.println("Print Fourth Line");
if (currentDate.before(providedDate))
{
System.out.println("todayAt() can be perfomed");
} else
{
System.out.println("tomorrowAt() can be perfomed");
}
Trigger trigger = newTrigger().withIdentity(triggerKey)
.withSchedule(simpleSchedule().withIntervalInHours(24).repeatForever())
.startAt(currentDate.before(providedDate) ? (todayAt(day_hour, day_minute, 0)) : (tomorrowAt(day_hour, day_minute, 0))).build();
try
{
if (checkExists)
{
scheduler.start();
scheduler.rescheduleJob(triggerKey, trigger);
System.out.println("Job Re-scheduled");
} else
{
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
System.out.println("Job Scheduled");
}
} catch (SchedulerException ex)
{
ex.printStackTrace();
}
}
}
此自动任务基于预先保存的时间。
这是我的最后一步,
AutoBackupCreator.java
import com.theace.backupsystem.bean.SaveFileLocations;
import com.theace.backupsystem.compression.CompressFolder;
import com.theace.backupsystem.operations.LocationOperator;
import java.io.File;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileSystemView;
import org.apache.commons.io.FileUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class AutoBackupCreator implements Job
{
public static File temp;
@Override
public void execute(JobExecutionContext jec) throws JobExecutionException
{
runAutomatedBackUp();
}
public void runAutomatedBackUp()
{
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String bacDate = dateFormat.format(date);
LocationOperator locationOperator = new LocationOperator();
SaveFileLocations lastRecord = locationOperator.getLastRecord();
FileSystemView fsv = FileSystemView.getFileSystemView();
List<File> files = new ArrayList<>();
List<File> srcFiles = new ArrayList<>();
SaveFileLocations fileLocations = new SaveFileLocations();
if (lastRecord != null)
{
String srcfileLocation = lastRecord.getSrcfileLocation();
String[] srcFile = srcfileLocation.split(",");
long size = 0;
for (String srcFile1 : srcFile)
{
File file = new File(srcFile1);
if (file.exists() == true)
{
files.add(file);
} else
{
JOptionPane.showMessageDialog(null, "There isn't such a file.", "Warning", 1);
break;
}
}
for (int i = 0; i < files.size(); i++)
{
long sizeOfFiles = FileUtils.sizeOf(files.get(i));
size = size + sizeOfFiles;
}
double fileSizes = size / (1024 * 1024);
for (int i = 0; i < files.size(); i++)
{
if (fsv.getSystemTypeDescription(files.get(i)).contains("Local Disk")
|| fsv.getSystemTypeDescription(files.get(i)).contains("Removable Disk"))
{
long usableSpace = files.get(i).getUsableSpace();
double partitionSize = usableSpace / (1024 * 1024);
if (partitionSize > fileSizes)
{
temp = new File(files.get(i).getAbsolutePath() + "\\" + bacDate + "_backup");
temp.mkdir();
} else
{
JOptionPane.showMessageDialog(null, "There is low disk space", "Warning", 1);
}
}
}
for (int i = 0; i < files.size(); i++)
{
if (files.get(i).isDirectory())
{
try
{
FileUtils.copyDirectoryToDirectory(files.get(i), temp);
srcFiles.add(files.get(i));
} catch (IOException ex)
{
ex.printStackTrace();
}
} else if (files.get(i).isFile())
{
try
{
FileUtils.copyFileToDirectory(files.get(i), temp);
srcFiles.add(files.get(i));
} catch (IOException ex)
{
ex.printStackTrace();
}
}
}
StringBuilder stringBuilder = new StringBuilder();
String first = null;
CompressFolder compressFolder = new CompressFolder();
if (lastRecord.getDestinationLocation().contains(".zip"))
{
try
{
File nFile = new File(new File(lastRecord.getDestinationLocation()).getAbsolutePath() + "\\" + bacDate + "_backup.zip");
compressFolder.createZip(temp.getPath(), nFile.getPath());
try
{
for (int i = 0; i < srcFiles.size(); i++)
{
stringBuilder.append(srcFiles.get(i).getPath());
stringBuilder.append(",");
}
first = stringBuilder.toString();
first = first.trim();
first = first.substring(0, first.length() - 1);
} finally
{
stringBuilder = null;
}
fileLocations.setLocationId(lastRecord.getLocationId());
fileLocations.setSrcfileLocation(first);
fileLocations.setDestinationLocation(nFile.getPath());
Timestamp currentTimestamp = getCurrentTimestamp();
fileLocations.setSaveDate(currentTimestamp);
String result = locationOperator.updateSavedLocation(fileLocations);
if (result != null)
{
Integer integer = Integer.parseInt(result);
if (integer > 0)
{
FileUtils.deleteDirectory(temp);
JOptionPane.showMessageDialog(null, "Backup Created ", "Success", 1);
} else
{
JOptionPane.showMessageDialog(null, "Backup Failed ", "Warning", 1);
}
}
} catch (Exception ex)
{
ex.printStackTrace();
}
} else if (lastRecord.getDestinationLocation().contains(".tar"))
{
try
{
File nFile = new File(new File(lastRecord.getDestinationLocation()).getAbsolutePath() + "\\" + bacDate + "_backup.tar");
compressFolder.createTar(temp.getPath(), nFile.getPath());
try
{
for (int i = 0; i < srcFiles.size(); i++)
{
stringBuilder.append(srcFiles.get(i).getPath());
stringBuilder.append(",");
}
first = stringBuilder.toString();
first = first.trim();
first = first.substring(0, first.length() - 1);
} finally
{
stringBuilder = null;
}
fileLocations.setLocationId(lastRecord.getLocationId());
fileLocations.setSrcfileLocation(first);
fileLocations.setDestinationLocation(nFile.getPath());
Timestamp currentTimestamp = getCurrentTimestamp();
fileLocations.setSaveDate(currentTimestamp);
String result = locationOperator.updateSavedLocation(fileLocations);
if (result != null)
{
Integer integer = Integer.parseInt(result);
if (integer > 0)
{
FileUtils.deleteDirectory(temp);
JOptionPane.showMessageDialog(null, "Backup Created ", "Success", 1);
} else
{
JOptionPane.showMessageDialog(null, "Backup Failed ", "Warning", 1);
}
}
} catch (Exception ex)
{
ex.printStackTrace();
}
} else if (lastRecord.getDestinationLocation().contains(".tar.gz"))
{
try
{
File nFile = new File(new File(lastRecord.getDestinationLocation()).getAbsolutePath() + "\\" + bacDate + "_backup.tar.gz");
compressFolder.createTar(temp.getPath(), nFile.getPath());
try
{
for (int i = 0; i < srcFiles.size(); i++)
{
stringBuilder.append(srcFiles.get(i).getPath());
stringBuilder.append(",");
}
first = stringBuilder.toString();
first = first.trim();
first = first.substring(0, first.length() - 1);
} finally
{
stringBuilder = null;
}
fileLocations.setLocationId(lastRecord.getLocationId());
fileLocations.setSrcfileLocation(first);
fileLocations.setDestinationLocation(nFile.getPath());
Timestamp currentTimestamp = getCurrentTimestamp();
fileLocations.setSaveDate(currentTimestamp);
String result = locationOperator.updateSavedLocation(fileLocations);
if (result != null)
{
Integer integer = Integer.parseInt(result);
if (integer > 0)
{
FileUtils.deleteDirectory(temp);
JOptionPane.showMessageDialog(null, "Backup Created ", "Success", 1);
} else
{
JOptionPane.showMessageDialog(null, "Backup Failed ", "Warning", 1);
}
}
} catch (Exception ex)
{
ex.printStackTrace();
}
} else if (lastRecord.getDestinationLocation().contains(".gz"))
{
try
{
File nFile = new File(new File(lastRecord.getDestinationLocation()).getAbsolutePath() + "\\" + bacDate + "_backup.gz");
compressFolder.createTar(temp.getPath(), nFile.getPath());
try
{
for (int i = 0; i < srcFiles.size(); i++)
{
stringBuilder.append(srcFiles.get(i).getPath());
stringBuilder.append(",");
}
first = stringBuilder.toString();
first = first.trim();
first = first.substring(0, first.length() - 1);
} finally
{
stringBuilder = null;
}
fileLocations.setLocationId(lastRecord.getLocationId());
fileLocations.setSrcfileLocation(first);
fileLocations.setDestinationLocation(nFile.getPath());
Timestamp currentTimestamp = getCurrentTimestamp();
fileLocations.setSaveDate(currentTimestamp);
String result = locationOperator.updateSavedLocation(fileLocations);
if (result != null)
{
Integer integer = Integer.parseInt(result);
if (integer > 0)
{
FileUtils.deleteDirectory(temp);
JOptionPane.showMessageDialog(null, "Backup Created ", "Success", 1);
} else
{
JOptionPane.showMessageDialog(null, "Backup Failed ", "Warning", 1);
}
}
} catch (Exception ex)
{
ex.printStackTrace();
}
} else
{
File file = new File(new File(lastRecord.getDestinationLocation()).getAbsolutePath() + "\\" + bacDate + "_backup");
file.mkdir();
try
{
FileUtils.copyDirectoryToDirectory(temp, file);
FileUtils.deleteDirectory(temp);
} catch (Exception ex)
{
ex.printStackTrace();
}
}
}
}
public Timestamp getCurrentTimestamp()
{
Date date = new Date();
Timestamp timestamp = new Timestamp(date.getTime());
return timestamp;
}
}
这总是触发tomorrowAt()
,但我想触发今天()。
对此有任何想法。
谢谢。