SpringCloud微服务多应用脚手架的搭建与部署方式
作者:sum墨
最近几年SpringBoot大热,很多IT公司都开始采用SpringBoot来替换传统的SpringMVC项目。那么如何搭建一个适合开发的项目架构呢?
这里我主要介绍Java程序员使用最多的两种工具进行搭建:
- 1、MyEclipse;
- 2、idea
MyEclipse搭建
第一步:打开MyEclipse,选择File—>New—>Other,搜索maven,点击next
第二步:选择‘Create a simple project(skip archetype selection)’,点击next
第三步:填入‘Group Id’和‘Artifact Id’,注意这边的‘Packaging’需要选择pom,不能选择jar或者war,然后点击Finish
这样就建好了一个SpringBoot项目的管理中心,展开如下图:
第四步:多个SpringBoot项目之间可能会有一些公用的部分,比如User这个实体类,所以要建立一个api项目为其他SpringBoot项目提供公用的类和方法
建立api项目如下:
选中cloud项目,右键点击打开菜单,选择new—>other,搜索module,点击next
跟上面建立cloud项目一样,给该服务取名为cloud-api,点击Finish
这样就创建好了cloud-api服务了,项目结构如下
第五步:依照上面建立cloud-api项目的方式,建立cloud-base-4000(基础服务模块,4000指代当前服务对外的端口号,后面4001同理),cloud-operation-4001(运维管理模块)
项目结构如下:
这样多个SpringBoot项目都在cloud这个项目下管理了,接下来要api服务被base服务与operation服务共享
第六步:在cloud-api中新建被其他服务共享的类User,项目结构如下图:
这时在base服务调用api的User类会报错并且无法导入User类,如下图(解决办法请看第七步):
第七步:打开base的pom.xml,在里面加入api服务的依赖
<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>
这时base服务中Hello类就不会报错了,如下图:
同样,在operation服务也加入api的依赖,那么在operation服务也可以使用api中所有的类了
第八步:如何将这些module打包成一个个执行的jar包,在base服务的Hello类建立一个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>
点击base服务的pom文件,右键—>Run As—>Maven Install,可以项目路径下的target文件夹中找到打包好的jar包
拿到cmd中运行
以上就是MyEclipse多Module的创建以及打包方式。
SpringBoot项目的启动类与上面的Hello方法类似,所以完全能够适用于多个SpringBoot项目的搭建与打包。
我们发现cloud、cloud-api、cloud-base-4000、cloud-operation-4001中都存在一个pom文件。其中
- 1、在cloud的pom文件中引入的依赖会作用到所有服务中,例如在cloud的pom文件中引入了slf4j依赖,则其他的服务都能直接调用slf4j
- 2、在cloud-api的pom文件引入的依赖在打包后才会加入到其他关联服务中,在开发时不能直接引用
- 3、base服务与operation服务之间的pom引入不会相互干扰,即使是同一个依赖,版本不同都会下载两份不同的jar包
一般我会在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>
这样每个服务都有一份这些依赖了,在每个服务下新建一个SpringBootApplication,那么每个服务都是SpringBoot服务了
idea的搭建
ideal确实很智能,操作比MyEclipse方便快捷得多,学会了MyEclipse创建多SpringBoot项目的话,ideal创建项目不成问题
不过ideal打包与MyEclipse有点不同,这里来单独介绍一下:
第一步:File—>Project Structure
第二步:如下图
第三步:选择一个module
第四步:选择启动类,如果是SpringBoot则选择SpringBootApplication作为启动类
第五步:这里需要注意,单选选择第二个;一定要将路径改为resources包下,不然META-INF会生成到类路径下,在打包的时候会找不到
第六步:开始打包
第七步:点击Build
第八步:在classes文件夹下可以找到jar包
总结
至此结束!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。