SpringCloud微服務(wù)多應(yīng)用腳手架的搭建與部署方式
最近幾年SpringBoot大熱,很多IT公司都開始采用SpringBoot來替換傳統(tǒng)的SpringMVC項(xiàng)目。那么如何搭建一個(gè)適合開發(fā)的項(xiàng)目架構(gòu)呢?
這里我主要介紹Java程序員使用最多的兩種工具進(jìn)行搭建:
- 1、MyEclipse;
- 2、idea
MyEclipse搭建
第一步:打開MyEclipse,選擇File—>New—>Other,搜索maven,點(diǎn)擊next

第二步:選擇‘Create a simple project(skip archetype selection)’,點(diǎn)擊next

第三步:填入‘Group Id’和‘Artifact Id’,注意這邊的‘Packaging’需要選擇pom,不能選擇jar或者war,然后點(diǎn)擊Finish

這樣就建好了一個(gè)SpringBoot項(xiàng)目的管理中心,展開如下圖:

第四步:多個(gè)SpringBoot項(xiàng)目之間可能會(huì)有一些公用的部分,比如User這個(gè)實(shí)體類,所以要建立一個(gè)api項(xiàng)目為其他SpringBoot項(xiàng)目提供公用的類和方法
建立api項(xiàng)目如下:
選中cloud項(xiàng)目,右鍵點(diǎn)擊打開菜單,選擇new—>other,搜索module,點(diǎn)擊next

跟上面建立cloud項(xiàng)目一樣,給該服務(wù)取名為cloud-api,點(diǎn)擊Finish

這樣就創(chuàng)建好了cloud-api服務(wù)了,項(xiàng)目結(jié)構(gòu)如下

第五步:依照上面建立cloud-api項(xiàng)目的方式,建立cloud-base-4000(基礎(chǔ)服務(wù)模塊,4000指代當(dāng)前服務(wù)對(duì)外的端口號(hào),后面4001同理),cloud-operation-4001(運(yùn)維管理模塊)
項(xiàng)目結(jié)構(gòu)如下:

這樣多個(gè)SpringBoot項(xiàng)目都在cloud這個(gè)項(xiàng)目下管理了,接下來要api服務(wù)被base服務(wù)與operation服務(wù)共享
第六步:在cloud-api中新建被其他服務(wù)共享的類User,項(xiàng)目結(jié)構(gòu)如下圖:

這時(shí)在base服務(wù)調(diào)用api的User類會(huì)報(bào)錯(cuò)并且無法導(dǎo)入U(xiǎn)ser類,如下圖(解決辦法請(qǐng)看第七步):

第七步:打開base的pom.xml,在里面加入api服務(wù)的依賴
<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.wlovet</groupId>
<artifactId>cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>cloud-base-4000</artifactId>
<build/>
<dependencies>
<dependency><!-- 自己定義的api -->
<groupId>com.wlovet</groupId>
<artifactId>cloud-api</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>這時(shí)base服務(wù)中Hello類就不會(huì)報(bào)錯(cuò)了,如下圖:

同樣,在operation服務(wù)也加入api的依賴,那么在operation服務(wù)也可以使用api中所有的類了
第八步:如何將這些module打包成一個(gè)個(gè)執(zhí)行的jar包,在base服務(wù)的Hello類建立一個(gè)main方法,加入如下代碼:
User user = new User();
user.setName("為止");
user.setGender("男");
System.out.println(user);在pom.xml中加入如下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.wlovet.Hello</mainClass><!-- 此處改為自己的類路徑 -->
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>點(diǎn)擊base服務(wù)的pom文件,右鍵—>Run As—>Maven Install,可以項(xiàng)目路徑下的target文件夾中找到打包好的jar包

拿到cmd中運(yùn)行

