日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

菌子导航系统(持续开发中)

發布時間:2024/3/26 windows 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 菌子导航系统(持续开发中) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 菌子導航
    • 前言
      • 項目架構
      • spring-cloud 和 spring-boot 版本選擇
      • 使用到的組件(依賴)
      • 架構分層
    • 項目基本功能
      • 1 使用Nacos做配置中心
      • 2 logback日志
      • 3 mybatis-plus操作數據庫
      • 4 Caffeine 緩存整合
      • 5 LocalDateTime 序列化&反序列化
      • 6 參數校驗快速失敗配置
      • 7 集成日志鏈路
      • 8 控制器參數切面
      • 9 日志切面
      • 10 集成 Swagger + knife4j
      • 11 全局異常攔截
      • 12 Nacos 增加監聽器
      • 13 RestTemplate 集成 okhttp4
      • 14 注冊服務到Nacos
      • 15 集成自定義的redis starter
    • 項目業務功能
      • 1 集成有道文本翻譯接口
      • 2 集成天行數據
      • 3 枚舉生成器
      • 4 網站錄入&分頁查看
      • 5 天氣預報
    • 項目部署與運行
      • 1 Idea中運行
      • 2 打包在windows的cmd中運行
      • 3 在Linux后臺運行
      • 4 使用Prometheus & Grafana 監控jvm

菌子導航

前言

本導航網站旨在對接多個三方接口,常用功能集成到導航系統中。目前已經在對接的是有道文本翻譯接口、天行數據、自定義枚舉生成器。
目前項目代碼托管在 :
https://gitee.com/fengsoshuai/junzi-navigation.git
最新分支是 dev 分支。

本項目主要是練習Java后端的技術。
隨后加了一個vue的前端界面。倉庫地址:https://gitee.com/fengsoshuai/vue-back-navigation.git

項目架構

參考并使用DDD領域模型思想,架構搭建使用了阿里的 COLA 項目。

https://gitee.com/fengsoshuai/COLA#

使用命令: mvn archetype:generate -DgroupId=org.feng.navigation -DartifactId=junzi-navigation -Dversion=1.0.0-SNAPSHOT
-Dpackage=org.feng.navigation -DarchetypeArtifactId=cola-framework-archetype-service -DarchetypeGroupId=com.alibaba.cola
-DarchetypeVersion=4.0.1

spring-cloud 和 spring-boot 版本選擇

參考:https://spring.io/projects/spring-cloud

spring-boot 選擇 2.7.8 ,cloud選擇 2021.0.5

使用到的組件(依賴)

組件版本
lombok1.18.16
okhttp4.9.0
mapstruct1.4.2.Final
mybatis-plus3.5.3.1
druid1.2.15
gson2.9.1
hutool-core5.8.11
caffeine2.9.3
swagger3.0.0
freemarker2.7.8
thymeleaf2.7.8
prometheus1.9.7
pinyin4j2.6.1

架構分層

常規的COLA分層說明:https://blog.csdn.net/significantfrank/article/details/110934799

本項目的分層簡述:

項目基本功能

1 使用Nacos做配置中心

配置內容如下:

junzi:nav:url:youDao: https://openapi.youdao.com/apitianXing: https://apis.tianapi.comapp:youDao:appKey: 在有道注冊得到的keyappSecret: 在有道注冊得到的secrettianXing:appKey: 在天行注冊的key # 數據源 spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:13321/junzi-navigation?useUnicode=true&serverTimezone=UTCusername: rootpassword: 123456type: com.alibaba.druid.pool.DruidDataSource# 支持post、delete等請求mvc:hiddenmethod:filter:enabled: true # mybatis plus mybatis-plus:# xml掃描,多個目錄用逗號或者分號分隔(告訴mapper所對應的xml文件位置)mapper-locations: classpath*:mapper/**Mapper.xml# 以下配置均有默認值global-config:db-config:#主鍵類型 auto:"數據庫ID自增" 1:"用戶輸入ID",2:"全局唯一ID (數字類型唯一ID)", 3:"全局唯一ID UUID";id-type: auto#字段策略 IGNORED:"忽略判斷" NOT_NULL:"非 NULL 判斷") NOT_EMPTY:"非空判斷"field-strategy: NOT_EMPTY#數據庫類型db-type: MYSQLconfiguration:# 是否開啟自動駝峰命名規則映射:從數據庫列名到Java屬性駝峰命名的類似映射map-underscore-to-camel-case: true# 如果查詢結果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段call-setters-on-nulls: true# 這個配置會將執行的sql打印出來,在開發或測試的時候可以用log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 掃描實體type-aliases-package: org.feng.navigation.database.entity

