Spring Boot与任务视频
1. 异步任务
使用注解 @Async 开启一个异步线程任务, 需要在主启动类上添加注解@EnableAsync开启异步配置;
@Service
public class AsyncService {
    @Async
    public void hello() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("处理数据中。。。");
    }
}
2. 定时任务
Spring提供了异步任务调度的方式,比如TaskExecutor,TaskScheduler接口。
也可以配合两个注解使用, 分别是@EnableScheduling、@Scheduled
cron表达式生成器
 
 0,7 表示周日; 1-6表示周一至周六;
quartz框架不一样,1表示周日;2表示周一;
@Service
public class ScheduledService {
    /**
     * 秒,分,时,日, 月, 星期, 年
     */
//    @Scheduled(cron = "0 * * * * MON-SAT")
//    @Scheduled(cron = "0,1,2,3,4 * * * * MON-SAT")
//    @Scheduled(cron = "0-4 * * * * MON-SAT")
    @Scheduled(cron = "0/4 * * * * MON-SAT")
    public void scheduled() {
        System.out.println("scheduled...");
    }
}
3. 邮件任务
邮件发送需要引入spring-boot-starter-mail;
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
springboot自动配置 MailSenderAutoConfiguration, 里面提供了JavaMailSenderImpl来发送邮件。
MailProperties中封装了mail相关的配置属性,可以在application.properties配置文件中修改配置。
@Configuration
@ConditionalOnClass({ MimeMessage.class, MimeType.class })
@ConditionalOnMissingBean(MailSender.class)
@Conditional(MailSenderCondition.class)
@EnableConfigurationProperties(MailProperties.class)
@Import(JndiSessionConfiguration.class)
public class MailSenderAutoConfiguration {
	private final MailProperties properties;
	private final Session session;
	public MailSenderAutoConfiguration(MailProperties properties,
			ObjectProvider<Session> session) {
		this.properties = properties;
		this.session = session.getIfAvailable();
	}
	@Bean
	public JavaMailSenderImpl mailSender() {
		JavaMailSenderImpl sender = new JavaMailSenderImpl();
		if (this.session != null) {
			sender.setSession(this.session);
		}
		else {
			applyProperties(sender);
		}
		return sender;
	}
    // ....
}    
定义MailProperties内容,配置在application.properties中;密码需要在邮箱官网登录后生成第三方客户端登录的授权码。
spring.mail.username=wang-qz@qq.com
spring.mail.password=xxxxxxxxxxx
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true
并不是直接从zhangsan@qq.com发送到lisi@163.com,中间需要经过各自的邮箱服务器的通信才能发送邮件。
 
测试邮件发送;
@SpringBootTest
@RunWith(SpringRunner.class)
public class Springboot04TaskApplicationTests {
    @Autowired
    private JavaMailSenderImpl javaMailSender;
    @Test
    public void contextLoads() {
        // 发送简单的邮件
        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject("通知-今晚7:00开会");
        message.setText("讨论项目进度");
        message.setFrom("1848276756@qq.com");
        message.setTo("wang-qz@foxmail.com");
        javaMailSender.send(message);
    }
    @Test
    public void test02() throws MessagingException {
        // 创建一个复杂的邮件
        MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
        mimeMessageHelper.setSubject("通知-早上9:30开会");
        mimeMessageHelper.setText("投产评审及代码走查,请提前准备好<b style='color:red;'>投产包</b>");
        // 添加附件
        mimeMessageHelper.addAttachment("pom.xml", new File("pom.xml"));
        mimeMessageHelper.setFrom("wang-qz@qq.com");
        mimeMessageHelper.setTo("wang-qz@foxmail.com");
        javaMailSender.send(mimeMailMessage);
    }
}



















