How do I start three tasks that will run sequentially in Java?

I'm trying to start three tasks: the first one will read some emails, generate some charts based on these emails after completing a service, and start. Finally, these charts will be sent to the email as zip files

dataReader – > graphGenerator – > emailSender.

I implemented this service, but I don't understand why it doesn't work

@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;
    }
}

If there is a better way, please tell me, thank you!

Solution

Here are some codes that cause the same behavior:

Thread sendWeeklyEmailThread = new Thread(new Runnable(){
    public void run()
    {
        readWeeklyEmails();
        generateGraphs();
        sendMailWithAttachment();
        clean(); //cleanup....
    }
});
sendWeeklyEmailThread.start();
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>