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)文章
在Java的Hibernate框架中對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行查詢操作
這篇文章主要介紹了Java的Hibernate框架中對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行查詢操作的方法,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12
SpringBoot + Mybatis增刪改查實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于SpringBoot + Mybatis增刪改查的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
Java如何判斷一個(gè)IP是否在給定的網(wǎng)段內(nèi)
這篇文章主要介紹了Java如何判斷一個(gè)IP是否在給定的網(wǎng)段內(nèi)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
springboot手動(dòng)動(dòng)態(tài)注入controller和service方式
這篇文章主要介紹了springboot手動(dòng)動(dòng)態(tài)注入controller和service方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(24)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07
細(xì)致解讀希爾排序算法與相關(guān)的Java代碼實(shí)現(xiàn)
這篇文章主要介紹了希爾排序算法與相關(guān)的Java代碼實(shí)現(xiàn),希爾排序的時(shí)間復(fù)雜度根據(jù)步長序列的不同而不同,需要的朋友可以參考下2016-05-05

