五、移动端前后端联调
前端服务



后端服务

全部删除,重新上传


minio要开


Cannot read properties of undefined (reading 'Map')
在rentHouseH5中src\config\config.ts改高德地图 key


查找
地区筛选


价格筛选

排序

个人中心
浏览历史


浏览历史图片加载失败
后端返回的图片 URL 是完整的绝对路径:http://113.141.166.99:9000/lease/...
我的预约

我的租约

确认

六、项目优化
使用 Reids 保存缓存数据
common/src/main/java/org/example/lease/common/redis/RedisConfiguration.java
java
package org.example.lease.common.redis;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Object> stringObjectRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(RedisSerializer.string());
template.setValueSerializer(RedisSerializer.java());
return template;
}
}
编写缓存逻辑
web-app
web/web-app/src/main/java/org/example/lease/web/app/service/impl/RoomInfoServiceImpl.java
java
@Autowired
private RedisTemplate<String, Object> redisTemplate;
getDetailById方法下
java
public RoomDetailVo getDetailById(Long id) {
String key = RedisConstant.APP_ROOM_PREFIX + id;
RoomDetailVo roomDetailVo = (RoomDetailVo) redisTemplate.opsForValue().get(key);
//1.查询房间信息
RoomInfo roomInfo = roomInfoMapper.selectById(id);
if (roomDetailVo == null) {
//1.查询房间信息
RoomInfo roomInfo = roomInfoMapper.selectById(id);
if (roomInfo == null) {
return null;
}
roomDetailVo = new RoomDetailVo();
......
redisTemplate.opsForValue().set(key, roomDetailVo);
}
编写删除缓存逻辑
web-admin
web/web-admin/src/main/java/org/example/lease/web/admin/service/impl/RoomInfoServiceImpl.java
java
@Autowired
private RedisTemplate redisTemplate;
saveOrUpdateRoom方法
java
@Override
public void saveOrUpdateRoom(RoomSubmitVo roomSubmitVo) {
boolean isUpdate = roomSubmitVo.getId() != null;
super.saveOrUpdate(roomSubmitVo);
//若为更新操作,则先删除与Room相关的各项信息列表
if (isUpdate) {
//6.删除原有leaseTermList
......
//7.删除缓存
redisTemplate.delete(RedisConstant.APP_LOGIN_PREFIX + roomSubmitVo.getId());
}
......
}
removeRoomById方法
java
@Override
public void removeRoomById(Long id) {
//1.删除RoomInfo
......
//2.删除graphInfoList
......
//3.删除attrValueList
......
//4.删除facilityInfoList
......
//5.删除labelInfoList
......
//6.删除paymentTypeList
......
//7.删除leaseTermList
......
//8.删除缓存
redisTemplate.delete(RedisConstant.APP_ROOM_PREFIX + id);
}
压力测试
Apifox对根据ID获取房间详情这个接口进行压力测试


成功

自动化测试



七、项目部署
域名解析

部署前端项目
java
npm run build
后台管理系统
移动端
部署后端项目
使用 IDEA 的 maven 插件对项目进行打包,完成后,在web-admin 和web-app 模块的target目录下找到web-admin-1.0-SNAPSHOT.jar和web-app-1.0-SNAPSHOT.jar。

因为数据库权限设置为本地

所以我跳过测试打包

问题

全启动瞬间负载100%,就这样

结束