SpringBoot实战(企业开发)

  1. 邮件协议简介
  2. 申请QQ邮箱授权码
  3. 发送简单邮件
  4. 发送带附件的邮件
  5. 发送带图片资源的邮件
  6. Thymeleaf做邮件模板
  7. FreeareMaker做邮件模板
  8. Spring Boot 定时任务实现方案一(@Scheduled)
  9. Spring Boot 定时任务实现方案二(Quartz)
  10. SpringBoot整合Swagger2


 

  • 邮件协议简介
  • 申请QQ邮箱授权码
SMTP 端口25   基于TCP/IP的应用层协议,简单邮件传输协议,邮件客户端软件与SMTP服务器之间,
以及SMTP服务器与SMTP服务器之间的通信规则。
POP3  邮局协议,定义了邮件客户端与POP3服务器之间的通信规则
IMAP  是对POP3协议的扩展,更能更强,作用类似。

QQ邮箱设置--开启相应服务---我已发送--获取授权码

 

  • 发送简单的邮件
  • 发送带附件的邮件
  • 发送带图片资源的邮件
  • 创建项目添加Web依赖,添加I/O下面的Java Mail Sender依赖 在application.properties下配置
    spring.mail.host=smtp.qq.com
    spring.mail.port=587  //或者465
    spring.mial.username=1290410202@qq.com
    spring.mail.password=agawybjhdmbkhhhih  //授权码
    spring.mail.default-encoding=UTF-8
    spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
    spring.mail.properties.mail.debug=true
    

    单元测试

    public class MailApplicationTests {
          @Autowired
          JavaMailSender javaMailSender;
          @Test
            public void contextLodas() {
                SimpleMailMessage msg = new SimpleMailMessage();
                msg.setMailMessage("这是测试邮箱的主题");
                msg.setText("这是测试邮箱的内容");
                msg.setFrom("1290410202@qq.com");  //application.properties配置的自己的邮箱
                msg.setSendate(new Date()); //设置发送日期
                msg.setTo("2615687070@qq.com"); //目标地址
                msg.setCc("3223252352@qq.com"); //抄送
                javaMailSender.send(msg);
             
         }
    }
    //带附件的邮件
    @Test
    public void test1() throws MessagingException{
        MinmeMessage msg = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(msg,true);
          msg.setMailMessage("这是测试邮箱的主题(带附件)");
                helper.setText("这是测试邮箱的内容(带附件)");
                helper.setFrom("1290410202@qq.com");  //application.properties配置的自己的邮箱
                helper.setSendate(new Date()); //设置发送日期
                helper.setTo("2615687070@qq.com"); //目标地址
                helper.setCc("3223252352@qq.com"); //抄送
                helper.addAttachment("zenghao.png",new File(pathname:"D:\\zenghao\zenghao.png")) //附件
                javaMailSender.send(msg);
    }
    //带图片的邮件
    @Test
    public void test2() throws MessagingException{
          MinmeMessage msg = javaMailSender.createMimeMessage();
          MimeMessageHelper helper = new MimeMessageHelper(msg,true);
                msg.setMailMessage("这是测试邮箱的主题(带图片)");
               helper.setText("这是测试邮箱的内容,这是第一张图片:<img src='cid=p01'/>,这是第二图片:<img src='cid=p02'/>",html:true);;
                helper.setFrom("1290410202@qq.com");  //application.properties配置的自己的邮箱
                helper.setSendate(new Date()); //设置发送日期
                helper.setTo("2615687070@qq.com"); //目标地址
                helper.addInline("p01",new FileSystemResource(new File("D:\\zenghao\zenghao.png")));
                 helper.addInline("p01",new FileSystemResource(new File("D:\\zhangsan\zhangsan.png")));
                javaMailSender.send(msg);
    }
    

     

  • Thymelaf做邮件模板 
  • 加入依赖
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

     在resources目录下Template目录下创建Thymeleaf,mail.html

    .....
    <div>
        hello <span th:text="${username}"></span>,欢迎加入XXX大家庭
    </div>
    您的入职信息如下:
    <table border="1">
        <tr>
            <td>职位</td>
            <td th:text="${positon}"></td>
        </tr>
         <tr>
            <td>职称</td>
            <td th:text="${joblevel}"></td>
        </tr>
         <tr>
            <td>薪水</td>
            <td th:text="${salary}"></td>
        </tr>
         <tr>
            <td>部门</td>
            <td th:text="${dep}"></td>
        </tr>
    </table>
    <div >希望在未来的日子里,携手共进</div>
    .....
    
    
    
    @Autowired
    TemplateEngine templateEngine   //模板引擎
    @Test
    public void test3() throws MessagingException{
         MinmeMessage msg = javaMailSender.createMimeMessage();
          MimeMessageHelper helper = new MimeMessageHelper(msg,true);
                msg.setSubject("这是测试邮箱的主题(thymelaf)");
                 Context context = new Context();
                 context.setVariable("username","zenghao");
                 context.setVariable("position","Java");
                  context.setVariable("dep","产品研发部");
                 context.setVariable("salary","999999");
                 context.setVariable("joblevel","高级工程师");
                 String pocess = templateEngine.process("mail.html",context);
                 helper.setText(process,true);
                 helper.setForm("1290410202@qq.com");
                 helper.setSentDate(new Date());
                 herper.setTo("2515687070@qq.com");
                javaMailSender.send(msg);
    }

     

  • Freemarker做邮件模板
  • 导入依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>

     在resources目录下Template目录下创建Thymeleaf,mail.ftl

    .....
    <div>
        hello <span>${username}/span>,欢迎加入XXX大家庭
    </div>
    您的入职信息如下:
    <table border="1">
        <tr>
            <td>职位</td>
            <td >${positon}</td>
        </tr>
         <tr>
            <td>职称</td>
            <td >${joblevel}</td>
        </tr>
         <tr>
            <td>薪水</td>
            <td >${salary}</td>
        </tr>
         <tr>
            <td>部门</td>
            <td>${dep}</td>
        </tr>
    </table>
    <div >希望在未来的日子里,携手共进</div>
    
    @Test
    public void test4() throws MessagingException,IOException,TemplateException{
         MinmeMessage msg = javaMailSender.createMimeMessage();
          MimeMessageHelper helper = new MimeMessageHelper(msg,true);
                msg.setSubject("这是测试邮箱的主题(freemarker)");
                Configuration configuration = new Configuration(Configuration.VBRSION_2_3_28);
                configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(),basePackagePath:"template");
                Template template = configuration.getTemplate("mail.ftl");
                Map<String,Object> map = new HashMap<>();
                 map.setVariable("username","zenghao");
                 map.setVariable("position","Java");
                  map.setVariable("dep","产品研发部");
                 map.setVariable("salary","999999");
                 map.setVariable("joblevel","高级工程师");
                 StringWriter out = new StringWriter();
                 template.process(map,out);
                 helper.setText(process,true);
                 helper.setForm("1290410202@qq.com");
                 helper.setSentDate(new Date());
                 herper.setTo("2515687070@qq.com");
                javaMailSender.send(msg);
    }
    

     


     

  • Spring Boot 定时任务实现方案一(@Scheduled)
  • 创建项目 在启动类中加入@EnableScheduling //开启定时任务 创建一个service
    @Service
    public class HelloService {
        @Scheduled(fixedDelay=2000) //前面任务的结束时间和后面任务的开始时间之间的间隔3S
        public void fixedDelay(){
            //每隔2S打印一次
            System.out.println("fixedDelay>>"+new Date());
        }
          @Scheduled(fixeRate=2000) // 两次定时任务开始的间隔时间为2S
        public void fixeRate(){
            System.out.println("fixeRate>>"+new Date());
        }
        
        //cron表达式
        @Scheduled(cron="0/5 * * * * ?")  //每隔5秒打印一次,任意分、时、日、月、年
        public void cron() {
              System.out.println("cron>>"+new Date());
        }
    }
    
  • Spring Boot 定时任务实现方案二(Quartz)
  • 创建项目 添加web依赖,添加I/O下面的Quartz Scheduler依赖 在启动类@SpringBootApplication中加入注解
    @EnableScheduling //开启定时任务
    
    @Component
    public calss MyFirstJob {
        public void sayHello() {
            System.out.println("first job say hello" + new Date());
        }
    }
    
    public calss MySecondeJob extends QuartzJobBean{
       private String name;
       public void setName(String name) {
           this.name=name;
        }
        @Override
        protected void executeInternal(JobExecutionContext jobExecutionContext)throws JobExecutionException {
             System.out.println("seconde job say hello" +name+":"+ new Date());
        }
    }
    
    @Configuration
    public class QuartzConfig {
        @Bean
        MethonInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean() {
            MethonInvokingJobDetailFactoryBean bean = new MethonInvokingJobDetailFactoryBean ();
            bean.setTargetBeanName("MyFirstJob");
            bean.setTargetMethod("sayHello");
            return bean;
        }
        //or
        @Bean
        JobDetailFactoryBean jobDeatilFactoryBean(){
            JobDetailFactoryBean  bean = new JobDetailFactoryBean ();
               JobDataMap map = new JobDataMap();
               map.put("name","zenghao");
               bean.setJobDataMap(map);
             bean.setJobClass(MySecondJob.class);
             return bean;
        }
        //trigger 触发器
        @Bean
        SimpTriggerFactoryBean simpTriggerFactoryBean(){
            SimpTriggerFactoryBean bean = new SimpTriggerFactoryBean();
            bean.setJobDetail(methodInvokingJobDetailFactoryBean().getObject());
            bean.setStartTime(new Date());  //开始时间
            bean,setRepeatInterval(2000);  //重复的时间间隔
            bean.setRepeatCount(3);  //重复的次数
            return bean;
        }
        //or
        @Bean
        CronTriggerFactoryBean cronTriggerFactoryBean {
            CronTriggerFactoryBean bean = new CronTriggerFactoryBean();
            bean.setJobDetail(jobDetailFactoryBean().getObject());
            bean.setCronExpression("* * * * ?");
            return bean;
        }
        //启动定义
        @Bean
        SchedulerFactoryBean schedulerFactoryBean {
            SchedulerFactoryBean bean = new SchedulerFactoryBean();
            bean.setTriggers(simpleTriggerFactoryBean().getObject(),cronTriggerFactoryBean().getObject());
            return bean;
        }
    }

  • SpringBoot整合Swagger2
  • 创建项目 swagger2 添加依赖
    <dependency>
         <groupId>io.springfox</groupId>
         <artifatctId>springfox-swagger2</artifactId>
         <version>2.9.2</version>
     <dependency>
     <dependency>
         <groupId>io.springfox</groupId>
         <artifatctId>springfox-swagger-ui</artifactId>
         <version>2.9.2</version>
     <dependency>
    

 创建config目录

