SpringBoot의 비동기 작업, 이메일 및 타이밍 작업

비동기 작업

배경

예를 들어 비즈니스 처리에서 처리를 완료하는 데 3 초가 걸리지 만 사용자가 3 초를 기다리게해야하는 경우 경험이 매우 열악하므로 비동기 메서드를 사용하여 처리 할 수 ​​있으며 스레드를 통해 처리 할 수 ​​있습니다. 풀이지만 Thread를 작성해야하며 springboot는 기본적으로이 기능을 제공하므로 사용하도록 활성화하면됩니다.

특정 용도

  • 프로젝트 생성

기본 스프링 부트 프로젝트를 생성 한 다음 웹 종속성을 추가하기 만하면됩니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 위의 배경을 시뮬레이션하는 장면을 작성하십시오.

서비스 계층 :

@Service
public class AsyncService {

    public void sync(){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("方法中在执行中");
    }

    public void async(){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("方法中在执行中");
    }
}

컨트롤러 레이어 :

@RestController
public class AsyncController {

    @Autowired
    private AsyncService asyncService;

    @GetMapping("/sync")
    public String sync(){
        asyncService.sync();

        return "处理完成";
    }

    @GetMapping("/async")
    public String async(){
        asyncService.async();

        return "处理完成";
    }

}
  • 프로젝트 시작, 테스트

localhost : 8080 / sync를 요청하고 값을 반환하기 전에 3 초 동안 기다릴 것인지 확인합니다.

SpringBoot의 비동기 작업, 이메일 및 타이밍 작업

  • 문제 해결됨

이 문제를 해결하려면 비동기 메서드를 사용하십시오.

먼저 시작 클래스 (@EnableAsync)에서 비동기를 켠 다음 호출 할 메서드에 @Async 주석을 추가합니다.

# 启动类
 @SpringBootApplication
@EnableAsync
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
#方法
    @Async
    public void async(){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("方法中在执行中");
    }

그런 다음 ocalhost : 8080 / async를 다시 요청했고 우리의 메서드가 즉시 반환되었음을 발견했습니다. 이것이 비동기 작업의 실현입니다.

메일 작업

배경

메일 작업은 springboot에서 제공하는 메일 스타터를 통해 실현됩니다.

특정 용도

  • 종속성 추가
<!--mail-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
  • 구성 파일
[email protected]
spring.mail.password=你的qq授权码
spring.mail.host=smtp.qq.com
# qq需要配置ssl
spring.mail.properties.mail.smtp.ssl.enable=true

인증 코드 받기 : QQ 사서함 설정-> 계정-> pop3 및 smtp 서비스 열기.

  • 봄 단위 테스트
@Autowired
JavaMailSenderImpl mailSender;

@Test
public void contextLoads() {
   //邮件设置1:一个简单的邮件
   SimpleMailMessage message = new SimpleMailMessage();
   message.setSubject("通知-明天来上班");
   message.setText("今晚7:30开会");

   message.setTo("[email protected]");
   message.setFrom("[email protected]");
   mailSender.send(message);
}

@Test
public void contextLoads2() throws MessagingException {
   //邮件设置2:一个复杂的邮件
   MimeMessage mimeMessage = mailSender.createMimeMessage();
   MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

   helper.setSubject("通知-明天吃饭");
   helper.setText("<b style='color:red'>今天 7:30来开会</b>",true);

   //发送附件
   helper.addAttachment("1.jpg",new File(""));
   helper.addAttachment("2.jpg",new File(""));

   helper.setTo("[email protected]");
   helper.setFrom("[email protected]");

   mailSender.send(mimeMessage);

시간 초과 작업

배경

지정된 시간 또는 장면에서 일부 코드를 실행합니다.

관련 클래스 및 주석

TaskScheduler  : 任务调度者
TaskExecutor   :任务执行者
@EnableScheduling  : 开启定时功能的注解
@schedule       :什么时候执行

특정 용도

springboot의 웹 종속성을 가져 오는 한이 함수는 기본적으로 가져 오므로 다시 가져올 필요가 없습니다.

cron 표현식에 대해서는 다른 기사를 참조하십시오 : 봄의 @schedule 주석 사용

  • 시작 클래스에 @EnableScheduling 주석 추가
@SpringBootApplication
@EnableAsync
@EnableScheduling
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
  • 서비스 계층 작성 방법
@Service
public class ScheduleService {

    public void testSchedule(){
        System.out.println("任务被执行了");
    }
}
  • @Scheduled 코멘트 추가

cron 표현식은 다른 블로그를 참조 할 수 있습니다. 스프링의 @schedule 어노테이션 사용, 고정 된 기간에 실행

@Service
public class ScheduleService {

    /**
     * 每隔10s执行一次
     */
    @Scheduled(cron = "0/10 * * * * ?")
    public void testSchedule(){
        System.out.println(LocalDateTime.now()+"任务被执行了");
    }
}
  • 결과

정확성을 확인하기 위해 10 초마다 수행했습니다.

SpringBoot의 비동기 작업, 이메일 및 타이밍 작업

추천

출처blog.csdn.net/doubututou/article/details/112765499