将有来自x设备的数据,我需要每隔15分钟将它们移动到文件中,请分享一些想法,我们如何在java中做到这一点
从java 1.5开始,java SE中就有了一个executor框架。
更具体地说,对于你的用例,类executor包含方法newsinglethreadscheduledexexecutor()。它将返回新的ScheduledExecutorService实例。使用该服务来安排您需要执行的一些Runnable实现工作。下面的代码片段说明了这个想法。
private final ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
final Runnable myWorkingRunnable = new Runnable() {
public void run() { System.out.println("Working"); }
};
final ScheduledFuture<?> workHandler =
scheduler.scheduleAtFixedRate(myWorkingRunnable , 0, 15, TimeUnit.MINUTES);
您可以使用workHandler
或scheduler
来进一步操作服务或调度的Runnable
。
您可以设置线程或使用像Quartz这样的调度程序http://quartz-scheduler.org/
你只需要用quartz每15分钟安排一个任务,然后把你的文件移到任务
首先,用maven
导入quartz依赖<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
然后创建一个Job类
public class MoveFilesJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO move your files here
}
}
最后,创建一个触发器并运行它
JobDetail job = JobBuilder.newJob(MoveFilesJob.class)
.withIdentity("moveFileJob", "group1").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("moveFileTrigger", "group1")
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMinutes(15).repeatForever())
.build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);