springboot扩展功能

异步任务

package com.zhou.springboot09task.service;


import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class AsyncService {
    public void hello(){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("正在处理数据中");
    }
}

在service层中,有一个休息3s然后在处理数据的任务

package com.zhou.springboot09task.controller;


import com.zhou.springboot09task.service.AsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;



//restful风格,可以返回字符串给页面
@RestController
public class AsyncController {

//    交给spring托管,返回bean对象,不用new
    @Autowired
    AsyncService asyncService;

    @RequestMapping("/hello")
    public String hello(){
        asyncService.hello();
        return  "处理完成";
    }

}

这样的效果是游览器会白屏转圈3s后才有页面,影响用户体验,所以加入springboot自带的异步任务,这样几乎可以是实时的了

使用方法:首先告诉spring这是一个异步方法

package com.zhou.springboot09task.service;


import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class AsyncService {

//    告诉spring这个是异步方法
    @Async
    public void hello(){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("正在处理数据中");
    }
}

然后在主程序中开启异步注解功能

package com.zhou.springboot09task;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;


//开启异步注解功能
@EnableAsync
@SpringBootApplication
public class Springboot09TaskApplication {

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

}

邮件任务

#配置用户名密码
spring.mail.username=# 邮箱账号
spring.mail.password=#QQ邮箱的动态秘钥
#邮件服务器
spring.mail.host=smtp.qq.com

#开启加密验证
spring.mail.properties.mail.smtp.ssl.enable=true



properties配置

package com.zhou.springboot09task;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMailMessage;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@SpringBootTest
class Springboot09TaskApplicationTests {

    @Autowired
    JavaMailSenderImpl mailSender;

    @Test
    void contextLoads() {
//一个简单的邮件
        SimpleMailMessage mailMessage = new SimpleMailMessage();

        mailMessage.setSubject("这是一封测试邮件");
        mailMessage.setText("机会是留给有准备的人的");

        mailMessage.setTo("zhoudage666@gmail.com");
        mailMessage.setFrom("1373983975@qq.com");

        mailSender.send(mailMessage);

    }



    @Test
    void contextLoads1() throws MessagingException {
//一个复杂的邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();

//        组装
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true,"utf-8");

        helper.setSubject("测试");
        helper.setText("<p style='color:green'> 妙啊!!</p>",true);

//        附件
        helper.addAttachment("1.jpg",new File("C:\\Users\\ZhouZhongChen\\Desktop\\孙一文.jpg"));
        helper.addAttachment("dage.jpg",new File("C:\\Users\\ZhouZhongChen\\Desktop\\孙一文.jpg"));

        helper.setTo("zhoudage666@gmail.com");
        helper.setFrom("1373983975@qq.com");

        mailSender.send(mimeMessage);

    }

}




具体调用

TaskSchedule 任务调度者
TaskExecutor 任务执行者
@EnableScheduling 开启定时任务的注解
@Scheduled 定时任务的方法 里面有Cron表达式

分布式

rpc

两个核心模块:通信、序列化
定义: 远程过程调用,两台服务器A、B ,服务器A上的应用想调用服务器B上的方法或者函数,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

