
- 更多精彩檔案點擊訪問:https://blog.csdn.net/weixin_45692705?spm=1011.2124.3001.5343
教程目錄
- 后臺技術堆疊
- 準備作業
- 一. 創建父工程
- 二. 修改父工程pom檔案添加相關依賴
- 三. 創建子工程
- 1. 創建子工程common
- 2. 創建子工程base
- 3. 創建子工程core
- 3. 創建子工程gatway
- 四. 總結
后臺技術堆疊
可以根據自身的專案需求,替換依賴,
| 技術名稱 | 用途 |
|---|---|
| SpringBoot | 簡化Spring |
| SpringCloud Hoxton.SR8 | 微服務 |
| Mybatis Plus | 持久層框架和代碼生成器 |
| Lombok | 簡化物體類 |
| Swagger2 | API介面檔案生成工具 |
| Logback | 日志系統 |
| Alibaba-easyexcel | Excel讀寫 |
| Redis | 快取 |
| HttpClient | 基于http協議的客戶端用來實作遠程的呼叫 |
| Spring Task | 定時任務 |
| MySQL | 資料庫 |
| RabbitMQ | 訊息中間件 |
準備作業
- 一個ide開發工具,這里使用的是 2020.2.4,掌握后臺技術堆疊中的所有技術,

注意:開始之前要先設定jdk,maven,自動導包,編碼格式,等相關資訊,遵循 約定 > 編碼的規定,不會的可以點擊訪問: 首次安裝必備!idea最常用設定(配置),讓開發更順手,進行設定,
一. 創建父工程
- 使用Maven骨架,選擇
org.apache.maven.archetypes:maven-archetype-site創建一個空的父工程,別忘了還要選擇jdk哦!

- 添加工程名,GAV坐標,

3. 指定自已的Maven

- 創建完成是這個樣子

二. 修改父工程pom檔案添加相關依賴
- 因為目前創建的是一個父工程所以要洗掉一些無用的檔案,這里洗掉整個src就可以了,

- 洗掉無用的資訊,并指定packaging為pom,正題效果如下圖,

- 添加父工程依賴,這里的cloud版本號特別重要容易沖突下面的依賴已經指定好相關版本了,直接復制即可,
<!-- 統一管理版本-->
<properties>
<java.version>1.8</java.version>
<spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<mybatis-plus.version>3.4.1</mybatis-plus.version>
<velocity.version>2.0</velocity.version>
<swagger.version>2.9.2</swagger.version>
<swagger-bootstrap-ui.version>1.9.2</swagger-bootstrap-ui.version>
<commons-lang3.version>3.9</commons-lang3.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<commons-io.version>2.6</commons-io.version>
<alibaba.easyexcel.version>2.1.1</alibaba.easyexcel.version>
<apache.xmlbeans.version>3.1.0</apache.xmlbeans.version>
<fastjson.version>1.2.28</fastjson.version>
<gson.version>2.8.2</gson.version>
<json.version>20170516</json.version>
<aliyun-java-sdk-core.version>4.3.3</aliyun-java-sdk-core.version>
<aliyun-sdk-oss.version>3.10.2</aliyun-sdk-oss.version>
<jodatime.version>2.10.1</jodatime.version>
<jwt.version>0.7.0</jwt.version>
<httpclient.version>4.5.1</httpclient.version>
</properties>
<dependencyManagement>
<dependencies>
<!--spring boot 2.3.4.RELEASE-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud Alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--mybatis-plus 代碼生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- Mybatis Plus 代碼生成器模板引擎, -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--swagger-bootstrap-ui-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>${swagger-bootstrap-ui.version}</version>
</dependency>
<!--commons-lang3-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<!--檔案上傳-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<!--commons-io-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<!--excel決議-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${alibaba.easyexcel.version}</version>
</dependency>
<!--excel決議依賴-->
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>${apache.xmlbeans.version}</version>
</dependency>
<!--json-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>${json.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
<!--阿里云SDK遠程呼叫-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun-java-sdk-core.version}</version>
</dependency>
<!--阿里云檔案管理-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-sdk-oss.version}</version>
</dependency>
<!--日期時間工具-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${jodatime.version}</version>
</dependency>
<!--jwt工具-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version>
</dependency>
<!--httpclient-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
- 添加完了千萬別忘記重繪maven,讓他進行下載哦,

