蒼穹外賣項目實戰(day-5完整版)-記錄實戰教程及問題的解決方法

Redis基本操作及下載安裝包(Redis及可視化工具),都在我的上一篇文章:Redis基本知識及簡單操作,這里不再贅述

店鋪營業狀態修改功能

(1)需求分析與設計

(2)SpringDataRedisTest修改:

位置:sky-server/src/test/java/com/sky/SpringDataRedisTest.java

注意:把測試類的@SpringBootTest注解注釋掉

//@SpringBootTest //不注解的話,每次啟動項目都會重新運行一下的測試用例,導致測試時間過長

(3)RedisConfiguration創建

位置:sky-server/src/main/java/com/sky/config/RedisConfiguration.java

完整代碼:

package com.sky.config;import lombok.extern.slf4j.Slf4j;
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.StringRedisSerializer;@Configuration
@Slf4j
public class RedisConfiguration {@Bean//@Bean的作用是將方法的返回值注入到spring容器中,這里創建了一個RedisTemplate對象public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {log.info("初始化創建Redis模板對象...");// 創建RedisTemplate對象RedisTemplate redisTemplate = new RedisTemplate();// 設置連接工廠redisTemplate.setConnectionFactory(redisConnectionFactory);// 設置key和value的序列化方式,否則會Redis數據庫中key和value會出現亂碼問題redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new StringRedisSerializer());return redisTemplate;}
}

示意圖:

(4)配置文件完善:

1、添加Redis服務配置,Redis數據庫沒有設置密碼的需要注釋掉或刪掉“password”字段

2、Redis密碼查看方式

查看有沒有設置密碼的方式如下,找到你的Redis安裝目錄

打開redis.windows.conf文件,Ctrl+F鍵打開查找功能,輸入“pass ”,注意后面跟一個空格,即可看到有沒有設置密碼

3、圖中密碼已注釋,表示沒有設置密碼,取消注釋則“foobared”為數據庫密碼,可更改

1、application.yml完善

位置:sky-server/src/main/resources/application.yml

添加的代碼為:

spring:redis:host: ${sky.redis.host}port: ${sky.redis.port}#redis密碼,如果沒有則不用設置
#??? password: ${sky.redis.password}#redis數據庫索引(默認為0)database: ${sky.redis.database}
#??? timeout: 10000? #連接超時時間(毫秒)
#??? lettuce:?? #Lettuce客戶端配置
#????? pool: #連接池配置
#??????? max-active: 8 #最大連接數
#??????? max-idle: 8? #最大空閑連接數
#??????? min-idle: 0? #最小空閑連接數
#??????? max-wait: -1ms? #最大等待時間(毫秒),-1表示無限等待

文件完整代碼:

server:port: 8080spring:profiles:active: devmain:allow-circular-references: truedatasource:druid:driver-class-name: ${sky.datasource.driver-class-name}url: jdbc:mysql://${sky.datasource.host}:${sky.datasource.port}/${sky.datasource.database}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: ${sky.datasource.username}password: ${sky.datasource.password}redis:host: ${sky.redis.host}port: ${sky.redis.port}#redis密碼,如果沒有則不用設置
#??? password: ${sky.redis.password}#redis數據庫索引(默認為0)database: ${sky.redis.database}
#??? timeout: 10000? #連接超時時間(毫秒)
#??? lettuce:?? #Lettuce客戶端配置
#????? pool: #連接池配置
#??????? max-active: 8 #最大連接數
#??????? max-idle: 8? #最大空閑連接數
#??????? min-idle: 0? #最小空閑連接數
#??????? max-wait: -1ms? #最大等待時間(毫秒),-1表示無限等待mybatis:#mapper配置文件mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.sky.entityconfiguration:#開啟駝峰命名map-underscore-to-camel-case: truelogging:level:com:sky:mapper: debugservice: infocontroller: infosky:jwt:# 設置jwt簽名加密時使用的秘鑰admin-secret-key: itcast# 設置jwt過期時間admin-ttl: 72000002222# 設置前端傳遞過來的令牌名稱admin-token-name: tokenalioss:endpoint: ${sky.alioss.endpoint}access-key-id: ${sky.alioss.access-key-id}access-key-secret: ${sky.alioss.access-key-secret}bucket-name: ${sky.alioss.bucket-name}

示意圖:

2、application-dev.yml完善

Redis數據庫沒有設置密碼的需要注釋掉或刪掉“password”字段

位置:sky-server/src/main/resources/application-dev.yml

