31、springboot与任务

异步任务

测试如下:
进行等待三秒在进行应答
@Service
public class AsynService {

    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("处理数据.....");
    }
}

 

 controller类:

@Controller
public class AsynController {

    @Autowired
    AsynService asynService;

    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        asynService.hello();
        return "success";
    }
}

此时会有三秒的等待响应时间!!!!

 

但是如果工程量大的话,这样会比较麻烦

@Service
public class AsynService {

    //告诉spring这是一个异步的方法
    @Async
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("处理数据.....");
    }
}

 

开启方法:

@EnableAsync
@SpringBootApplication
public class TaskApplication {

    public static void main(String[] args) {
        SpringApplication.run(TaskApplication.class, args);
    }

}
执行时 会立即响应  但是打印输出会在三秒之后

 

 

定时任务

项目开发中经常需要执行一些定时任务
比如凌晨时候,分析一个前一天的日志信息
Spring为我们提供了异步执行任务调度的方式
提供了TaskExecutor、TaskScheduler接口

cron属性:
*代表全部

 

定时做打印操作:

@Service
public class ScheduleService {

    //cron:second、minute、hour、day of mounth、day of week
    @Scheduled(cron ="0 * * * * MON-SAT" )
    public void hello(){
        System.out.println("定时处理");
    }

}

 

 开启注解:

//开启定时任务
@EnableScheduling
@SpringBootApplication
public class TaskApplication {
    public static void main(String[] args) {
        SpringApplication.run(TaskApplication.class, args);
    }
}

 

 

 在任意分钟的0-10s进行打印

@Scheduled(cron = "0-10 * * * * 0-7")
public void hello(){
    System.out.println("定时处理");
}

 

 

 

 

 邮件任务

-邮寄发送需要引入spring-boot-starter-mail
-Springboot 自动配置MailSenderAutoConfiguration
-定义MailProperties内容,配置在application.yml中
-自动装配JavaMailSender
-测试邮件的发送

 

 

自动配置的类

 

 

@ConfigurationProperties(
    prefix = "spring.mail"
)
public class MailProperties {
    private static final Charset DEFAULT_CHARSET;
    private String host;
    private Integer port;
    private String username;
    private String password;
    private String protocol = "smtp";
    private Charset defaultEncoding;
    private Map<String, String> properties;
    private String jndiName;
...
}

 

 

配置文件:

spring.mail.username=1287221322@qq.com
#授权码
spring.mail.password=keoszgbsssddbaad
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true

 

 

host:

 

测试代码:

简单邮件

@Autowired
JavaMailSenderImpl javaMailSender;

@Test
public void contextLoads() {
    SimpleMailMessage msg = new SimpleMailMessage();
    //邮件设置
    msg.setSubject("猪头");
    msg.setText("你就是猪头哦!!");
    msg.setTo("xxxxxxxxx@qq.com");
    msg.setFrom("12872213xx@qq.com");

    javaMailSender.send(msg);
}
测试中邮件是可以成功发送的!!!

 

 复杂的邮件测试:

 

@Test
public void test1() throws MessagingException {
    //创建复杂邮件
    MimeMessage msg = javaMailSender.createMimeMessage();
    //上传文件
    MimeMessageHelper helper = new MimeMessageHelper(msg,true);

    //邮件设置
    helper.setSubject("pig");

    helper.setText("<b style='color:red'>pig..... </b>",true);
    helper.setTo("3212393029@qq.com");
    helper.setFrom("12872213xx@qq.com");

    //上传文件
    helper.addAttachment("319898.jpg",new File("D:\\Tools\\319898.jpg"));

    javaMailSender.send(msg);
}

 

 
html的设置等都可以显示,图片的上传!!!

 

posted @ 2019-03-02 13:04  MrChengs  阅读(214)  评论(0编辑  收藏  举报