三. 創建子工程
- 這里分模塊的方式有很多種,可以按照資料庫的表分成對應的模塊,也可以按照功能進行分,沒有硬性的要求,
1. 創建子工程common
作用:每一個微服務公共的依賴,存放bean,工具類等,
- 創建子工程common,這里New的時候需要選擇Module,

2. 指定jdk不用選擇任何骨架

- 填寫模塊名稱,GAV坐標,
注意檢查Parent指向的是不是父工程,

4.給common子工程添加對應的maven依賴,
<description>每一個微服務公共的依賴,bean,工具類等</description>
<dependencies>
<!-- web起步依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok用來簡化物體類:需要安裝lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
</dependencies>

- 創建包,添加通用的工具類


最終效果

2. 創建子工程base
作用:bese是微服務的一個通用配置
- 創建子工程base,創建步驟和上面的common相同,創建成功后注意檢查父工程pom中的標簽,


2. 添加子工程base的相關依賴
<description>微服務通用配置</description>
<dependencies>
<!--參考 common 依賴-->
<dependency>
<groupId>com.wz.common</groupId>
<artifactId>wz-test-project-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<!-- spring boot redis快取引入 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 快取連接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!--JWT依賴-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<!--服務發現-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--服務呼叫-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--服務熔斷-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- json決議 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
</dependencies>
3. 創建包,添加通用配置類


3. 創建子工程core
作用:core是整個專案的核心模塊,用于存放專案整個專案的核心業務
- 創建步驟,還是一樣的,

2.修改pom檔案加入相關依賴
<description>核心微服務模塊</description>
<dependencies>
<!--參考 common 依賴-->
<dependency>
<groupId>com.wz.common</groupId>
<artifactId>wz-test-project-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!--mybatis-plus 代碼生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</dependency>
<!-- Mybatis Plus 代碼生成器模板引擎, -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
</dependency>
<!--Alibaba讀寫Excel依賴-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
</dependency>
<!-- spring boot redis快取引入 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 快取連接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- redis 存盤 json序列化 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
</dependencies>
<!-- 如果不添加此節點mybatis的mapper.xml檔案都會被漏掉, -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>

- 因為是核心微服務,所以我們需要配置日志,和資料庫等鏈接資訊,
- 這里我們在
resources目錄下創建,application.yml和logback-spring.xml組態檔,并撰寫相關的配置,

