如何启动将在java中按顺序运行的三个任务?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何启动将在java中按顺序运行的三个任务?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2443字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试启动三个任务:第一个将读取一些电子邮件,在完成一项服务后,根据这些电子邮件生成一些图表将开始,最后这些图表将作为zip文件发送到电子邮件中.
这些任务必须以这种精确的顺序运行:
dataReader – > graphGenerator – > emailSender.
我实现了这项服务,但我不明白为什么它不起作用.
@Component
public class WeeklyEmailService {
@Autowired
private EmailSender emailSender;
@Autowired
private GraphGenerator graphGenerator;
@Autowired
private DataReader dataReader;
@Autowired
private CompanyRepository companyRepository;
@Autowired
private EmailConfigurer emailConfigurer;
@Value("${mail.username}")
private String username;
@Value("${mail.password}")
private String password;
public void sendWeeklyEmail() {
emailConfigurer.setUsername(username);
emailConfigurer.setPassword(password);
if (emailConfigurer.configure() != null) {
System.out.println("Connection successfully established with mail server!");
}
Task<Void> reader = new Task<Void>() {
@Override
protected Void call() throws Exception {
dataReader.readWeeklyEmails();
return null;
}
};
Task<Void> generator = new Task<Void>() {
@Override
protected Void call() throws Exception {
companyRepository.getCompanyNames().forEach(company -> {
graphGenerator.generateGraphs(new DateTime().minusWeeks(1), new DateTime(), company);
});
return null;
}
};
Task<Void> emailTask = new Task<Void>() {
@Override
protected Void call() throws Exception {
emailSender.sendMailWithAttachment();
return null;
}
};
reader.setOnSucceeded(event -> {
Thread generatorThread = new Thread(generator);
generatorThread.start();
});
generator.setOnSucceeded(event -> {
Thread emailThread = new Thread(emailTask);
emailThread.start();
});
emailTask.setOnSucceeded(event -> {
if (clean()) {
System.out.println("Graphs Reports and ZIP files deleted from your computer");
} else {
System.out.println("Files which you want to delete do not exists");
}
});
Thread readerThread = new Thread(reader);
readerThread.start();
}
private boolean clean() {
boolean cleaned = false;
try {
cleaned = Files.deleteIfExists(Paths.get("graphs"));
cleaned = Files.deleteIfExists(Paths.get("reports"));
cleaned = Files.deleteIfExists(Paths.get("zip"));
} catch (IOException e) {
e.printStackTrace();
}
return cleaned;
}
}
如果有更好的方法,请告诉我,谢谢!
解决方法:
这里有一些导致相同行为的代码:
简化,完美有序,但没有错误处理.
Thread sendWeeklyEmailThread = new Thread(new Runnable(){
public void run()
{
readWeeklyEmails();
generateGraphs();
sendMailWithAttachment();
clean(); //cleanup....
}
});
sendWeeklyEmailThread.start();
内容总结
以上是互联网集市为您收集整理的如何启动将在java中按顺序运行的三个任务?全部内容,希望文章能够帮你解决如何启动将在java中按顺序运行的三个任务?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。