1、创建项目:只需要选择web模块即可测试
2、异步任务(使用多线程)
2.1 @EnableAsync
//开启异步功能
@EnableAsync
@SpringBootApplication
public class Springboot13Application {
public static void main(String[] args) {
SpringApplication.run(Springboot13Application.class, args);
}
}
2.2 @Async
@Service
public class TestService {
//表示这是一个异步方法
@Async
public void test(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("处理中");
}
}
3、定时任务
3.1 @EnableScheduling
//开启任务
@EnableScheduling
@SpringBootApplication
public class Springboot13Application {
public static void main(String[] args) {
SpringApplication.run(Springboot13Application.class, args);
}
}
3.2 @Scheduled
或者重新创建一个类,不在@Service中,需要使用@Component
@Service
public class TestService {
// 0 0/5 14,18 * * ? 每天14点整,和18点整,每隔5分钟执行一次
// 0 15 10 ? * 1-6 每个月的周一至周六10:15分执行一次
// 0 0 2 ? * 6L 每个月的最后一个周六凌晨2点执行一次
// 0 0 2 LW * ? 每个月的最后一个工作日凌晨2点执行一次
// 0 0 2-4 ? * 1#1 每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次;*/
//0/4 * * * * * : 每4秒执行一次
@Scheduled(cron = "0 * * 20 8 TUE")
public void test(){
System.out.println("定时任务执行...");
}
}
3.3 实现并行执行任务,默认任务是串行(一个任务结束,才会开始另一个任务)
只需要创建一个配置类即可
@Configuration
@EnableScheduling。//如果启动类上有注解,应该可以不加
public class AsyncTaskConfig implements SchedulingConfigurer, AsyncConfigurer {
//线程池线程数量
private int corePoolSize = 5;
@Bean
public ThreadPoolTaskScheduler taskScheduler()
{
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.initialize();//初始化线程池
scheduler.setPoolSize(corePoolSize);//线程池容量
return scheduler;
}
@Override
public Executor getAsyncExecutor() {
Executor executor = taskScheduler();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.setTaskScheduler(taskScheduler());
}
}
3.4cron表达式


关于?的问题
比如我的任务是每个月的周一10点进行调度
0 0 10 * * 1 这种写法就是错的
0 0 10 ? * 1 这种写法就是对的,因为并不是每个月中的每一天都是周一,如果天和星期冲突了,就要写出?,所以天和星期如果一个指明了,另一个没有指明,那另一个只能用?代替
4 、邮件任务
4.1 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
4.2 application.properties
spring.mail.username=1847003070@qq.com spring.mail.password=xyxvywpfxzscejxx spring.mail.host=smtp.qq.com
4.3 测试
@Autowired
JavaMailSender javaMailSender;
@Test
public void test(){
//简单邮件测试
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setSubject("通知");
simpleMailMessage.setText("今天放假啦");
simpleMailMessage.setTo("760423314@qq.com");
simpleMailMessage.setFrom("1847003070@qq.com");
javaMailSender.send(simpleMailMessage);
}
@Test
public void test2() throws MessagingException {
//复杂邮件测试
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setSubject("通知");
mimeMessageHelper.setText("<b>今天放假啦</b>",true);
mimeMessageHelper.setFrom("1847003070@qq.com");
mimeMessageHelper.setFrom("760423314@qq.com");
//上传文件
mimeMessageHelper.addAttachment("1.jpg",new File("C:\Users\Public\Pictures\Sample Pictures"));
}