- application.yml,相關配置
server:
port: 8110 #服務埠
spring:
profiles:
active: dev #環境設定
application:
name: 微服務名稱 #服務名
datasource: #mysql資料庫連接
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: 鏈接資料庫的url?serverTimezone=GMT%2B8&characterEncoding=utf-8
username: 用戶名
password: 密碼
#spring:
redis:
host: redes的ip地址
port: 埠號
database: 0
#password: 默認為空
timeout: 3000ms #過期時間
lettuce:
pool:
max-active: 20 #最大連接數,負值表示沒有限制,默認8
max-wait: -1 #最大阻塞等待時間,負值表示沒限制,默認-1
max-idle: 8 #最大空閑連接,默認8
min-idle: 0 #最小空閑連接,默認0
cloud:
nacos:
discovery:
server-addr: nacos的ip+埠 # nacos服務地址
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #配置控制臺日志
mapper-locations: classpath:com/mzc/iou/core/mapper/xml/*.xml #防止xml檔案丟失
##設定日志級別
#logging:
# level:
# root: ERROR
- logback-spring.xml,相關配置
<?xml version="1.0" encoding="UTF-8"?>
<!--springboot內部使用Logback作為日志實作的框架 logback-spring.xml(默認日志檔案的名字)-->
<!--日志配置的根節點-->
<configuration>
<!--背景關系名稱默認default-->
<contextName>wz</contextName>
<!-- 日志的輸出目錄 -->
<property name="log.path" value="日志的列印位置/core" />
<!--控制臺日志格式:彩色日志-->
<!-- magenta:洋紅 -->
<!-- boldMagenta:粗紅-->
<!-- cyan:青色 -->
<!-- white:白色 -->
<!-- magenta:洋紅 -->
<property name="CONSOLE_LOG_PATTERN"
value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) %highlight([%-5level]) %green(%logger) %msg%n"/>
<!--檔案日志格式-->
<property name="FILE_LOG_PATTERN"
value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] %thread %file:%line %logger %msg%n" />
<!--編碼-->
<property name="ENCODING"
value="UTF-8" />
<!-- 控制臺日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${ENCODING}</charset>
</encoder>
</appender>
<!-- 檔案日志 -->
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 要區別于其他的appender中的檔案名字 -->
<file>${log.path}/log-rolling.log</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${ENCODING}</charset>
</encoder>
<!-- 設定滾動日志記錄的滾動策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志歸檔路徑以及格式 -->
<fileNamePattern>${log.path}/info/log-rolling-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--歸檔日志檔案保留的最大數量-->
<maxHistory>3</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- 開發環境和測驗環境 -->
<springProfile name="dev,test">
<logger name="com.mzc" level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ROLLING_FILE" />
</logger>
</springProfile>
<!-- 生產環境 -->
<springProfile name="prod">
<logger name="com.mzc" level="ERROR">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ROLLING_FILE" />
</logger>
</springProfile>
</configuration>
- 創建核心模塊需要用到的包

3. 創建子工程gatway
作用:微服務網關,每個請求過來都需要通過網關分發到不同的模塊,
- 創建方式相同

- 添加相關依賴
<description>核心微服務網關</description>
<dependencies>
<!-- 網關 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--服務注冊-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>

- 撰寫組態檔,實作動態路由和日志列印,
- 和上面的步驟一致

- application.yml
server:
port: 80 # 服務埠
spring:
profiles:
active: dev # 環境設定
application:
name: 服務名稱 # 服務名
cloud:
nacos:
discovery:
server-addr: nacos的ip地址+埠號 # nacos服務地址
gateway:
discovery:
locator:
enabled: true # gateway可以發現nacos中的微服務,并自動生成轉發路由
routes:
- id: 核心微服務名稱 #路由的ID,沒有固定規則但要求唯一,建議配合服務名
uri: lb://核心微服務名稱 #匹配后提供服務的路由地址
predicates:
- Path=/*/core/** #斷言,路徑相匹配的進行路由
- logback-spring.xml,相關配置
<?xml version="1.0" encoding="UTF-8"?>
<!--springboot內部使用Logback作為日志實作的框架 logback-spring.xml(默認日志檔案的名字)-->
<!--日志配置的根節點-->
<configuration>
<!--背景關系名稱默認default-->
<contextName>wz</contextName>
<!-- 日志的輸出目錄 -->
<property name="log.path" value="日志列印位置/gateway" />
<!--控制臺日志格式:彩色日志-->
<!-- magenta:洋紅 -->
<!-- boldMagenta:粗紅-->
<!-- cyan:青色 -->
<!-- white:白色 -->
<!-- magenta:洋紅 -->
<property name="CONSOLE_LOG_PATTERN"
value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) %highlight([%-5level]) %green(%logger) %msg%n"/>
<!--檔案日志格式-->
<property name="FILE_LOG_PATTERN"
value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] %thread %file:%line %logger %msg%n" />
<!--編碼-->
<property name="ENCODING"
value="UTF-8" />
<!-- 控制臺日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${ENCODING}</charset>
</encoder>
</appender>
<!-- 檔案日志 -->
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 要區別于其他的appender中的檔案名字 -->
<file>${log.path}/log-rolling.log</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${ENCODING}</charset>
</encoder>
<!-- 設定滾動日志記錄的滾動策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志歸檔路徑以及格式 -->
<fileNamePattern>${log.path}/info/log-rolling-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--歸檔日志檔案保留的最大數量-->
<maxHistory>3</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- 開發環境和測驗環境 -->
<springProfile name="dev,test">
<logger name="com.mzc" level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ROLLING_FILE" />
</logger>
</springProfile>
<!-- 生產環境 -->
<springProfile name="prod">
<logger name="com.mzc" level="ERROR">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ROLLING_FILE" />
</logger>
</springProfile>
</configuration>
- 創建包撰寫啟動類,與跨域相關配置,

四. 總結
- 到這里整個專案架構的搭建已經基本完成,可以使用代碼生成器生成后進行編碼了,后續如果需要使用SMS,OSS等相功能,可以新建模塊進行對應的配置,這里的配置類并沒有演示大家如果有需要的話可以去我主頁的資源中進行下載整個完整的架構,并且附帶使用教程和博主一對一指導,
好了,一鍵三連加關注!感謝大家觀看,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/294694.html
標籤:java
