• SpringCloud微服务多应用脚手架的搭建与部署


    最近几年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服务的依赖

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <parent>
    6. <groupId>com.wlovetgroupId>
    7. <artifactId>cloudartifactId>
    8. <version>0.0.1-SNAPSHOTversion>
    9. parent>
    10. <artifactId>cloud-base-4000artifactId>
    11. <build/>
    12. <dependencies>
    13. <dependency>
    14. <groupId>com.wlovetgroupId>
    15. <artifactId>cloud-apiartifactId>
    16. <version>${project.version}version>
    17. dependency>
    18. dependencies>
    19. project>

    这时base服务中Hello类就不会报错了,如下图:

    同样,在operation服务也加入api的依赖,那么在operation服务也可以使用api中所有的类了

    第八步:如何将这些module打包成一个个执行的jar包,在base服务的Hello类建立一个main方法,加入如下代码:

    1. User user = new User();
    2. user.setName("为止");
    3. user.setGender("男");
    4. System.out.println(user);

    在pom.xml中加入如下配置:

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>org.apache.maven.pluginsgroupId>
    5. <artifactId>maven-shade-pluginartifactId>
    6. <version>1.2.1version>
    7. <executions>
    8. <execution>
    9. <phase>packagephase>
    10. <goals>
    11. <goal>shadegoal>
    12. goals>
    13. <configuration>
    14. <transformers>
    15. <transformer
    16. implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    17. <mainClass>com.wlovet.HellomainClass>
    18. transformer>
    19. transformers>
    20. configuration>
    21. execution>
    22. executions>
    23. plugin>
    24. plugins>
    25. 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文件中加入如下依赖:

    1. <properties>
    2. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    3. <maven.compiler.source>1.8maven.compiler.source>
    4. <maven.compiler.target>1.8maven.compiler.target>
    5. <junit.version>4.12junit.version>
    6. <log4j.version>1.2.17log4j.version>
    7. <lombok.version>1.16.18lombok.version>
    8. properties>
    9. <dependencies>
    10. <dependency>
    11. <groupId>org.springframework.cloudgroupId>
    12. <artifactId>spring-cloud-dependenciesartifactId>
    13. <version>Dalston.SR1version>
    14. <type>pomtype>
    15. <scope>importscope>
    16. dependency>
    17. <dependency>
    18. <groupId>org.springframework.bootgroupId>
    19. <artifactId>spring-boot-dependenciesartifactId>
    20. <version>1.5.9.RELEASEversion>
    21. <type>pomtype>
    22. <scope>importscope>
    23. dependency>
    24. <dependency>
    25. <groupId>mysqlgroupId>
    26. <artifactId>mysql-connector-javaartifactId>
    27. <version>5.0.4version>
    28. dependency>
    29. <dependency>
    30. <groupId>com.alibabagroupId>
    31. <artifactId>druidartifactId>
    32. <version>1.0.31version>
    33. dependency>
    34. <dependency>
    35. <groupId>org.mybatis.spring.bootgroupId>
    36. <artifactId>mybatis-spring-boot-starterartifactId>
    37. <version>1.3.0version>
    38. dependency>
    39. <dependency>
    40. <groupId>ch.qos.logbackgroupId>
    41. <artifactId>logback-coreartifactId>
    42. <version>1.2.3version>
    43. dependency>
    44. <dependency>
    45. <groupId>junitgroupId>
    46. <artifactId>junitartifactId>
    47. <version>${junit.version}version>
    48. <scope>testscope>
    49. dependency>
    50. <dependency>
    51. <groupId>log4jgroupId>
    52. <artifactId>log4jartifactId>
    53. <version>${log4j.version}version>
    54. dependency>
    55. dependencies>

    这样每个服务都有一份这些依赖了,在每个服务下新建一个SpringBootApplication,那么每个服务都是SpringBoot服务了

    idea的搭建

    ideal确实很智能,操作比MyEclipse方便快捷得多,学会了MyEclipse创建多SpringBoot项目的话,ideal创建项目不成问题

    不过ideal打包与MyEclipse有点不同,这里来单独介绍一下:

    第一步:File—>Project Structure

    第二步:如下图

    第三步:选择一个module

    第四步:选择启动类,如果是SpringBoot则选择SpringBootApplication作为启动类

    第五步:这里需要注意,单选选择第二个;一定要将路径改为resources包下,不然META-INF会生成到类路径下,在打包的时候会找不到

    第六步:开始打包

    第七步:点击Build

    第八步:在classes文件夹下可以找到jar包

    至此结束!

  • 相关阅读:
    VScode保存自动格式化
    肠道菌群代谢组学之粪便微生物移植治疗原发性硬化性胆管炎
    用VS Code搞Qt6:至简窗口部件——QWidget
    C语言 力扣习题 10.19日 day1
    【问题】在安装torchvision的时候,会自动安装torch?
    加密和解密
    Keras CIFAR-10分类 SVM 分类器篇
    spoof_call的分析与改进
    Nuxt.js
    文件夹复制功能的实现
  • 原文地址:https://blog.csdn.net/weixin_33005117/article/details/134070288