SpringBoot学习超详细 第三 实用开发篇

news2024/11/16 21:51:04

目录

一、启动热部署

 二、配置高级

三、常用 计量单位

四、开启数据校验

 五、测试

第一种web环境测试

第二种web环境测试

​编辑

第三种web环境测试

 第四种web环境测试

  第五种web环境测试

六、数据层解决方案

1、SQL 

 七、NoSQL(redis)

1、Redis

 ​编辑

2、MonggoDB 

 3、ES

八、整合第三方技术 

1、缓存

2、手机验证码案例 

SMSCodeController

实体类SMSCode

业务层SMSCodeService和SMSCodeServiceImpl

工具类CodeUtils

3、变更缓存供应商Ehcache

 2、Redis​编辑

 2、memcached

3、jetcache

4、j2cache

 九、定时任务

1、Quartz

 2、Task

十、SpringBoot整合JavaMail 



一、启动热部署

 

 

 二、配置高级

 

 

 

 

 

三、常用 计量单位

四、开启数据校验

如果爆红,直接下载导入

 

 

 

 五、测试

 

 

第一种web环境测试

第二种web环境测试

第三种web环境测试

 第四种web环境测试

  第五种web环境测试

 

 

 

六、数据层解决方案

1、SQL 

 

 

 

 

 

 七、NoSQL(redis)

1、Redis

 

 

 

 

 

 

 

 

 

 

 

2、MonggoDB 

 

 

 

db.getCollection("book").find()
//添加数据(文档)
db.book.save({"name":"springboot",type:"springboot"})
//查询
db.book.find({type:"springboot"})
//删除
db.book.remove({type:"springboot"})
//修改操作
db.book.update({name:"springboot"},{$set:{name:"springboot2"}})
    <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongo-java-driver</artifactId>
                <version>3.12.10</version>
            </dependency>

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
            <version>2.4.4</version>
        </dependency>

 

 

 

 

 3、ES

 

 

 

 

 

 

 

 

 

 

 

八、整合第三方技术 

1、缓存

 

 

 

 

 

2、手机验证码案例 

 

 

SMSCodeController

package com.example.controller;

import com.example.domain.SMSCode;
import com.example.service.SMSCodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @date :Created in 2023/1/2 14:08
 * @description:
 * @modified By:
 * @version:
 */
@RestController
@RequestMapping("/sms")
public class SMSCodeController {
    @Autowired
    private SMSCodeService smsCodeService;

    @GetMapping
    public String getCode(String tele){
        String code = smsCodeService.sendCodeToSMS(tele);
        return code;

    }

    @PostMapping
    public boolean checkCode(SMSCode smsCode){

        return smsCodeService.checkCode(smsCode);
    }
}

实体类SMSCode

package com.example.domain;

import lombok.Data;

/**
 * @date :Created in 2023/1/2 14:06
 * @description:
 * @modified By:
 * @version:
 */
@Data
public class SMSCode {
    private String tele;
    private String code;
}

业务层SMSCodeService和SMSCodeServiceImpl

package com.example.service;

import com.example.domain.SMSCode;

/**
 * @date :Created in 2023/1/2 14:07
 * @description:
 * @modified By:
 * @version:
 */
public interface SMSCodeService {
    public String sendCodeToSMS(String tele);
    public boolean checkCode(SMSCode smsCode);
}
package com.example.service.impl;

import com.example.domain.SMSCode;
import com.example.service.SMSCodeService;
import com.example.utils.CodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/**
 * @date :Created in 2023/1/2 14:08
 * @description:
 * @modified By:
 * @version:
 */
@Service
public class SMSCodeServiceImpl implements SMSCodeService {

    @Autowired
    private CodeUtils codeUtils;

    @Override
//    @Cacheable(value = "smsCode",key = "#tele")
    @CachePut(value = "smsCode",key = "#tele")
    public String sendCodeToSMS(String tele) {
        String code = codeUtils.generator(tele);

        return code;
    }

    @Override
    public boolean checkCode(SMSCode smsCode) {
//        取出内存中的验证码与传递过来的验证码比对,如果相同,返回true
        String code = smsCode.getCode();
        String cacheCode = codeUtils.get(smsCode.getTele());
        return code.equals(cacheCode);
    }


}

工具类CodeUtils

package com.example.utils;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;