@Configuration
@EnableSwagger2
public class Swagger2Config {
    @Bean
    Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("org.zenhao.swagger2.controller"))
                .paths(PathSelectors.any())  //配置所有路径
                .build().apiInfo(new ApiInfoBuilder()
                    .description("接口文档的描述信息")
                    .title("XXX项目接口文档")
                    .contact(new Contacat("zenghao","http://www/zenghao.org",
                    "1290410202@qq.com"))
                    .version("v1.0")
                    .license("Apache2.0")
                    .build()) //配置生成网站的基本信息
    }
}

 创建一个Bean

@ApiModel(value="用户实体类".description="用户信息描述类")
public class User {
    @ApiModelProperty(value="用户id")
    private Integer id;
     @ApiModelProperty(value="用户名")
    private String username;
     @ApiModelProperty(value="用户密码")
    private String password;
    get()/set()
    .....
}

 创建一个controller

@RestController
@Api(tags="用户数据接口") //可选,前端就可以中文展示
public class UserController {
      @ApiOperation(Value="查询用户",notes="根据用户id查询用户") //可选
      @ApiImplicitParam(name="id",value="用户id",required=true)  //可选,swagger测试时只当参数必填,但不能表示后端参数真正必填,
     // 要想后端参数真正必填,还是需要在代码上指定@RequestParam(id)才行
      @Getmapping("/user")  //必须明确是哪一种请求,不能笼统的RequestMapping
    public User getUserById(Integer id) {
        User user = new User();
        user.setId(id);
        return user;
    }
    @ApiOperation(value="删除用户",notes="根据用户id删除用户")
    @ApiImplicitParam(name="id",value="用户id",required=true,defaultValue="99")
    @DeleteMapping("/usert/{id}")
    public void deleteUserById(@PathVariable Integer id) {
        System.out.println("deleteUserById" +id);
    }
    
    //@ApiResponses({
       @ApiResponse(code=200,message="删除成功");
       @ApiResponse(code=500,message="删除失败");
    })
    
    @PutMapping("/user")
    @ApiImplicitParams({
          @ApiImplicitParam(name="id",value="用户id",required=true,defaultValue="99")
         @ApiImplicitParam(name="username",value="用户名",required=true,defaultValue="张三")
  @ApiOperation(value="更新用户",notes="根据用户id更新用户名")
    })
    public User update(Integer id,String username) {
        User user = new User();
        user.setId(100);
        user.setUserName("zhangsan");
        return user;
    }
    
}

//ApiIgnore   表示生成项目的时候忽略此接口

 启动项目,访问 localhost:8080/swagger-ui.html

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值