Spring Cloud + Vue前后端分離-第2章 使用Maven搭建SpringCloud項目

Spring Cloud + Vue前后端分離-第2章 使用Maven搭建SpringCloud項目

Maven兩大核心功能:

????????依賴管理(Jar包管理)

????????構建項目(項目打包)

使用Eureka搭建注冊中心

使用spring initializr創建spring cloud項目

SpringCloud和Maven簡介

SpringBoot和SpringCloud:SpringBoot是單應用開發框架,SpringCloud是管理多個SpringBoot應用的微服務框架

GENERATE下載就可以了

下載完成后是個壓縮包,解壓后,打開idea,點擊filer>open就可以導入項目了

項目初始化,要把代碼管理優先做后,不管是學習還是工作,養成階段性提交代碼的習慣。代碼管理選擇git

一個項目里不是所有的文件都需要提交到git,比如.iml這個是idea本地項目文件,比如maven的target文件夾。所以用.gitignore幫我們自動排除

1.增加eureka子模塊作為注冊服務端

2.將單maven項目改造成maven父子項目

pom.xml(course)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.course</groupId><artifactId>course</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>course</name><description>Demo project for Spring Boot</description><modules><module>eureka</module></modules><properties><java.version>1.8</java.version><spring-cloud.version>Hoxton.RELEASE</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>

pom.xml(eureka)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.course</groupId><artifactId>course</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>eureka</artifactId><packaging>jar</packaging><name>eureka</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>
</project>

搭建業務模塊-system

1.解決注冊中心服務啟動失敗的問題
1.解決注冊中心服務啟動失敗的問題

支持application.properties或application.yml文件,默認會讀取resources目錄下或resources/config目錄下,后續會有讀/config目錄的示例

spring.application.name=eureka
server.port=8761
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false

springboot默認集成slf4j框架,它定義了一些日志接口,規范日志輸出,真正的實現是logback或log4j,我們代碼中寫的都是slf4j的代碼

2.優化啟動日志顯示

啟動日志可以按需擴展,甚至可以打印一些有趣的字符圖

package com.course;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;/*** Hello world!**/
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {private static final Logger logger = LoggerFactory.getLogger(EurekaApplication.class);//    public static void main(String[] args) {
//        SpringApplication.run(EurekaApplication.class, args);
//    }public static void main(String[] args) {SpringApplication app = new SpringApplication(EurekaApplication.class);Environment env = app.run(args).getEnvironment();logger.info("啟動成功!!");logger.info("Eureka地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));}}

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 修改一下路徑--><property name="PATH" value="/log/imooc/course/eureka"></property><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder>
<!--            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %blue(%-50logger{50}:%-4line) %msg%n</Pattern>--><Pattern>%d{ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %msg%n</Pattern></encoder></appender><appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${PATH}/trace.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</FileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><layout><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-8X{UUID}) %msg%n</pattern></layout></appender><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${PATH}/error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><layout><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-8X{UUID}) %msg%n</pattern></layout><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><root level="ERROR"><appender-ref ref="ERROR_FILE" /></root><root level="TRACE"><appender-ref ref="TRACE_FILE" /></root><root level="INFO"><appender-ref ref="STDOUT" /></root>
</configuration>

小建議:養成階段性提交代碼的習慣,可以是完成一個小功能。并且每天下班前提交本地代碼,前提是不能編譯報錯或影響已有的功能?

2.新建Maven子項目system

maven父子模塊的配置: 在子模塊中使用parent標簽指向父模塊,在父模塊中使用module標簽引入子模塊

將system配置成最簡單的SpringBoot項目

(注意:java和resources是同級目錄!!!小編大意,求原諒)