/**
 * @date :Created in 2023/1/2 14:11
 * @description:
 * @modified By:
 * @version:
 */
@Component
public class CodeUtils {

    private String [] patch = {"000000","00000","0000","000","00","0",""};

    public String generator(String tele){
        int hash = tele.hashCode();
        int encryption = 2020666;
        long result = hash ^ encryption;
        long nowTime = System.currentTimeMillis();
        result = result ^ nowTime;
        long code = result % 1000000;
        code = code<0?-code:code;
        String codeStr = code+"";
        int len = codeStr.length();
        return patch[len] + codeStr;


    }
    @Cacheable (value = "smsCode",key = "#tele")
    public String get(String tele){
        return null;
    }
//    public static void main(String[] args) {
//        System.out.println(new CodeUtils().generator("15975976827"));
//    }
}

3、变更缓存供应商Ehcache

 2、Redis

 2、memcached

 

3、jetcache

 

 

 

 

 

 

 

4、j2cache

 

 九、定时任务

1、Quartz

 

 

 2、Task

 

十、SpringBoot整合JavaMail 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/137996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcMap制图相关问题

ArcMap是一款我们常用的GIS桌面端应用&#xff0c;在完成一系列空间分析任务后&#xff0c;我们通常会选择用专题图来呈现结果。今天&#xff0c;我们就来聊一聊有关ArcMap成图的一些问题。注&#xff1a;此处演示使用版本为ArcGIS10.4.1如何实现“一幅多图”在绘制研究区区位图…

AC7811-PWDT脉冲宽度检测

PWDT是Pulse Width Detect Timer&#xff08;脉冲宽度检测定时器&#xff09;缩写。可作为测量脉冲宽度的工具或作为16位定时器。 功能 检测脉冲宽度 可编程起始测量触发沿 支持 3 个霍尔传感器的信号输入测量 支持来自模拟比较器的 3 个输入 定时器 在禁用定时器或在正…

【JavaScript】DOM 操作元素样式和元素类名

文章目录【JavaScript】DOM 操作元素样式和元素类名一. 操作元素样式(1)操作行内元素1. 获取元素的样式2. 设置元素的样式(2) 操作非行内元素和行内元素1. 获取元素的样式二. 操作元素类名(1) className1. 获取元素的类名2. 设置元素的类名3. 追加元素的类名(2) classList1. 获…

【谷粒商城基础篇】项目简介与分布式概念

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念&#xff08;第一、二章&#xff09;基础环境搭建&#xff08;第三章&#xff09;整合SpringCloud整合SpringCloud、SpringCloud alibaba&#xff08;第四、五章&#xff09;前端知…

如何使用WebRTC建立一个视频会议App(二)

如何使用WebRTC建立一个视频会议App(一)_音视频开发老马的博客-CSDN博客 服务器接收到‘’准备好了‘’的信息并通过发送同样信息通知第一个参与者。这就开始了被称作发信的交换信息过程&#xff0c;因此我们需要添加相应的handlers到client.js文件中。 当第一个参与者接收到准…

BGP在数据中心的应用3——构建自动化的BGP配置

注&#xff1a; 本文根据《BGP in the Datacenter》整理&#xff0c;有兴趣和英文阅读能力的朋友可以直接看原文&#xff1a;https://www.oreilly.com/library/view/bgp-in-the/9781491983416/上一部分笔记请参考&#xff1a;https://blog.csdn.net/tushanpeipei/article/deta…

【回答问题】ChatGPT上线了!推荐20个姿态估计深度学习模型

推荐20个姿态估计深度学习模型 好的&#xff0c;这里是 20 个深度学习模型用于姿态估计的推荐&#xff1a; 2D/3D Convolutional Neural Networks Recurrent Neural Networks Self-supervised Learning Generative Adversarial Networks Attention-based Networks Graph Neur…

git add .卡住不动

问题描述 代码修改完了准备上传到github&#xff0c;使用 git add . 命令发现一直卡住不动了。没办法只能强行退出&#xff0c;如下图所示。 解决办法 研究了一番&#xff0c;发现了这类问题的套路&#xff0c;在此给大家提供一个debug的思路。 首先需要知道&#xff0c;git a…

保姆级手把手图文并茂教你配置MAC系统Flutter环境