以上就是MyEclipse多Module的創(chuàng)建以及打包方式。
SpringBoot項(xiàng)目的啟動(dòng)類與上面的Hello方法類似,所以完全能夠適用于多個(gè)SpringBoot項(xiàng)目的搭建與打包。
我們發(fā)現(xiàn)cloud、cloud-api、cloud-base-4000、cloud-operation-4001中都存在一個(gè)pom文件。其中
- 1、在cloud的pom文件中引入的依賴會(huì)作用到所有服務(wù)中,例如在cloud的pom文件中引入了slf4j依賴,則其他的服務(wù)都能直接調(diào)用slf4j
- 2、在cloud-api的pom文件引入的依賴在打包后才會(huì)加入到其他關(guān)聯(lián)服務(wù)中,在開發(fā)時(shí)不能直接引用
- 3、base服務(wù)與operation服務(wù)之間的pom引入不會(huì)相互干擾,即使是同一個(gè)依賴,版本不同都會(huì)下載兩份不同的jar包
一般我會(huì)在cloud的pom文件中加入如下依賴:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>這樣每個(gè)服務(wù)都有一份這些依賴了,在每個(gè)服務(wù)下新建一個(gè)SpringBootApplication,那么每個(gè)服務(wù)都是SpringBoot服務(wù)了
idea的搭建
ideal確實(shí)很智能,操作比MyEclipse方便快捷得多,學(xué)會(huì)了MyEclipse創(chuàng)建多SpringBoot項(xiàng)目的話,ideal創(chuàng)建項(xiàng)目不成問題
不過ideal打包與MyEclipse有點(diǎn)不同,這里來單獨(dú)介紹一下:
第一步:File—>Project Structure

第二步:如下圖

第三步:選擇一個(gè)module

第四步:選擇啟動(dòng)類,如果是SpringBoot則選擇SpringBootApplication作為啟動(dòng)類

第五步:這里需要注意,單選選擇第二個(gè);一定要將路徑改為resources包下,不然META-INF會(huì)生成到類路徑下,在打包的時(shí)候會(huì)找不到

第六步:開始打包

第七步:點(diǎn)擊Build

第八步:在classes文件夾下可以找到j(luò)ar包

總結(jié)
至此結(jié)束!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringSecurity+Redis+Jwt實(shí)現(xiàn)用戶認(rèn)證授權(quán)
SpringSecurity是一個(gè)強(qiáng)大且靈活的身份驗(yàn)證和訪問控制框架,本文主要介紹了SpringSecurity+Redis+Jwt實(shí)現(xiàn)用戶認(rèn)證授權(quán),具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
mybatis-plus如何修改日志只打印SQL語句不打印查詢結(jié)果
這篇文章主要介紹了mybatis-plus如何修改日志只打印SQL語句不打印查詢結(jié)果問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
使用@ConfigurationProperties注解獲取為null的解決方法
在SpringBoot中,當(dāng)想需要獲取到配置文件數(shù)據(jù)時(shí),除了可以用 Spring 自帶的@Value注解外,SpringBoot還提供了一種更加方便的方式:@ConfigurationProperties,但我們?cè)谕ㄟ^通過get方法去取值一直為null,本文介紹了使用@ConfigurationProperties注解獲取為null的解決方法2024-09-09
idea項(xiàng)目debug模式啟動(dòng),斷點(diǎn)失效,斷點(diǎn)紅點(diǎn)內(nèi)無對(duì)勾問題及解決
這篇文章主要介紹了idea項(xiàng)目debug模式啟動(dòng),斷點(diǎn)失效,斷點(diǎn)紅點(diǎn)內(nèi)無對(duì)勾問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Linux下用java -jar運(yùn)行可執(zhí)行jar包的方法教程
這篇文章主要給大家介紹了在Linux下用java -jar運(yùn)行可執(zhí)行jar包的方法教程,文中介紹的非常詳細(xì),相信對(duì)大家的工作或者學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05
Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器
這篇文章主要為大家詳細(xì)介紹了Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器,文中通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-06-06
SpringMVC MethodArgumentResolver的作用與實(shí)現(xiàn)
這篇文章主要介紹了SpringMVC MethodArgumentResolver的作用與實(shí)現(xiàn),MethodArgumentResolver采用一種策略模式,在Handler的方法被調(diào)用前,Spring MVC會(huì)自動(dòng)將HTTP請(qǐng)求中的參數(shù)轉(zhuǎn)換成方法參數(shù)2023-04-04

