Spring Boot 任务

Scroll Down

Spring Boot 任务

异步任务

让一个service变成异步任务,这个的实现方法很简单,一共分为两步

给service 层添加注解

@Async
public void test()
{
    System.out.println("just test");
}

给启动类加上启动注解

@SpringBootApplication
@EnableAsync
public class SpringBootLearnApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootLearnApplication.class, args);
    }
}

邮件任务

添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

进行配置

在Spring的配置文件中使用前缀spring.mail进行配置

spring:	
	mail:
		username: 1340052664@qq.com
		password: 
		host: smtp.qq.com
		properties:
			mail: 
				smtl:
					ssl:
					 	enable: true
					 	

使用邮件发送类

JavaMailSenderImpl

Service层

在Service层编写一些方法

@Service
public class MailService {

    @Autowired
    private JavaMailSenderImpl sender;

    public void sendMail() throws MessagingException {
        MimeMessage mimeMessage = sender.createMimeMessage();
        //组装
        MimeMessageHelper mailMessage = new MimeMessageHelper(mimeMessage, true);
        mailMessage.setSubject("这是标题");
        //添加文件
        //要保证文件不为空
        mailMessage.addAttachment("a.txt", new File(""));
        mailMessage.setFrom("1340052664@qq.com");
        mailMessage.setTo("1340052664@qq.com");
        //设置文本信息
        mailMessage.setText("<h1>这是一封测试邮件</h1>");
        sender.send(mimeMessage);
    }
}

Controller层编写

@RestController
public class MailController {
    @Autowired
    MailService mailService;

    @RequestMapping("/sendMail")
    public String sendMail()
    {
        try {
            mailService.sendMail();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return "ok";
    }
}

但是邮件发送会耗费时间,所以我们可以把它看作一个异步任务

加上@Async注解

定时任务

Cron表达式

我们定时的时间通过这个表达式生成,具体的语法可以百度,或者直接使用生成器

@EnableScheduling

在主启动类上加上这个启动的注解

@Scheduled

在方法上加上这个注解,就可以实现定时任务,给这个注解的cron属性的表达式赋值就可以做到

@Scheduled(cron = "0 16 13 * * ? ")
public void testSchedule()
{
    System.out.println("这是一共定时任务");
}