2 logback日志

<configuration><include resource="org/springframework/boot/logging/logback/defaults.xml"/><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符 %F文件,%L行號--><pattern>%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p} ) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%t]){faint} %clr(%logger{39}.%M\(%F:%L\)){cyan} %clr(:){faint} ![method=%X{method:-default},businessId=%X{businessId:-default}] %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}</pattern><charset>UTF-8</charset></encoder></appender><!--rootLogger是默認的logger--><root level="INFO"><appender-ref ref="CONSOLE"/></root><!--應用日志--><logger name="org.feng.navigation" level="DEBUG"/> </configuration>

3 mybatis-plus操作數據庫

使用Mapper 和 ServiceImpl 作為常見的數據庫功能實現。

并實現了 SQL 攔截 InnerInterceptor,打印出執行到的SQL(這一操作需要謹慎,線上部署可以去除)

4 Caffeine 緩存整合

使用 Spring Cache 中的 CacheManager管理緩存。

5 LocalDateTime 序列化&反序列化

增加序列化、反序列化的配置,將時間格式統一為 yyyy-MM-dd HH:mm:ss

并支持配置更改。

6 參數校驗快速失敗配置

在使用 Valid 注解進行參數校驗時,默認會校驗全部參數后,將錯誤信息才返回。

增加此配置后,只要發生了錯誤,就會直接返回,增加了校驗效率與系統性能。

7 集成日志鏈路

使用攔截器 HandlerInterceptor 做了日志鏈路統一。

搭配著 MDC 和 logback 對關鍵詞 “businessId” 進行輸出。

使用效果是,同一請求的執行鏈路中,直接使用 lombok 打印日志,會將 businessId 打印出來。方便回溯和排查問題。

8 控制器參數切面

主要是在執行控制器的前、后打印數據。

執行前打印方法請求參數,執行后打印執行結果。

執行錯誤時,打印錯誤描述信息。

并且提供了 Check 接口的校驗,如果當前參數DTO對象,實現了Check 接口,則會自動調用該接口的 check方法,對參數進行校驗。

9 日志切面

搭配著MDC 和 lombok 將當前請求的接口對應的業務方法打印到日志中。

10 集成 Swagger + knife4j

集成了 3.0 版本的 Swagger 文檔。

方便開發接口時的調試,測試。

11 全局異常攔截

對校驗參數的異常進行捕獲,對未知異常進行捕獲并處理

12 Nacos 增加監聽器

具體說明見博客:https://blog.csdn.net/FBB360JAVA/article/details/128878761

13 RestTemplate 集成 okhttp4

已經將httpclient 更改成為 okhttp。效率上快很多。

14 注冊服務到Nacos

目標是另外新建項目后,可以用新建的項目 Feign 調用本項目。

目前新建項目已經搭建完畢:https://gitee.com/fengsoshuai/junzi-navigation-web.git

可以使用 junzi-navigation-web項目遠程調用本項目。

15 集成自定義的redis starter

參考博客SpringBoot 2.7.8 自定義 Starter &自動配置

參考博客Java 使用Reactive Redis

在Nacos增加如下配置內容:

junzi:redis:# 表示spring容器需要注入redis相關配置enable: true# 業務business:# 業務1,可以自由配置key值get:# 業務前綴businessPrefix: feng0-redis-# 業務過期時間businessExpireTime: 5# 時間單位expireTimeUnit: HOURS# 是否啟用當前業務enable: true# 業務2,可以自由配置key值cancel:businessPrefix: feng1-redis-businessExpireTime: 3expireTimeUnit: HOURSenable: true # 連接redis需要的配置參數 spring:redis:host: localhostport: 6379password: feng123

