如何快速分析并將一個簡單的前后端分離項目跑起來

一、前言

主要是前一段時間有小伙伴問我說自己剛入坑學后端不久,在開源網站上找了個簡單的前后端分離項目,但是自己不會跑起來,讓我給他說說,介于這玩意三兩句話不是很好說清楚,而且不清楚那個小伙伴的知識到何種地步,可能是大學生想找個項目應付一下期末考試吧。畢竟筆者以前也干過這種事,找個開源項目當課程設計啥的~

所以抽空簡單對這方面的分析方法以及必須具備的一個基礎知識點簡單說一下。。。

二、必備基礎知識點

這里主要以前后端分離技術棧為Java和Vue為例。至于有的兄弟學Go,Pyhton和react啥的我就不說了,老鐵我也是個菜鳥,沒那么豐富的學識。下面是一些必備基礎點說明:

基礎點版本說明
jdk8+java開發工具及運行環境,不多解釋。現在一般開源可能大多數都是8或者17及以上了,這個根據自己已安裝的環境來找對應開源項目就行了。
maven3.6.1java依賴管理工具。適配tomcat9就差不多了。
nodejs盡量最新js運行基礎環境,也不多解釋了。
npm盡量最新前端的包管理工具
數據庫類似于mysql、redis啥的,多少得知道點。
git拉取開源項目的,如果不會也行。

大致就這么點,如果你是學后端的那么jdk和maven這個是必不可少的。除此以外數據庫也很重要,但是如果你只是應付課程設計找個項目運行,那只要會導入數據庫腳本就ok了。如果實在不會,或者前端Vue的一些環境不會配置下載啥的,可以找我以前的博客,后者去搜?菜鳥教程 (runoob.com)了解,都比較詳細。另外最好會點Docker,因為可以偷懶創建項目必要的數據庫、中間件環境啥的~但是不強求,這里就不多扯了。

三、拉取開源項目

這里可以通過git去gitee或者github上拉取,如果不會就直接下載zip安裝包即可。這里我們以gitee為例。這里找到一個開源的商城系統,然后將他下載下來。直接點擊“克隆下載”:

如果已有git環境可以復制地址后直接克隆項目:

沒有 git就直接下載zip解壓到本地即可。

四、分析項目結構構建本地環境

一般來說,稍微專業點的項目都會有一個項目結構說明,或者運行說明。比如這個項目上的:

?

這類都會有一些簡單的技術棧介紹或者運行說明。當然大多數也可能沒有,當然只要你沒踩著有坑的項目就沒啥問題,一般有坑的就是,他的項目壓根運行不了或者有各種bug,或者有項目沒有數據庫(sql)文件的,這種就不用看了,下載下來也沒用。?所以建議選一些star較高的項目。

(1)前端模塊分析

一般到手后可以先分析前端的,因為流程比較簡單。

像我剛拉取的這個項目他前端主要用的是Vue3建立的一個vite項目,且有運行說明,照著他說的注釋掉package.json上的pnpm相關代碼,用我們已有的npm包管理工具即可去安裝項目依賴,運行前端項目了。

一般來說,如果是沒有項目運行說明的Vue項目的話,我們可以先看一下前端文件夾下的package.json文件,它相當于前端的依賴配置文件,好比SpringBoot中的pom文件。它定義了這個項目所需要的各個模塊信息和版本,以及整個項目的配置信息,例如項目的名稱,版本,描述等等信息。

這里主要關心的是它上面定義的運行方式及依賴信息,運行上可以研究scripts上這一段,這些腳本是命令行應用程序。 可以通過調用?npm run XXXX?或?yarn XXXX?來運行它們,其中?XXXX?是命令的名稱。 例如:npm run dev

一般如果是使用vue-cli創建的項目,那么默認是npm run serve。這里這個項目它定義了一個dev的命令,所以他可通過npm run dev運行。所以我們一般進入到這個前端文件根目錄終端后,運行npm install 命令去安裝項目依賴,一般順利的話就會在在根目錄生成一個node_modules文件:

這個就是依賴的主要存放地,如果中間報錯,可以看一下結合package.json文件下的devDependencies參數信息檢查是不是存在依賴沖突或者其他問題。必須確保項目依賴安裝完成,不會影響項目運行。然后運行npm run serve 或者npm run dev 運行項目(Vue的項目一般就是這兩個命令)。

運行成功后根據本地地址訪問就能進入項目前端界面了:

?當然這時候是沒法直接登錄進去的,畢竟我們后端還沒運行呢,所以下一步要準備后端運行環境。

(2)后端運行模塊分析

后端項目一般需要結合SpringBoot項目結構進行分析,首先推薦在IntelliJ IDEA 中將后端跟目錄文件打開,如果有小伙伴用的eclipse,后面這塊就不用看了,可以提前退出群聊。因為我基本沒咋用過那款軟件,所以不咋了解,如果沒有IntelliJ IDEA 可以找資源好吧。下面直接進入后端運行分析流程:

Step1:配置Maven加載依賴

在IDEA中打開后端文件后第一件事要配置Maven環境,如果用IDEA自帶的maven加載依賴會很慢,一般推薦由我們自己配置的Maven來加載項目依賴。

按照上圖流程配置完成后點擊根目錄的pom.xml文件,一般IDEA就會自動加載項目依賴了,或者在pom文件下右鍵單擊選擇maven后重新加載項目:

直到pom文件內的依賴加載完成就可以進行下一步了。如果其中有些模塊爆紅沒有完全加載,我們可以看一下,比如像這個log4j-core的日志依賴,不會影響項目直接運行的,可以選擇性忽視即可。

如果是Mybatis依賴或者驅動啥的比較核心切直接影響系統使用的就得注意了,必須下載完對應依賴才行?。

Step2:找到啟動文件,查看配置文件

一般來說,如果用IDEA打開SpringBoot項目文件,在加載完項目依賴后代碼文件就可以正常顯示了(如果沒加載完依賴,代碼段會各種報紅),IDEA彈出會識別到項目服務的提示,然后再下面導航欄將項目的運行模塊啟動類加載出來:

單擊對應的啟動類之后就能找到該服務了,比如這里可以看到我們這個項目有兩個啟動文件模塊。如果沒有識別出來也可以在文件中找就行了。

這個后面可以通過啟動類進行運行。但是找這個啟動類并不是唯一目的,我們需要根據這個啟動類找到啟動模塊的配置文件,也就是這兩個模塊中對應的applicaiton.yml文件,一般在resources下打開就行了。

?這里這個項目就很清楚了,核心配置就在applicaiton.yml下,然后各有三個不同環境下使用的配置文件,分別是dev、docker、prod。也就是用于開發階段、容器化部署、生產階段的配置。進入其中一個application.yml文件看一下:

spring:# 環境 dev|test|prodprofiles:active: dev#文件上傳設置servlet:multipart:max-file-size: 100MBmax-request-size: 100MBenabled: truejackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8
# mybaits-plus配置
mybatis-plus:# MyBatis Mapper所對應的XML文件位置mapper-locations: classpath*:/mapper/*Mapper.xmlglobal-config:# 關閉MP3.0自帶的bannerbanner: falsedb-config:# 主鍵類型 0:數據庫ID自增 1.未定義 2.用戶輸入 3 id_worker 4.uuid 5.id_worker字符串表示id-type: AUTO#字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"field-strategy: NOT_NULL# 默認數據庫表下劃線命名table-underline: true
sa-token:# token名稱 (同時也是cookie名稱)token-name: Authorization# 是否允許同一賬號并發登錄 (為true時允許一起登錄, 為false時新登錄擠掉舊登錄)is-concurrent: true# 在多人登錄同一賬號時,是否共用一個token(不共用,避免登出時導致其他用戶也登出)is-share: false# token風格(默認可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)token-style: uuid# 是否輸出操作日志is-log: false

這里很明顯他默認的環境是開發環境dev,所以我們找到applicaiton-dev.yml去配置需要的配置信息即可。

#application-dev.yml
server:port: 8085
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/yami_shops?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=trueusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Drivertype: com.zaxxer.hikari.HikariDataSourcehikari:minimum-idle: 0maximum-pool-size: 20idle-timeout: 10000auto-commit: trueconnection-test-query: SELECT 1data:redis:host: 127.0.0.1port: 6379database: 0
logging:config: classpath:logback/logback-dev.xml
xxl-job:accessToken: default_tokenlogPath: /data/applogs/xxl-job/jobhandleradmin:addresses: http://localhost:8080/xxl-job-admin