添加的代碼:

sky:redis:host: localhostport: 6379
#??? password: 123456database: 1

文件完整代碼:

sky:datasource:driver-class-name: com.mysql.cj.jdbc.Driverhost: localhostport: 3306database: sky_take_outusername: rootpassword: rootalioss:endpoint: oss-cn-beijing.aliyuncs.comaccess-key-id: LTAI5tPjjUp2rSRyizZtYX4yaccess-key-secret: eMbPCYCwdl4h9GVAROmgsH6mjZnylYbucket-name: sky-itcast-txredis:host: localhostport: 6379
#??? password: 123456database: 1

示意圖:

(5)admin的ShopController創建

位置:sky-server/src/main/java/com/sky/controller/admin/ShopController.java

完整代碼:

package com.sky.controller.admin;import com.sky.config.RedisConfiguration;
import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Api(tags = "后臺-商鋪管理相關接口")
@Slf4j
public class ShopController {public static final String key = "shop_status";@Autowiredprivate RedisTemplate redisTemplate;/*** 設置商鋪營業狀態* @param status* @return*/@PutMapping("/{status}")@ApiOperation(("設置商鋪營業狀態"))public Result setStatus(@PathVariable Integer status){log.info("設置商鋪狀態為:{}", status == 1 ? "營業中" : "打烊中");redisTemplate.opsForValue().set(key, status);return Result.success();}@GetMapping("/status")@ApiOperation(("獲取商鋪營業狀態"))public Result<Integer> getStatus(){Integer status = (Integer) redisTemplate.opsForValue().get(key);log.info("商鋪營業狀態為:{}", status == 1 ? "營業中" : "打烊中");return Result.success(status);}}

示意圖:

(6)user的ShopController創建

在Controller目錄下創建user包,創建的輸入“com.sky.controller.user”

位置:sky-server/src/main/java/com/sky/controller/user/ShopController.java

完整代碼:

package com.sky.controller.user;import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;@RestController("userShopController")
@RequestMapping("/user/shop")
@Api(tags = "后臺-商鋪管理相關接口")
@Slf4j
public class ShopController {public static final String key = "shop_status";@Autowiredprivate RedisTemplate redisTemplate;@GetMapping("/status")@ApiOperation(("獲取商鋪營業狀態"))public Result<Integer> getStatus(){Integer status = (Integer) redisTemplate.opsForValue().get(key);log.info("商鋪營業狀態為:{}", status == 1 ? "營業中" : "打烊中");return Result.success(status);}}

示意圖:

注意:由于admin包下的和user包下ShopController同名,導致他們在spring容器中的Bean名也一樣即開頭首字母變小寫(shopController),直接啟動項目匯報錯,所以要自定義Bean名(如user表改為"userShopController")

代碼分別如下:

ShopController:

@RestController("userShopController")

AdminController:

@RestController("adminShopController")

示意圖:

(7)功能測試

(1)swagger接口文檔測試:蒼穹外賣項目接口文檔

出現錯誤:響應碼為500,控制臺顯示

