Part05 中州养老项目实训 ☀️
Part05 中州养老项目实训 ☀️
1. 优化项目(5-6)
1.1 Swagger 🍐
Swagger
1️⃣ 介绍
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。

它的主要作用是:
- 使得前后端分离开发更加方便,有利于团队协作
- 接口的文档在线自动生成,降低后端开发人员编写接口文档的负担
- 功能测试
Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!
目前,一般都使用knife4j框架。
2️⃣ 使用步骤 👇
导入 knife4j 的maven坐标
在pom.xml中添加依赖
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.2</version> </dependency>

在config包下的配置类中加入 knife4j 相关配置并且在类上添加2个注解
WebMvcConfig.java
@Slf4j
@Configuration
@EnableSwagger2
@EnableKnife4j
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Bean
public Docket docket() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("中州养老项目接口文档")
.version("1.0")
.description("中州养老项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.zzyl.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
其余方法还没写完哦,,,,
}

设置静态资源映射,否则接口文档页面无法访问
WebMvcConfig.java
/** * 设置静态资源映射 * @param registry */ @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { log.info("开始进行静态资源映射..."); registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); }
3️⃣ 常用注解 👇
通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:
注解 | 说明 |
---|---|
@Api | 用在类上,例如Controller,表示对类的说明 |
@ApiModel | 用在类上,例如entity、DTO、VO |
@ApiModelProperty | 用在属性上,描述属性信息 |
@ApiOperation | 用在方法上,例如Controller的方法,说明方法的用途、作用 |
接下来,使用上述注解,生成可读性更好的接口文档,启动服务:访问http://localhost:8080/doc.html

书写这些是不是很繁琐呀!!,可以使用AI插件哦!!!
1.2 Redis操作
SpringCache和Redis操作
前面我们已经实现了移动端房型查看功能,且放在首页,因此会被用户频繁访问,进而对数据库查询操作。在高并发 的情况下,频繁查询数据库会导致系统性能下降 ,服务端响应时间增长。现在需要对此方法进行缓存优化,提高系统的性能。(如下图)

SpringCache是一个框架,实现了基于注解的缓存功能 ,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。
Spring Cache 只是提供了一层抽象,底层可以切换不同的 cache 实现。具体就是通过CacheManager 接口 来统一不同的缓存技术。CacheManager 是 Spring 提供的各种缓存技术抽象接口。
针对不同的缓存技术需要实现不同的 CacheManager:
CacheManager | 描述 |
---|---|
EhCacheCacheManager | 使用 EhCache 作为缓存技术 |
GuavaCacheManager | 使用 Google 的 GuavaCache 作为缓存技术 |
RedisCacheManager | 使用 Redis 作为缓存技术 |
在 SpringCache 中提供了很多缓存操作的注解,常见的是以下的几个:
注解 | 说明 |
---|---|
@EnableCaching | 开启缓存注解功能 |
@Cacheable | 在方法执行前 spring 先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中 |
@CachePut | 将方法的返回值放到缓存中 |
@CacheEvict | 将一条或多条数据从缓存中删除 |
在 spring boot 项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用@EnableCaching
开启缓存支持即可。
例如,使用 Redis 作为缓存技术,只需要导入 Spring data Redis 的 maven 坐标即可。
代码操作
由于 SpringCache 的基本功能是 Spring 核心(spring-context)中提供的,所以目前我们进行简单的 SpringCache 测试,是可以不用额外引入其他依赖的。 可以检查是否导入了下列依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
1). 引导类上加@EnableCaching
在引导类上加该注解,就代表当前项目开启缓存注解功能。

在 XXXController 的 list 方法上加入@Cacheable
注解
在进行数据查询时,我们需要根据roomCache和status状态进行查询,所以我们在缓存数据时,可以将roomCache和status状态组合起来作为key,如: roomCache::1
@RestController
public class RoomTypeController {
@Autowired
private RoomTypeMapper roomTypeMapper;
@GetMapping("/customer/roomTypes")
@Cacheable(value = "roomCache",key = "#status")
public Result<List<RoomType>> findAll(Integer status){
List<RoomType> rts = roomTypeMapper.select(status);
//System.out.println(rts);
return Result.success(rts);
}
}
为了保证数据库中数据与缓存数据的一致性,在我们添加房间类型或者房间类型数据之后,需要清空当前房间类型缓存的全部数据。那么@CacheEvict
注解如何清除某一份缓存下所有的数据呢,这里我们可以指定@CacheEvict
中的一个属性 allEnties,将其设置为 true 即可。
@PostMapping
@CacheEvict(value = "roomCache",allEntries = true) //清除roomCache名称下,所有的缓存数据
public Result 增删改方法(.....) {
}

上述确实能解决数据库频繁查询的问题,但是如果idea重启,缓存就消失了,下次启动idea得重新构建缓存,有没有一种缓存技术可以直接避免这种情况,提高缓存的可用性尼?
使用redis非关系型数据库即可
- 安装Redis,在非中文的路径下,解压焱哥发在微信群里的压缩包,点击运行startredis.bat 即可

点击运行startredis.bat 即可
- 在项目的pom.xml中添加redis依赖,点击右上角的刷新
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.4.5</version>
</dependency>

- 在项目的yml文件中添加redis链接配置
spring:
redis:
host: localhost
port: 6379
database: 0


反复点击发现,不会查询数据库

通过redis可视化软件,可以查看已经存入的数据,且关闭idea数据依然存在