這里就可以清晰的看到這個項目所用的數據庫,中間件信息了。首先就是一個本地的mysql數據庫,然后還有本地的redis(緩存),還有一個分布式任務調度平臺xxl-job。所以我們將這些配置信息換成我們自己的本地信息就可以了。

Step3:準備并配置數據庫/中間件環境

對于這種項目我們一般有兩種方式配置所需的環境,第一就是在本地下載好mysql數據庫,redis和xxl-job。然后填入對應的本地信息就可以了。有點條件的可以用docker容器去創建數據庫/中間件環境。比如我這塊就直接用docker創建這3個容器了:

root@young-virtual-machine:~/桌面# docker ps -f name=mall4j
CONTAINER ID   IMAGE                         COMMAND                   CREATED        STATUS         PORTS                                                  NAMES
a699de0cfec8   mall4j-mysql                  "docker-entrypoint.s…"   21 hours ago   Up 7 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mall4j-mysql
32c51afd9354   redis:latest                  "docker-entrypoint.s…"   21 hours ago   Up 7 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              mall4j-redis
6a46a19481b3   xuxueli/xxl-job-admin:2.4.1   "sh -c 'java -jar $J…"   3 weeks ago    Up 7 minutes   0.0.0.0:8088->8088/tcp, :::8088->8088/tcp              mall4j-xxl-job

然后將數據庫文件,也就是這個項目db目錄下的yami_shop.sql文件導入數據庫。一般如果一個開源的項目沒有sql文件的話,特別是對于后端,就不用clone了,這類項目就算運行起來也無濟于事。

docker可以直接通過命令導入,本地化可以用命令或者用可視化工具比如Navicat Premium 16導入也行。?導入成功后稍微確認一下是不是確實導入了:

root@young-virtual-machine:/opt# docker exec -it mall4j-mysql mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 435
Server version: 8.0.27 MySQL Community Server - GPLCopyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| yami_shops         |
+--------------------+
5 rows in set (0.44 sec)mysql> use yami_shops;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+-----------------------+
| Tables_in_yami_shops  |
+-----------------------+
| tz_area               |
| tz_attach_file        |
| tz_basket             |
| tz_brand              |
| tz_category           |
| tz_category_brand     |
| tz_category_prop      |
| tz_delivery           |
| tz_hot_search         |
| tz_index_img          |
| tz_message            |
| tz_notice             |
| tz_order              |
| tz_order_item         |
| tz_order_refund       |
| tz_order_settlement   |
| tz_pick_addr          |
| tz_prod               |
| tz_prod_comm          |
| tz_prod_favorite      |
| tz_prod_prop          |
| tz_prod_prop_value    |
| tz_prod_tag           |
| tz_prod_tag_reference |
| tz_shop_detail        |
| tz_sku                |
| tz_sms_log            |
| tz_sys_config         |
| tz_sys_log            |
| tz_sys_menu           |
| tz_sys_role           |
| tz_sys_role_menu      |
| tz_sys_user           |
| tz_sys_user_role      |
| tz_transcity          |
| tz_transcity_free     |
| tz_transfee           |
| tz_transfee_free      |
| tz_transport          |
| tz_user               |
| tz_user_addr          |
| tz_user_addr_order    |
| tz_user_collection    |
+-----------------------+
43 rows in set (0.01 sec)

導入成功后就可以將我們的配置信息更新到本地的開源項目中了:

server:port: 8085
spring:datasource:#url: jdbc:mysql://localhost:3306/yami_shops?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=trueurl: jdbc:mysql://192.168.100.128:3306/yami_shops?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=trueusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Drivertype: com.zaxxer.hikari.HikariDataSourcehikari:minimum-idle: 0maximum-pool-size: 20idle-timeout: 10000auto-commit: trueconnection-test-query: SELECT 1data:redis:
#      host: 127.0.0.1port: 6379database: 9host: 192.168.100.128
logging:config: classpath:logback/logback-dev.xml
xxl-job:accessToken: default_tokenlogPath: /data/applogs/xxl-job/jobhandleradmin:addresses: http://192.168.100.128:8088/xxl-job-admin

