一、批量处理与异步任务
在项目开发中,绝大多数情况下都是通过同步方式处理业务逻辑的,但是比如批量处理数据,批量发送邮
件,批量发送短信等操作 容易造成阻塞的情况,之前大部分都是使用多线程来完成此类任务。
而在Spring 3+之后,就已经内置了 @Async 注解来完美解决这个问题,从而提高效率。
使用的注解:
- @EnableAysnc 启动类上开启基于注解的异步任务
- @Aysnc 标识的方法会异步执行
controller层中:
@RestController
public class AsyncController {
@Autowired
AsyncService asyncService;
public String hello(){
asyncService.batchAdd();
return "success";
}
}
service层中:
@RestController
public class AsyncController {
@Autowired
AsyncService asyncService;
public String hello(){
asyncService.batchAdd();
return "success";
}
}
二、定时任务调度
在项目开发中,经常需要执行一些定时任务,比如 每月1号凌晨需要汇总上个月的数据分析报表; 每天凌晨分
析前一天的日志信息等定时操作。Spring 为我们提供了异步执行定时任务调度的方式。
使用的注解:
- @EnableScheduling 启动类上开启基于注解的定时任务
- @Scheduled 标识的方法会进行定时处理
service层中:
@Service
public class ScheduledService {
private static int count = 1;
@Scheduled(cron = "*/3 * * * * MON-FRI")
public void dataCount(){
System.out.println("数据统计第"+count++ +"次");
}
}
括号中用到的是cron表达式
在线生成https://cron.qqe2.com/
启动类:
@EnableScheduling
@EnableAsync
@SpringBootApplication
public class SpringBoot11TaskApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBoot11TaskApplication.class, args);
}
}
三、整合邮箱
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application配置:
spring.mail.username=你的QQ@qq.com
spring.mail.password=生成的授权码
spring.mail.host=smtp.qq.com
spring.mail.properties.smtp.ssl.enable=true
测试:
@Autowired
JavaMailSenderImpl javaMailSender;
@Test
public void testSimpleMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("放假通知");
message.setText("暑假放假啦");
message.setFrom("发送的QQ@qq.com");
message.setTo("接受的QQ@qq.com");
javaMailSender.send(message);
}
复杂邮件(带html和附件):
@Test
public void testMimeMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//通过消息帮助对象,来设置发送的内容,true表示可以发送邮件
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setSubject("收假通知");
mimeMessageHelper.setText("<h2 style='color:red'>放锤子,好好学习</h2>",true);
//发送附件
mimeMessageHelper.addAttachment("wgj.jpg",new File("E:\\wgj.jpg"));
mimeMessageHelper.setFrom("发送的QQ@qq.com");
mimeMessageHelper.setTo("接受的QQ@qq.com");
javaMailSender.send(mimeMessage);
}
四、缓存
1.pom文件中需要有cache依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
2.建立相应数据库,配置好注解版 mapper 、service 与 Controller
3. @EnableCaching:在启动类上,开启基于注解的缓存
4. 在service层的方法上加上@Cacheable(cacheNames = “user”),重复操作该方法运行过的将放到缓存
后续再更。。。
上传阿里云服务器:
进入opt目录:cd /opt
查看进程:ps -ef|grep java
杀死进程:kill -9 xxxxxx
上架nohup java -jar xxx.jar --server.port=80 &