首页 > 其他分享 >SpringBoot--实用开发

SpringBoot--实用开发

时间:2023-09-04 13:57:55浏览次数:29  
标签:缓存 SpringBoot -- private 实用 SpringBootTest mvc message class

SpringBoot实用开发

热部署

热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效。但是对配置文件的修改除外!

导入springboot开发者工具坐标:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

激活热部署:ctrl+F9

上面就是一次restart的过程

  • 自动启动热部署:

​ 之后:ctrl+alt+shift+/ 之后选择registry

这样之后idea失去焦点5秒后自动构建

设置不参与热部署文件

如何禁用热部署

配置高级

@ConfigurationProperties

ConfigurationProperties可以配置第三方bean属性

如果不第三方属性注入

注入后运行:

//Book就是被注入的类
ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class,args);
Book  book = ctx.getBean(Book.class);
System.out.println(book);

宽松绑定

当我们用@ConfigurationProperties来绑定属性时支持属性名宽松绑定,@value就不行

不论大小写,有无下划线,下面面这几种格式都能和上面的属性相匹配

常用计量单位应用

//在利用上面方法注入属性时,1就代表1小时,其他分钟,秒等类似
@DurationUnit(ChronoUnit.HOURS)
private Duration serverTimeOut;

//大小,1代表1字节,其他和上面类似
    @DataSizeUnit(DataUnit.BYTES)
    private DataSize dataSize;

数据校验

  • 开启数据校验有助于系统安全性
  1. 导入校验需要的坐标

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
    </dependency>
    
  2. 编写

    @Component
    @Data//lombok提供的其中包括get set toString方法等,lombok还提供其他方法具体自行查看
    @ConfigurationProperties(prefix = "servers")//注入配置文件中的属性值
    @Validated //开启对当前bean的属性注入校验
    public class Book  {
    //    定制校验规则,除了下面两个其他如果需要的自行搜索
        @Max(value = 8888,message = "最大值不能超过8888")
        @Min(value = 202,message = "最小值不能小于202")
        private  int id;
        private  String type;
        private  String name;
        private  String description;
    }
    
  3. 使用hibernate框架提供的校验器

    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>
    
  4. 测试

    ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class,args);
    Book  book = ctx.getBean(Book.class);
    System.out.println(book);
    
  5. 结果:

    image-20230823102356674

另外如果Book类出现

Spring Boot Configuration Annotation Processor not configured 。。但是不影响运行导入这个去掉爆红

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

测试

加载测试专用属性和配置

加载测试专用属性

//properties可以为测试添加临时的属性
//@SpringBootTest(properties ={"test.prop=testValue1"})
//args可以为测试用例添加临时的命令行参数和上面可以达成一样的效果
@SpringBootTest(args = {"--test.prop=testvalye",""})
class DemoApplicationTests {

    @Value("${test.prop}")
    private String msg;
    @Test
    void  testProperties(){
        System.out.println(msg);
    }

}

加载测试专用配置

测试类中启动web环境

//参数:NONE-不启动服务器 DEFINED_PORT以默认端口启动服务器(和配置文件中配置的一样)
//RANDOM_PORT以随机端口启动服务器
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class DemoApplicationTests {
    @Test
    void  testProperties(){
    }
}

发送虚拟请求

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
//开启虚拟MVC调用
@AutoConfigureMockMvc
class DemoApplicationTests {
    @Test
    //注入虚拟mvc调用
    void  testProperties(@Autowired  MockMvc mvc) throws Exception {
        //http://localhost/books
//        创建模拟请求
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
//        执行对应的请求
        mvc.perform(builder);
    }
}

匹配响应执行状态

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
//开启虚拟MVC调用
@AutoConfigureMockMvc
class DemoApplicationTests {
    @Test
    //注入虚拟mvc调用
    void  testProperties(@Autowired  MockMvc mvc) throws Exception {
        //http://localhost/books
//        创建模拟请求
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books1");
//        执行对应的请求,返回结果为是否成功的真实值
        ResultActions actions = mvc.perform(builder);


//        设置预期值 与真实值进行比较,成功测试通过,失败测试失败
        StatusResultMatchers status = MockMvcResultMatchers.status();
//        预计本处调用成功的:状态200
        ResultMatcher ok = status.isOk();
//        为本次调用结果设置一个预期值进行匹配
        actions.andExpect(ok);
    }
}

本处book1导致404,输出结果是:

匹配响应体