序列化:数据传输需要转换(网络上只能传输01二进制代码,不认识对象)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录结构 尚硅谷_SpringBoot_入门-课程简介 尚硅谷_SpringBoot_入门-Spring Boot简介 尚硅谷_SpringBoot_入门-微服务简介 尚硅谷_SpringBoot_入门-环境准备 尚硅谷_SpringBoot_入门-springboot-helloworld 尚硅谷_SpringBoot_入门-HelloWorld细节-场景启动器(starter) 尚硅谷_SpringBoot_入门-HelloWorld细节-自动配置 尚硅谷_SpringBoot_入门-使用向导快速创建Spring Boot应用 尚硅谷_SpringBoot_配置-yaml简介 尚硅谷_SpringBoot_配置-yaml语法 尚硅谷_SpringBoot_配置-yaml配置文件值获取 尚硅谷_SpringBoot_配置-properties配置文件编码问题 尚硅谷_SpringBoot_配置-@ConfigurationProperties与@Value区别 尚硅谷_SpringBoot_配置-@PropertySource、@ImportResource、@Bean 尚硅谷_SpringBoot_配置-配置文件占位符 尚硅谷_SpringBoot_配置-Profile多环境支持 尚硅谷_SpringBoot_配置-配置文件的加载位置 尚硅谷_SpringBoot_配置-外部配置加载顺序 尚硅谷_SpringBoot_配置-自动配置原理 尚硅谷_SpringBoot_配置-@Conditional&自动配置报告 尚硅谷_SpringBoot_日志-日志框架分类和选择 尚硅谷_SpringBoot_日志-slf4j使用原理 尚硅谷_SpringBoot_日志-其他日志框架统一转换为slf4j 尚硅谷_SpringBoot_日志-SpringBoot日志关系 尚硅谷_SpringBoot_日志-SpringBoot默认配置 尚硅谷_SpringBoot_日志-指定日志文件和日志Profile功能 尚硅谷_SpringBoot_日志-切换日志框架 尚硅谷_SpringBoot_web开发-简介 尚硅谷_SpringBoot_web开发-webjars&静态资源映射规则 尚硅谷_SpringBoot_web开发-引入thymeleaf 尚硅谷_SpringBoot_web开发-thymeleaf语法 尚硅谷_SpringBoot_web开发-SpringMVC自动配置原理 尚硅谷_SpringBoot_web开发-扩展与全面接管SpringMVC 尚硅谷_SpringBoot_web开发-【实验】-引入资源 尚硅谷_SpringBoot_web开发-【实验】-国际化 尚硅谷_SpringBoot_web开发-【实验】-登陆&拦截器 尚硅谷_SpringBoot_web开发-【实验】-Restful实验要求 尚硅谷_SpringBoot_web开发-【实验】-员工列表-公共页抽取 尚硅谷_SpringBoot_web开发-【实验】-员工列表-链接高亮&列表完成 尚硅谷_SpringBoot_web开发-【实验】-员工添加-来到添加页面 尚硅谷_SpringBoot_web开发-【实验】-员工添加-添加完成 尚硅谷_SpringBoot_web开发-【实验】-员工修改-重用页面&修改完成 尚硅谷_SpringBoot_web开发-【实验】-员工删除-删除完成 尚硅谷_SpringBoot_web开发-错误处理原理&定制错误页面 尚硅谷_SpringBoot_web开发-定制错误数据 尚硅谷_SpringBoot_web开发-嵌入式Servlet容器配置修改 尚硅谷_SpringBoot_web开发-注册servlet三大组件 尚硅谷_SpringBoot_web开发-切换其他嵌入式Servlet容器 尚硅谷_SpringBoot_web开发-嵌入式Servlet容器自动配置原理 尚硅谷_SpringBoot_web开发-嵌入式Servlet容器启动原理 尚硅谷_SpringBoot_web开发-使用外部Servlet容器&JSP;支持 尚硅谷_SpringBoot_web开发-外部Servlet容器启动SpringBoot应用原理 尚硅谷_SpringBoot_Docker-简介 尚硅谷_SpringBoot_Docker-核心概念 尚硅谷_SpringBoot_Docker-linux环境准备 尚硅谷_SpringBoot_Docker-docker安装&启动&停止 尚硅谷_SpringBoot_Docker-docker镜像操作常用命令 尚硅谷_SpringBoot_Docker-docker容器操作常用命令 尚硅谷_SpringBoot_Docker-docker安装MySQL 尚硅谷_SpringBoot_数据访问-简介 尚硅谷_SpringBoot_数据访问-JDBC&自动配置原理 尚硅谷_SpringBoot_数据访问-整合Druid&配置数据源监控 尚硅谷_SpringBoot_数据访问-整合MyBatis(一)-基础环境搭建 尚硅谷_SpringBoot_数据访问-整合MyBatis(二)-注解版MyBatis 尚硅谷_SpringBoot_数据访问-整合MyBatis(二)-配置版MyBatis 尚硅谷_SpringBoot_数据访问-SpringData JPA简介 尚硅谷_SpringBoot_数据访问-整合JPA 尚硅谷_SpringBoot_原理-第一步:创建SpringApplication 尚硅谷_SpringBoot_原理-第二步:启动应用 尚硅谷_SpringBoot_原理-事件监听机制相关测试 尚硅谷_SpringBoot_原理-自定义starter 尚硅谷_SpringBoot_结束语

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值