springboot学习
Springboot学习
1、异步任务
Springboot提供了异步方法的注解
就是一个很好的注解,如果有方法因为被延迟,而阻塞,我们可以用注解标明该方法为异步方法,就会跳过该方法,先执行后面的方法,执行完我们再回头执行这个异步方法
个人感觉:执行到有延迟的方法,cpu分出一个进程来执行后面的方法,多线程执行就不卡在延迟方法这里了
使用:方法上加@Async,主配置文件上加@EnableAsync
public class AsyncService {
@Async
public void Hello(){
...
}
}
//主配置方法
@SpringBootApplication
@EnableAsync
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
//service
@Service
public class AsyncService {
@Async
public void Hello(){
try{
Thread.sleep(3000);
}catch (Exception e){
e.printStackTrace();
}
System.out.println("数据处理中...");
}
}
//controller
@RestController
public class AsyncController {
@Autowired
AsyncService asyncService;
@GetMapping("/hello")
public String Hello(){
asyncService.Hello(); //延迟三秒
return "ok";
}
}
//主配置方法
@SpringBootApplication
@EnableAsync
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
2、邮件任务
qq邮箱设置:
1)登录qq邮箱,点击设置,再进入‘ 账户 ’
2)鼠标滚轮划到下面,开启POP3/SMTP服务,按照要求给指定收件人发送短信。开启后会发送给你一个加密的密码,记录下密码,后面需要。
1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2、解释说明
导入了spring提供的mail启动器以后,就导入了mail的一些包。简单看一看就行了。spring会提供一个JavaMailSenderImpl类给我们使用,就像Redis的RedisTemplate一样
3、application.properties环境配置
spring.mail.username=qq邮箱号
#这里就需要设置前面获得的加密密码
spring.mail.password=fxrvwidvxcwfddca
spring.mail.host=smtp.qq.com
#开启加密验证
spring.mail.properties.mail.smtp.ssl.enable=true
4、测试使用
@SpringBootTest
class TestApplicationTests {
@Autowired
JavaMailSenderImpl mailSender;
@Test
void contextLoads() {
}
@Test
public void test1(){
//发送一个简单的消息
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setSubject("12月15日我在学springboot实现qq邮件任务");
simpleMailMessage.setText("感谢这些个日子奋斗的自己,唾弃那个躺尸迷失的自己");
simpleMailMessage.setFrom("qq邮箱号");
simpleMailMessage.setTo("qq邮箱号");
mailSender.send(simpleMailMessage);
}
@Test
public void test2() throws MessagingException {
//发送一个复杂的消息
MimeMessage mimeMessage = mailSender.createMimeMessage();
//我们通过一个messageHelper 帮助我们组装这些信息
MimeMessageHelper messageHelper=new MimeMessageHelper(mimeMessage,true);
messageHelper.setSubject("复杂的邮件任务");
messageHelper.setText("<p style='color:blue'>感谢这些个日子奋斗的自己,唾弃那个躺尸迷失的自己</p>",true);
messageHelper.setFrom("qq邮箱号");
messageHelper.setTo("qq邮箱号");
//附件
messageHelper.addAttachment("1.jpg",new File("D:\\unimportant\\greenmark.jpg"));
messageHelper.addAttachment("2.jpg",new File("D:\\unimportant\\greenmark.jpg"));
mailSender.send(mimeMessage);
}
}
5、提升:把代码封装成工具类方法
/**
*
* @param subject
* @param text
* @param from
* @param to
* @param multipart
* @param html
* @throws MessagingException
* @Author 让时间变成力量
*/
public void sendMessage(String subject,String text,String from,String to,boolean multipart,boolean html) throws MessagingException {
//发送一个复杂的消息
MimeMessage mimeMessage = mailSender.createMimeMessage();
//我们通过一个messageHelper 帮助我们组装这些信息
MimeMessageHelper messageHelper=new MimeMessageHelper(mimeMessage,multipart);
messageHelper.setSubject(subject);
messageHelper.setText(text,html);
messageHelper.setFrom(from);
messageHelper.setTo(to);
//附件
messageHelper.addAttachment("1.jpg",new File("D:\\unimportant\\greenmark.jpg"));
messageHelper.addAttachment("2.jpg",new File("D:\\unimportant\\greenmark.jpg"));
mailSender.send(mimeMessage);
}
3、定时任务
springboot提供的接口,可以定时定点的执行具体哪个方法
使用:
//启动类上加注解 @EnableScheduling
@SpringBootApplication
@EnableScheduling
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
//方法上加注解
@Service
public class ScheduleService {
@Scheduled(cron = "0/5 * * * * *") //每隔5秒执行一次,从0秒开始
private void Now(){
System.out.println("现在是:"+new Date());
}
}
启动springboot项目后,被加上@Scheduled(cron = "")注解的方法根据cron表达式自动执行
cron表达式:秒 分 时 天 月 周几,不懂就百度
目前已知:
- *代表所有,
- ?代表不确定(但和 * 差不多),
- /可以设置间隔 ,0/5 * * * * * 每隔5秒
- -设置 区间 0-5 * * * * * ,0到5秒 [0,5]

浙公网安备 33010602011771号