和匹配执行状态同理,只不过本处匹配的是return回去的结果

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
//开启虚拟MVC调用
@AutoConfigureMockMvc
class DemoApplicationTests {
    @Test
    //注入虚拟mvc调用
    void  testProperties(@Autowired  MockMvc mvc) throws Exception {
        //http://localhost/books
//        创建模拟请求
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
//        执行对应的请求,返回结果为是否成功的真实值
        ResultActions actions = mvc.perform(builder);

        
        ContentResultMatchers content = MockMvcResultMatchers.content();
        //如果返回体直接返回的该对象,就是一个json格式,将本处的参数改为需要匹配的json格式就行
        ResultMatcher result = content.string("springboot");
        actions.andExpect(result);
    }
}

匹配响应头

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@AutoConfigureMockMvc
class DemoApplicationTests {
    @Test
    //注入虚拟mvc调用
    void  testProperties(@Autowired  MockMvc mvc) throws Exception {
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
        ResultActions actions = mvc.perform(builder);


        HeaderResultMatchers header = MockMvcResultMatchers.header();
        //匹配响应头的这个键值对
        ResultMatcher result = header.string("Content-Type","application/json");
        actions.andExpect(result);
    }
}

业务层测试事务回滚

回滚可以实现在测试时不在数据库留下痕迹

@Transaction:表示事务

Rollback 参数true表示启用回滚

测试用例设置随机数据

配置文件中:

testcase:
  book: ${random.int}
  #限定范围
  id: ${random.int(5,10)}
  name: ${random.value}
  uuid: ${random.uuid}
  publishTime: ${random.long}

数据层解决方案一 基于关系型数据库(sql)

springboot默认的数据源

例如:Hikaricp不用导入可以直接在配置文件配置:

JDBCTemplate

标准格式:

配置:

jdbc内置数据库

怎么用不多说

数据层解决方案二 基于非关系型数据库(nosql)

市场常见的nosql解决方案

  • Redis
  • Mongo
  • ES

Redis

基本使用

具体按照启动自己看redis的笔记

一些基本操作:

springboot整合redis

首先在cmd启动redis,然后

也可以不写下面的配置,默认的就是localhost和6379

直接用:

其他方法类似不在多写

上面与客服端操作不等效把RedisTemplate改为StringRedisTemplate就和客户端等效

整合第三方技术

缓存

  • 缓存是一种介于数据永久存储介质和数据应用之间的数据临时存储介质
  • 使用缓存可以有效的减少低速读取过程的次数(例如磁盘io),提高系统性能
  • 缓存不仅可以用于提高永久性介质的数据读取效率,还可以通过临时的数据存储空间

springboot提供了缓存技术,方便缓存使用

  1. 导入相关坐标

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    
  2. 在启动类加上注解

    //开启缓存功能
    @EnableCaching
    
  3. 在需要用缓存的地方(查询)加上

    @Override
    //设置返回值缓存到value参数名空间中的名和函数参数id相同的位置,下一次在调用且id相同就自己到缓存中拿出
    @Cacheable(value = "cacheSpace",key = "#id")
    public Book getById(Integer id) {
        return  bookDao.selectById(id);
    }
    
  • springboot除了上面的默认缓存方案外,还可以对其他缓存技术进行整合,统一接口,方便缓存技术的开发和管理,可以整合的技术包括:

任务

  • 定时任务是企业级应用中的常见操作

    • 年度报表。。
    • 。。
  • 流行的定时任务技术

    • Quartz
    • Spring Task
  • 相关概念

springboot整合spring tesk

  1. 在启动类添加注解

    //开启定时任务功能
    @EnableScheduling
    
  2. 在定时任务函数上加上注解

    //本处含义为每一秒执行一次任意分钟、小时、天、月,不限情形
    @Scheduled(cron = "0/1 * * * * ?")
    public void print(){
        System.out.println("task");
    }
    

如果你想也可以更改关于它的相关配置

整合JavaMail

  • SMTP:简单邮件传输协议,用于发送电子邮件的传输协议
  • POP3:用于接收电子邮件的标准协议
  • IMAP:互联网消息协议,是POP3的替代协议