像我這個項目就得將兩個Application模塊中dev配置里的mysql、redis、xxl-job信息分別更新為自己的本地地址。另外需要說明的是,如果用的容器化數據庫記得在Linux系統中開放防火墻/安全組策略,最后就可以運行后端項目了。

Step4:運行后端,訪問系統

后端啟動成功后,重新刷新一下之前運行的前端界面,在數據庫中找到登錄的賬號密碼信息,一般在什么user、admin 表里面,然后進行登錄。

如果可以正常登錄訪問,那么前后端項目基本就算跑起來。

如果到處是bug,基本就是踩坑了~

耗子尾汁吧~

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

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

相關文章

規則引擎LiteFlow發布v2.12.1版本,決策路由特性

個人博客:無奈何楊(wnhyang) 個人語雀:wnhyang 共享語雀:在線知識共享 Github:wnhyang - Overview 簡介 標題其實是不準確的,了解過的會知道在LiteFlow的2.12.0已經有了決策路由的特性&…

【TB作品】MSP430 G2553 單片機口袋板,讀取單片機P1.4電壓顯示,ADC,電壓表

功能 讀取P1.4電壓,顯示到口袋板顯示屏,電壓越高亮燈越多。 部分程序 while (1){ADC10CTL0 | ENC ADC10SC; // Sampling and conversion startLPM0;adcvalue ADC10MEM; //原始數據 0到1023adtest (float) adcvalue / 1024.…

【算法訓練 day48 零錢兌換、完全平方數】

目錄 一、零錢兌換-LeetCode 322思路實現代碼問題總結 二、完全平方數-LeetCode 279思路實現代碼問題總結 一、零錢兌換-LeetCode 322 Leecode鏈接: leetcode 322 文章鏈接: 代碼隨想錄 視頻鏈接: B站 給你一個整數數組 coins ,表示不同面額的硬幣;以及…

每一個企業,都值得擁有自己專屬的AI大模型!

前言 在數字化浪潮席卷全球的今天,人工智能(AI)已不再是遙不可及的科幻概念,而是成為了企業創新、轉型、升級的必備工具。尤其是AI大模型,憑借其強大的數據處理能力和深度學習能力,正在為企業帶來前所未有…

【2024最新華為OD-C/D卷試題匯總】[支持在線評測] 字符串序列判定(100分) - 三語言AC題解(Python/Java/Cpp)

?? 大家好這里是清隆學長 ,一枚熱愛算法的程序員 ? 本系列打算持續跟新華為OD-C/D卷的三語言AC題解 ?? ACM銀牌??| 多次AK大廠筆試 | 編程一對一輔導 ?? 感謝大家的訂閱? 和 喜歡?? ??在線評測鏈接 字符串序列判定(100分) ?? 評測功能需要訂閱專欄后私信聯系…

Leetcode:四數之和

題目鏈接:18. 四數之和 - 力扣(LeetCode) 普通版本(排序 雙指針) 主旨:類似于三數之和的解法,但需要多加一些限制,同時為了防止多個數組元素的相加之和出現整型溢出問題還要將整型…

基于python可伸縮JSON格式列表實現

對于消息體為一個json格式列表,列表長度變化的代碼設計,如下實現可供參考。 1、python語言實現(直接取值) #codingutf-8n 2 # 行項目數 productCode [11111,222222,333333] unit [H06,H07,H08] qty [6,7,8] items []for i in range(0, n):item …

數據分析每周挑戰——心衰患者特征數據集

這是一篇關于醫學數據的數據分析,但是這個數據集數據不是很多。 背景描述 本數據集包含了多個與心力衰竭相關的特征,用于分析和預測患者心力衰竭發作的風險。數據集涵蓋了從40歲到95歲不等年齡的患者群體,提供了廣泛的生理和生活方式指標&a…

spring事務實現原理

Spring事務的實現原理主要是基于AOP(面向切面編程) 事務的開啟與提交/回滾 開啟事務:當Spring容器中的AOP代理檢測到一個匹配的切點方法被調用時,它會首先開啟一個新的事務或者加入到現有的事務中(這取決于事務傳播行…

【讀腦儀game】

讀腦儀(Brain-Computer Interface,BCI)游戲是一種利用腦電信號來控制游戲的新型交互方式。這類游戲通常需要專業的硬件設備來讀取用戶的腦電信號,并將這些信號轉化為游戲中的控制信號。編寫這樣的游戲代碼涉及到多個方面&#xff…

瀚高數據庫相關設置

瀚高數據庫相關設置 一、配置瀚高數據庫局域網訪問 需要修改兩個文件:postgresql.conf和pg_hba.conf 1)在postgresql.conf中找到下述配置,把listen_addresses前面的注釋去掉,值修改為* # - Connection Settings -#listen_addresse…

IO進程線程(九)線程的同步 進程間通信

文章目錄 一、 線程的同步(一)無名信號量sem1. 定義和初始化2.獲取信號量3.釋放信號量4. 銷毀5. 使用示例 (二)條件變量1. 定義和初始化2. 獲取條件變量3. 釋放條件變量4. 銷毀條件變量 二、進程間通信(一)…

web-上傳項目文件夾到Git遠程倉庫

Git初識 概念:一個免費開源,分布式的代碼版本控制系統,幫助開發團隊維護代碼 作用:記錄代碼內容,切換代碼版本,多人開發時高效合并代碼內容 檢驗成功 打開bash終端(git專用)命令…

12. MySQL 日志

文章目錄 【 1. 日志的基本原理 】【 2. 錯誤日志 Error Log 】2.1 啟動和設置錯誤日志2.2 查看錯誤日志2.3 刪除錯誤日志 【 3. 二進制日志 Binary Log 】3.1 啟動和設置二進制日志3.2 查看二進制日志3.3 刪除二進制文件刪除所有二進制日志刪除小于指定編號的二進制日志刪除創…

【vue3+pinia+uniapp項目問題:使用pinia狀態管理時store的數據更新,模板渲染視圖不能實時更新】

在這里選擇不同的學校后,發現store里面的數據打印出來能更新,但是使用store的數據打印出來并未實時更新且渲染在模板上,必須手動刷新視圖才能更新。 原因是因為使用了解構賦值傳入參數 解決方法 1.使用computed 現在視圖能進行實時更新…

分享一個 .Net core Console 項目使用 SqlSugar 的詳細例子

前言 SqlSugar 是一款老牌的 .NET 開源 ORM 框架,性能高,功能全面,使用簡單,支持 .NET FrameWork、.NET Core3.1、.NET5、.NET6、.NET7、.NET8、.NET9 等版本,線上論壇非常活躍,今天給大伙分享一個 .Net c…

查看遠程桌面端口,查看服務器的遠程桌面端口的方法

如果你正在尋找一種方法來檢查服務器的遠程桌面端口,那么請務必按照以下步驟操作,以確保準確且安全地獲取所需信息。這不僅是一個技術問題,更是一個關于效率和安全性的重要議題。 首先,你需要明確,遠程桌面端口通常是…

回溯算法之遞增子數列

題目: 給你一個整數數組 nums ,找出并返回所有該數組中不同的遞增子序列,遞增子序列中 至少有兩個元素 。你可以按 任意順序 返回答案。 數組中可能含有重復元素,如出現兩個整數相等,也可以視作遞增序列的一種特殊情…

【數據結構與算法 | 二叉樹篇】二叉樹的前中后序遍歷(迭代版本)

1. 前言 前文我們實現了二叉樹前中后三種遍歷方式的遞歸版本,非常簡單. 接下來我們來實現一下其迭代版本. 2. 二叉樹的前序遍歷 (1). 題 給你二叉樹的根節點 root ,返回它節點值的 前序 遍歷。 示例 1: 輸入:root [1,null,2…

語音技能云云接入通用平臺

Cloud-to-Cloud(云云接入) 前言 項目地址:https://github.com/LeYunone/cloud-to-cloud 配置說明:https://leyunone.com/github-project/voice-cloud-cloud-config.html 注:學習測試以及使用請拉取 master 分支,release 是開發…