“class java.lang.Integer cannot be cast to class java.lang.String (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')”

原因:問題出在 RedisTemplate 的值序列化器設置上。老師當前使用了 StringRedisSerializer 作為值序列化器,而我們的是Integer,所以老師沒對value序列化,但卻嘗試存儲 Integer 類型的數據,導致類型轉換異常。或者我們把value序列化設置成指定Integer類型序列化,需要修改的地方是 值的序列化器,將其改為能處理多種類型的序列化器。

解決:對RedisConfiguration進行修改,使其支持Integer等多種類型數據的序列化

位置:sky-server/src/main/java/com/sky/config/RedisConfiguration.java

完整代碼:

package com.sky.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
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.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {log.info("初始化創建Redis模板對象...");// 創建RedisTemplate對象,并指定泛型為<String, Object>RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();// 設置連接工廠redisTemplate.setConnectionFactory(redisConnectionFactory);// 創建Jackson2JsonRedisSerializer序列化器Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);// 配置ObjectMapper,讓Jackson能序列化更多類型ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);// 設置key的序列化方式為StringRedisSerializerredisTemplate.setKeySerializer(new StringRedisSerializer());// 設置value的序列化方式為Jackson2JsonRedisSerializer(支持多種類型)redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// 同時設置hash類型的key和value的序列化器redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}
}

測試

查看Redis數據庫,shop_status的值已設置為1

(2)前后端聯調

打開前段網頁:工作臺,點擊“營業狀態設置”,選擇“打烊中”,狀態已改變

響應碼為200,表示成功!至此,店鋪狀態修改功能已完成!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95802.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95802.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95802.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第R8周:RNN實現阿爾茲海默病診斷

數據集包含2149名患者的廣泛健康信息&#xff0c;每名緩則的ID范圍從4751到6900不等&#xff0c;該數據集包含人口統計詳細信息&#xff0c;生活方式因素、病史、臨床測量、認知和功能評估、癥狀以及阿爾茲海默癥的診斷。 一、準備工作 1、硬件準備 import numpy as np import …

MySQL復制技術的發展歷程

在互聯網應用不斷發展的二十多年里&#xff0c;MySQL 一直是最廣泛使用的開源關系型數據庫之一。它憑借開源、輕量、靈活的優勢&#xff0c;支撐了無數網站、移動應用和企業系統。支撐 MySQL 長期發展的關鍵之一&#xff0c;就是 復制&#xff08;Replication&#xff09;技術。…

C++從字符串中移除前導零

該程序用于去除字符串開頭的零字符。當輸入"0000123456"時&#xff0c;程序會輸出"123456"。核心函數removeZero()通過while循環找到第一個非零字符的位置&#xff0c;然后使用erase()方法刪除前面的所有零。主函數讀取輸入字符串并調用該函數處理。程序簡…

【面試題】C++系列(一)

本專欄文章持續更新&#xff0c;新增內容使用藍色表示。C面向對象的三大特性&#xff1a;封裝&#xff0c;繼承&#xff0c;多態&#xff08;1&#xff09;封裝是將數據和函數組合到一個類里。主要目的是隱藏內部的實現細節&#xff0c;僅暴露必要的接口給外部。通過封裝&#…

當沒辦法實現從win復制東西到Linux虛擬機時的解決辦法

① 先確認是否已安裝bash復制sudo apt list --installed | grep open-vm-tools如果 沒有任何回顯 → 沒裝&#xff0c;跳到 ③如果看到 open-vm-tools 已安裝 → 繼續 ②② 啟動正確的服務&#xff08;單詞別打錯&#xff09;bash復制systemctl status vmtoolsd # 查看…

用Markdown寫自動化用例:Gauge實戰全攻略!

你作為一名自動化測試工程師&#xff0c;正在為一個復雜的Web應用編寫測試腳本&#xff1a;傳統工具要求寫大量代碼&#xff0c;維護起來像解謎游戲&#xff0c;團隊非技術成員完全插不上手。這時&#xff0c;Gauge這個“自動化神器”如魔法般出現——它允許用Markdown寫可讀的…

Unity開發保姆級教程:C#腳本+物理系統+UI交互,3大模塊帶你通關游戲開發

文章目錄基礎概念Unity開發環境搭建版本選擇&#xff1a;為什么2021 LTS是最佳起點&#xff1f;三步安裝&#xff1a;從下載到項目創建界面認知&#xff1a;5分鐘掌握核心操作區配置優化&#xff1a;讓開發更順暢驗證環境&#xff1a;創建你的第一個CubeC#基礎語法與Unity腳本結…

Depth Anything V2論文速讀

這篇論文主要講了兩方面1.為了解決模型在正常標注的現實圖像上訓練的缺陷問題、提出了新的模型訓練數據和訓練方法真實標記圖像存在缺點&#xff1a;標簽噪聲&#xff08;深度傳感器可能存在空洞、玻璃等物體反射導致精度不準確&#xff09;、標簽細節粗糙&#xff08;深度圖邊…

數據庫原理及應用_數據庫管理和保護_第5章數據庫的安全性_理論部分

前言 "<數據庫原理及應用>(MySQL版)".以下稱為"本書"中第5章前6節內容 引入 數據庫的安全性是非常重要的,表現在兩個方面:一數據的訪問權限,二數據的物理安全.本書在這一章前6節基本上都是理論性的內容,選擇其中重要部分進行解讀. 5.1數據庫安全性…

QT6 配置 Copilot插件

下載項目&#xff1a;解壓 GitHub - github/copilot.vim: Neovim plugin for GitHub Copilot Node.js必須安裝 Node.js — Download Node.js 例如先安裝一個qt6 ,qt Cteatror選擇新版本的 設置 效果&#xff0c;注釋里面寫要求&#xff0c;tab同意 #include "mainwindow…

ArcGIS學習-15 實戰-建設用地適宜性評價

選定參評因子 高程坡度河流道路土地利用 確定因子分析標準 以下僅參數僅做展示&#xff0c;并非合理的數值 高程 0-100m&#xff1a;100 分&#xff0c;此高程范圍通常地勢較為平坦&#xff0c;建設成本相對較低&#xff0c;適宜建設。100-200m&#xff1a;70 分&#xff…

[C/C++學習] 7.“旋轉蛇“視覺圖形生成

參考文獻: 童晶. C和C游戲趣味編程[M].人民郵電出版社.2021. 一.弧度制和角度制的轉換 弧度制數值和角度對應表: (PI為圓周率&#xff0c;值為3.1415926)弧度制角度制00PI/630PI/360PI/2902*PI/3120PI1802*PI360二.扇形的繪制 easyx的solidpie( )函數用于在一個矩形區域內繪制…

自然語言處理之PyTorch實現詞袋CBOW模型

在自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;詞向量&#xff08;Word Embedding&#xff09;是將文本轉換為數值向量的核心技術。它能讓計算機“理解”詞語的語義關聯&#xff0c;例如“國王”和“女王”的向量差可能與“男人”和“女人”的向量差相似。而Word2…

TCP, 三次握手, 四次揮手, 滑動窗口, 快速重傳, 擁塞控制, 半連接隊列, RST, SYN, ACK

目錄 TCP 是什么&#xff1a;面向連接 可靠 字節流三次握手&#xff1a;為什么不是兩次四次揮手與 TIME_WAIT&#xff1a;誰等誰序列號/確認號與去重、排序、確認重傳機制&#xff1a;超時重傳與快速重傳滑動窗口與流量控制擁塞控制&#xff1a;慢啟動/擁塞避免/快重傳/快恢…

CentOS 7.2 虛機 ssh 登錄報錯在重啟后無法進入系統

文章目錄前言1. 故障描述2. 故障診斷3. 故障原因4. 解決方案總結前言 上周幫用戶處理了一個 linux 虛擬機在重啟后無法正常進入操作系統的故障&#xff0c;覺得比較有意思&#xff0c;在這里分享給大家。 1. 故障描述 事情的起因是一臺系統版本為 CentOS 7.2 的 VMware 虛擬機…

《從使用到源碼:OkHttp3責任鏈模式剖析》

一 從使用開始0.依賴引入implementation ("com.squareup.okhttp3:okhttp:3.14.7")1.創建OkHttpClient實例方式一&#xff1a;直接使用默認配置的Builder//從源碼可以看出&#xff0c;當我們直接new創建OkHttpClient實例時&#xff0c;會默認給我們配置好一個Builder …

安裝3DS MAX 2026后,無法運行,提示缺少.net core的解決方案

今天安裝了3DS MAX 2026&#xff08;俗稱3DMAX&#xff09;&#xff0c;安裝完畢后死活運行不了。提示如下&#xff1a; 大意是找不到所需的.NET Core 8庫文件。后來搜索了下&#xff0c;各種文章說.NET CORE和.NET FRAMEWORK不是一個東西。需要單獨下載安裝。然后根據提示&…

FastAPI + LangChain 和 Spring AI + LangChain4j

FastAPI+LangChain和Spring AI+LangChain4j這兩個技術組合進行詳細對比。 核心區別: 特性維度 FastAPI + LangChain (Python棧) Spring AI + LangChain4j (Java棧) 技術棧 Python生態 (FastAPI, LangChain) Java生態 (Spring Boot, Spring AI, LangChain4j) 核心設計哲學 靈活…

Apache 2.0 開源協議詳解:自由、責任與商業化的完美平衡-優雅草卓伊凡

Apache 2.0 開源協議詳解&#xff1a;自由、責任與商業化的完美平衡-優雅草卓伊凡引言由于我們優雅草要推出收銀系統&#xff0c;因此要采用開源代碼&#xff0c;卓伊凡目前看好了一個產品是apache 2.0協議&#xff0c;因此我們有必要深刻理解apache 2.0協議避免觸犯版權問題。…

自學嵌入式第37天:MQTT協議

一、MQTT&#xff08;消息隊列遙測傳輸協議Message Queuing Telemetry Transport&#xff09;1.MQTT是應用層的協議&#xff0c;是一種基于發布/訂閱模式的“輕量級”通訊協議&#xff0c;建構于TCP/IP協議上&#xff0c;可以以極少的代碼和有限的帶寬為連接遠程設備提供實時可…