項目業務功能

1 集成有道文本翻譯接口

目前已經對接完畢,支持中、英翻譯。

2 集成天行數據

在 https://www.tianapi.com/ 注冊賬號,并對接里邊的接口。

目前對接了:

  • 天行數據新聞接口頻道ID
  • 天行數據天氣預報

3 枚舉生成器

運行對應的前端項目 vue-back-navigation 中的 junzi-navigation-vue分支的代碼,可以得到一個前端頁面。

在本地選擇你自己的csv文件,指定類名、包名、枚舉key值對應的索引(索引從0開始計數)

比如測試時使用 demo.csv文件內容:

1,線下熱敏,線下熱敏是一種物流 5,淘寶,淘淘他 7,拼多多,品谷博的武器二帶我去

最終生成的Demo.java 文件的內容是:

package org.feng;import lombok.AllArgsConstructor; import lombok.Getter;import java.util.Arrays;/*** TODO** @version V1.0* @author: junzi* @date: 2023年02月11日 14時00分*/ @Getter @AllArgsConstructor public enum Demo {/*** 線下熱敏:1*/XIAN_XIA_RE_MIN("1", "線下熱敏", "線下熱敏是一種物流"),/*** 淘寶:5*/TAO_BAO("5", "淘寶", "淘淘他"),/*** 拼多多:7*/PIN_DUO_DUO("7", "拼多多", "品谷博的武器二帶我去"),;/*** TODO 待完善*/private final Integer key;/*** TODO 待完善*/private final String desc;public static Demo of(Integer key) {if (key == null) {throw new IllegalArgumentException("key不能為空的啦");}return Arrays.stream(values()).filter(element -> element.key.equals(key)).findAny().orElseThrow(() -> new IllegalArgumentException("key不存在的啦"));} }

4 網站錄入&分頁查看

增加了網站錄入,提供網站名,ico以及logo(logo后面增加上傳文件后,才實際用到),網站url等的錄入。

分頁查詢網站信息。(網站錄入后臺已完成,前端未寫)列出網站功能已經完成。

5 天氣預報

正在接入中。目前后臺已經完成,并測試通過,可以通過swagger調用,vue前端正在碼代碼。

項目部署與運行

1 Idea中運行

在下載項目源碼后,使用idea的maven插件功能,在圖中先 clean,再 install。

隨后運行 start 模塊中的啟動類即可。

注意 profile 的指定,目前使用的是dev環境。

2 打包在windows的cmd中運行

先打包,注意使用clean 和 package 插件。

等待打包成功后,在 start 模塊中找到新打好的包。

隨后在java11的運行環境中運行該jar包(注意要指定編碼格式,cmd默認會是gbk):

java -Dfile.encoding=utf-8 -jar start-1.0.0-SNAPSHOT.jar

這里調整編碼的操作是因為第一次運行時,讀取到nacos中的配置內容,是帶亂碼的,導致程序啟動不起來。因為nacos默認是utf-8編碼的。

3 在Linux后臺運行

nohup java -jar start-1.0.0-SNAPSHOT.jar > /usr/software/junzi/junzi.log &

并輸出日志到junzi.log中。

4 使用Prometheus & Grafana 監控jvm

首先是安裝好這倆軟件。

安裝步驟可以參考:Prometheus & Grafana 的安裝

在配置文件prometheus.yml中增加如下內容

- job_name: "junzi-navigation"metrics_path: "/junzi/actuator/prometheus"static_configs:- targets: ["localhost:18080"]

隨后重啟prometheus。

登陸到Grafana中,打開配置增加數據源。選擇 prometheus類型的數據源。

隨后輸入你的 prometheus 的地址和端口,比如你安裝的路徑是 localhost:9090,就輸入它。隨后點擊保存

然后導入一個Jvm的監控面板,選擇你剛剛加上的數據源就可以啦。

比如我這里選擇了 4701 號的面板。效果如下:

總結

以上是生活随笔為你收集整理的菌子导航系统(持续开发中)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。