package com.course.system;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;@SpringBootApplicationpublic class SystemApplication {private static final Logger logger = LoggerFactory.getLogger(SystemApplication.class);public static void main(String[] args) {SpringApplication app = new SpringApplication(SystemApplication.class);Environment env = app.run(args).getEnvironment();logger.info("啟動成功!!");logger.info("System地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));}}
spring.application.name=system
server.port=9001

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.course</groupId><artifactId>course</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>system</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>

3.將system注冊到注冊中心

第1步:增加eureka-client依賴

第2步:增加配置,指向注冊中心的地址

第3步:增加@EnableEurekaClient

搭建路由模塊-gateway

SpringCloug的網關組件可以用gateway或zuul,最早使用的是zuul,后面spring自己出了gateway

網關主要功能:

????????限流(流量控制);

????????重試(請求失敗時重試,慎用);

????????跨域(前后端不在同一個域);

????????路由(轉發請求);

????????鑒權(登錄校驗,簽名校驗)等...

新建Maven子項目gateway

步驟和system模塊一樣改一些參數

新增gateway子模塊,增加gateway依賴,并注冊到注冊中心

(注意:java和resources是同級目錄!!!小編大意,求原諒)?

spring.application.name=gateway
server.port=9000
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/#路由轉發
spring.cloud.gateway.routes[0].id=system
spring.cloud.gateway.routes[0].uri=http://127.0.0.1:9001
spring.cloud.gateway.routes[0].predicates[0].name=Path
spring.cloud.gateway.routes[0].predicates[0].args[0]=/system/**

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.course</groupId><artifactId>course</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>gateway</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency></dependencies>
</project>

路由轉發

路由轉發:將外部請求轉發到實際的業務模塊進行處理。

1.在gateway增加system路由轉發配置,調試成功

我們做的所有的改動都需要重啟應用才能生效,后續我們介紹熱部署,不再需要手動重啟,從而提高開發效率

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

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

相關文章

FastAPI之聲明請求參數示例數據

在Pydantic模型中添加額外的JSON模式數據 您可以聲明Pydantic模型的示例&#xff0c;這些示例將被添加到生成的JSON模式中。 示例代碼 from fastapi import FastAPI from pydantic import BaseModelapp FastAPI()class Item(BaseModel):name: strdescription: str | None …

(C語言實現)高精度除法 (洛谷 P2005 A/B Problem II)

前言 本期我們分享用C語言實現高精度除法&#xff0c;可通過該題測試點我點我&#xff0c;洛谷 p2005。 那么話不多說我們開始吧。 講解 大家還記不記得小學的時候我們是怎么做除法的&#xff1f;我們以1115為例。 我們的高精度除法也將采用這個思路進行&#xff0c;分別用兩…

在 TS 中解析 ipa 文件

在 TS 中解析 ipa 文件 ipa即Xcode打包出來的APP的安裝包&#xff0c;通過解析ipa中的文件&#xff0c;我們可以獲得APP的DisplayName、Version、BundleIdentifier等信息&#xff0c; 同時也可以獲取到APP證書的相關信息&#xff0c;包括APP的安裝環境、證書的有效期、APP開通…

Python-算術運算符詳解

運算符 算術運算符 關系運算符 邏輯運算符 賦值運算符 算術運算符&#xff1a;加減乘除 %求余 **平方 // 先算乘方&#xff0c;再算乘除&#xff0c;最后是加減。括號可以改變優先級 0不能作為除數&#xff08;不論是整型0還是浮點0&#xff09; 除法截斷&#xff1a;舍棄小…

UDP群聊

客戶端 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…

LeetCode738. Monotone Increasing Digits

文章目錄 一、題目二、題解 一、題目 An integer has monotone increasing digits if and only if each pair of adjacent digits x and y satisfy x < y. Given an integer n, return the largest number that is less than or equal to n with monotone increasing digi…

使用VBA快速統計詞組(單詞組合)詞頻

實例需求&#xff1a;產品清單如A列所示&#xff0c;現在如下統計詞組詞頻。想必各位小伙伴都指定如何使用字典對象實現去重&#xff0c;進而實現單個單詞的詞頻統計。 但是統計詞組詞頻就沒有那么簡單了&#xff0c;為了便于演示&#xff0c;此處的詞組只限于兩個單詞的組合。…

自動駕駛右向輔助功能規范

目 錄 Contents 目錄 1. 介紹 Introduction. 8 1.1 此文檔的范圍和目的 Scope and Purpose of This Document 8 1.2 參考文檔References. 9 1.3 文檔的維護 Maintenance of the Document 10 1.4 縮略詞Abbreviations. 10 1.5 文檔概述Document Overview.. 11 1.6 功能…

GoLong的學習之路,進階,Viper(yaml等配置文件的管理)

本來有今天是繼續接著上一章寫微服務的。但是這幾天有朋友說&#xff0c;再寫Web框架的時候&#xff0c;遇到一個問題&#xff0c;就是很多的中間件&#xff08;redis&#xff0c;微信&#xff0c;mysql&#xff0c;mq&#xff09;的配置信息寫的太雜了&#xff0c;很不好管理。…

【解決辦法】Pycharm中新添加或者導入項目文件名紅色!

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、問題描述二、問題原因三、解決辦法 一、問題描述 Pycharm的代碼中添加新的文件夾&#xff0c;發現文件夾下的文件名是紅色的&#xff0c;如下圖&#xff1a; …

jvm-sandbox-repeater 精簡版部署之standalone模式

jvm-sandbox-repeater 僅僅提供了錄制回放的能力&#xff0c;如果需要完成業務回歸、實時監控、壓測等平臺&#xff0c;后面須要有一個數據中心負責采集數據的加工、存儲、搜索&#xff0c;repeater-console提供了簡單的demo示例&#xff1b;一個模塊管理平臺負責管理JVM-Sandb…

設計模式——單例模式(Singleton Pattern)

概述 單例模式確保一個類只有一個實例&#xff0c;而且自行實例化并向整個系統提供整個實例&#xff0c;這個類稱為單例類&#xff0c;它提供全局訪問的方法。單例模式是一種對象創建型模式。單例模式有三個要點&#xff1a;一是某個類只能有一個實例&#xff1b;二是它必須自行…

矩陣基本操作算法

題目描述&#xff1a; 題目描述 根據主函數和頭文件提示&#xff0c;編寫子函數void matrixInput(int (*mat)[COL]); void matrixPrint(int *mat[ROW]); void matrixAddT(int *mat); ? 分別實現矩陣的輸入&#xff0c;輸出&#xff0c;與自身的轉置相加&#xff1a;void matr…

微信小程序開發中的圖片缺少后自動居中問題的解決,自動居中樣式,自適應圖片多少的寫法

下面是寫的wxml的view樣式類似于web開發中的HTML文件 home-grid是我創建的一個父樣式&#xff0c;采用子絕父相的定位方式 我在home-grid的父view&#xff08;類似于web中div&#xff09;中包含了三個小的子樣式分別是下述代碼中的class“yellowstar”&#xff0c;class“maint…

Java---線程講解(二)

文章目錄 1. Runnable接口2. 賣票案例3. 同步代碼塊解決數據安全問題4. 同步方法解決數據安全問題5. 線程安全的類6. Lock鎖 1. Runnable接口 1. 創建線程的另一種方法是聲明一個實現Runnable接口的類&#xff0c;之后重寫run()方法&#xff0c;然后可以分配類的實例&#xff0…

基于remix+metamask+ganache的智能合約部署調用

在我們部署合約時為了讓它更接近真實區塊鏈去中心化體驗&#xff0c;我們需要調用小狐貍&#xff08;Metamask&#xff09;來進行真實交易&#xff0c;而metamask里沒有內置虛擬測試幣&#xff0c;我們需要進行調用Ganache來添加帶有虛擬測試幣的賬號。以上就是三者的關系&…

從 MLOps 到 LMOps 的關鍵技術嬗變

本文整理自 2023 年 9 月 3 日 QCon 全球軟件開發大會 2023 北京站 —— 從 MLOps 到 LMOps 分論壇的同名主題演講。 本次分享的內容結構如下&#xff1a; 從 MLOps 到 LMOps&#xff1b; MLOps 概述、挑戰與解決方案&#xff1b; LMOps 實施挑戰與關鍵技術&#xff08;大模…

[FPGA 學習記錄] 快速開發的法寶——IP核

快速開發的法寶——IP核 文章目錄 1 IP 核是什么2 為什么要使用 IP 核3 IP 核的存在形式4 IP 核的缺點5 Quartus II 軟件下 IP 核的調用6 Altera IP 核的分類 在本小節當中&#xff0c;我們來學習一下 IP 核的相關知識。 IP 核在 FPGA 開發當中應用十分廣泛&#xff0c;它被稱為…

Java最全面試題專題---1、Java基礎知識(2)

筆者有七八年的面試者經驗&#xff0c;負責公司技術同學的社招和校招&#xff0c;近些年面試過三四百個技術同學&#xff0c;考慮接近年底這個時段&#xff0c;整理并更新一些以往的面試經驗&#xff0c;希望同學們跳槽能有個更好的工作&#xff0c;如有需要的同學可以關注下筆…

Jenkins安裝

環境 Ubuntu&#xff0c; 其他平臺查看官方文檔 步驟 安裝jdk sudo apt-get install openjdk-8-jdk 安裝Jenkins first add the key to your system wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -Then add a Jenkins apt repository …