Flutter 是什么 Flutter是Google开源的构建用户界面&#xff08;UI&#xff09;工具包&#xff0c;帮助开发者通过一套代码库高效构建多平台精美应用&#xff0c;支持移动、Web、桌面和嵌入式平台。Flutter 开源、免费&#xff0c;拥有宽松的开源协议&#xff0c;适合商业项目…

返回一个数组中所有元素的小数部分、整数部分为两个数组 numpy.modf()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 返回一个数组中所有元素的 小数部分、整数部分 为两个数组 numpy.modf() [太阳]选择题 关于以下python代码表述错误的一项是? import numpy as np anp.array([-0.5,1,1.5]) print…

《对线面试官》| 高频计算机网络面试题

目录1、说说 OSI 七层模型和 TCP/IP 四层模型的关系和区别2、说说 TCP 与 UDP 的区别3、TCP 是如何实现数据的可靠性&#xff1f;4、 TCP 协议如何提高传输效率&#xff1f;5、你知道 TCP 如何处理拥塞吗&#xff1f;6、为什么 TCP 链接需要三次握手&#xff0c;两次不可以么&a…

小程序后台数据交互-个人中心

目录 一&#xff0c;获取用户昵称和头像 登录过程 二&#xff0c;登录-小程序 三&#xff0c;后台 小程序服器配置 一&#xff0c;获取用户昵称和头像 登录过程 小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识&#xff0c;快速建立小…

SOFARegistry | 聊一聊服务发现的数据一致性

文&#xff5c;肖健&#xff08;花名&#xff1a;昱恒&#xff09;蚂蚁集团技术专家专注于服务发现领域&#xff0c;目前主要从事蚂蚁注册中心 SOFARegistry 设计、研发工作。本文 9492 字 阅读 24 分钟PART. 1前言1.1 什么是服务发现在微服务的体系中&#xff0c;多个应用程序…

Hydra(九头蛇)工具使用

Hydra工具使用1.Hydra简介1.1.Hydra介绍1.2.Hydra支持协议1.3.Hydra下载2.Hydra使用2.1.Hydra基本使用方式2.2.Hydra常用参数2.3.Hydra注意事项2.4.Kail字典2.5.Hydra密码生成器3.Hydra案例3.1.创建账号密码文件3.2.SSH协议爆破3.2.1.靶机信息3.2.2.开始爆破3.2.2.1.不知账号3.…

C#语言实例源码系列-游戏-实现华容道

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

Rust个人学习之聊聊Rust的变量

今天看了Rust的变量相关内容&#xff0c;Rust变量很重要的一个设计点是: Rust变量默认是不可变的。 很难理解? 我们接下来一起研究一下Rust的变量&#xff0c; 在Rust中变量是通过关键字let进行声明的 let x 5; 上述语句就是定义了一个名称为x的变量&#xff0c;变量的值为…

修改esp idf hello_world_main.c,验证Strategy 策略基类。出现一个问题,加以解决

修改esp32 idf hello_world_main.c&#xff0c;验证Strategy 策略基类。出现几个问题&#xff0c;加以解决&#xff1a; 错误&#xff1a; …/main/hello_world_main.cpp: In function ‘void test01()’: …/main/hello_world_main.cpp:77:12: error: deleting object of ab…

入门力扣自学笔记228 C++ (题目编号:2042)

2042. 检查句子中的数字是否递增题目&#xff1a;句子是由若干 token 组成的一个列表&#xff0c;token 间用 单个 空格分隔&#xff0c;句子没有前导或尾随空格。每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 &#xff0c;要么是一个由小写英文字母组成的 单词…

很好用的gRPC和WebSocket调试工具Apipost!强烈推荐

随着软件开发行业的发展&#xff0c;越来越多的公司和开发人员在工作中会涉及到gRPC和WebSocket等接口类型&#xff0c;但是目前市面上能支持这种接口的调试工具却几乎没有&#xff0c;国外的工具大都晦涩难懂&#xff0c;不符合我们的开发习惯&#xff0c;很难上手使用。 经过…

Android开发——APP ANR治理

一、背景介绍 ANR&#xff08;Application Not Response&#xff09;指应用程序无响应&#xff0c;通常出现在主线程被阻塞时&#xff0c;并伴随ANR弹窗出现。ANR发生时要么关闭当前app&#xff0c;要么等待&#xff0c;等待的结果大概率还是继续ANR&#xff0c;最终需要杀掉应…