步骤:

  1. 导入javamail坐标

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    
  2. 配置相关信息

    spring:
      mail:
        #邮件供应商smtp协议,qq邮箱来发
        host: smtp.qq.com
        username: 124。。。@qq.com
    #    不是qq登录密码,是供应商提供的加密后密码
        password: 。。。。
    

    获取邮箱加密密码:请求邮箱--设置--账号--点击开启服务会获得授权码就是密码

  3. 发送邮件

    @Service
    public class SentMailImpl implements SendMailService {
    
        //因为已被整合所以自动装配就行
        @Autowired
        private JavaMailSender javaMailSender;
    
    //    发送人
        private String from = "@qq.com";
    //    接收人
        private String to ="@163.com";
    //    标题
        private String subject = "测试邮件";
    //    正文
        private String context = "正文内容";
        @Override
        public void sendMail() {
            SimpleMailMessage message = new SimpleMailMessage();
            //这样收件人看到的的小蜜蜂发的邮件
            // message.setFrom(from+("小蜜蜂"));
            message.setFrom(from);
            message.setTo(to);
            message.setSubject(subject);
            message.setText(context);
    //        定时发送
    //        message.setSentDate();
            javaMailSender.send(message);
        }
    }
    

​ 之后在测试类装填调用方法

上面是发送简单文件,发送复杂邮件的方法:

消息

  • 企业级应用中广泛使用的三种异步消息传递技术

    • JMS
    • AMQP
    • MQTT
  • JMS

  • AMQP

  • MQTT

监控

标签:缓存,SpringBoot,--,private,实用,SpringBootTest,mvc,message,class
From: https://www.cnblogs.com/rainaftersummert/p/17676763.html

相关文章

  • DOM 概述
    一:什么是domdom是一种文档对象模型,同时也是用于html编程的接口,通过dom来操作页面中的元素。当html页面被实现加载的时候,浏览器会创建一个dom,给文档提供了一种新的逻辑结构,并且可以改变内容和结构。DOM是面向对象,并且定义了修改文档所需要的对象,各个对象之前的关系,我们可以也页面......
  • 476. 数字的补数
    链接https://leetcode.cn/problems/number-complement/description/思路没啥好说的,二进制与十进制的互相转换,基本功。代码classSolution:deffindComplement(self,num:int)->int:bin_li=self.int2bin(num)bin_li=self.reverse(bin_li)......
  • 点餐项目解析
    这是一个典型的前后端分离项目,使用Django作为后端框架,Vue.js作为前端框架。项目的运行交互如下:前端部分:Vue.js框架:项目的前端部分使用Vue.js构建,项目入口文件为src/main.ts。路由管理:VueRouter用于管理前端页面的路由,路由配置在src/router文件夹中,其中root.ts文件包含了前端......
  • 15 个最佳 3D 建模软件工具
    15个最佳3D建模软件工具正在寻找一种工具来为您的项目制作3D建模工具吗?从头学习three.Js或者Babylon.js路线太陡峭又枯燥,可能令人望而生畏,但这里有一系列工具可以帮助您快速上手,让你愉快感受3d的魅力!Tinkercadhttps://www.tinkercad.com/—免费、基于网络、简单且直观......
  • vue学习
    ......
  • 数据库与服务端
    啥是数据库?​ 数据库是存储数据的地方,我们平时使用电脑或者手机,接触到的都是图形化界面,不能直接接触到数据库,其实,数据库无处不在,我们使用的绝大多数需要记录的数据都存储在数据库中,可以说,现如今的便捷生活,就是建立在数据库的基础上的。登录网站时,用户的账号和密码都存储在服务器......
  • SpringCloud笔记
    微服务技术栈:                                              ......
  • 数论中一个有趣的小结论
    对于任意奇质数\(p\),对于任意整数\(k<p-1\),有$p|\sum_{i=1}{p-1}ik$证明:取\(p\)的原根\(g\),由简化剩余系的性质知:在\(\modp\)意义下,有\[\{g,2g,\cdots,(p-1)g\}=\{1,2,\cdots,p-1\}\]于是\[\sum_{i=1}^{p-1}i^k\equiv\sum_{i=1}^{p-1}(gi)^k\equiv......
  • 最近的状态
    最近总是在工作中莫名其妙的流泪,我不知道我是想到了什么,就是单纯的悲伤。不管怎样,我都要从头开始。爬起来,擦干净身上的尘土,重新前行。告诉自己不要向后看。哪怕在黑夜中,也要寻找属于自己的那盏灯。......
  • 段寄存器
    段寄存器段寄存器一共有96位点击查看代码structSegMent{WORDSelector;WORDAtrributes;DWORDbase;DWORDLimt;}其中Selector,可见。段描述符当执行MOVDS,AX是CPU会查表,根据AX的值来选择查找GDT,LDT表,查找表的什么位置,查出多少数据。理解:并不是把AX......