最近几年SpringBoot大热,很多IT公司都开始采用SpringBoot来替换传统的SpringMVC项目。那么如何搭建一个适合开发的项目架构呢?

这里我主要介绍Java程序员使用最多的两种工具进行搭建:1、MyEclipse;2、ideal

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服务了

ideal

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

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

第一步:File—>Project Structure

第二步:如下图

第三步:选择一个module

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

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

第六步:开始打包

第七步:点击Build

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

至此结束!

多个SpingBoot项目的搭建与部署的更多相关文章

  1. SpringMVC框架下Web项目的搭建与部署

    这篇文章已被废弃. 现在,Deolin使用Maven构建项目,而不是下载Jar文件,使用Jetty插件调试项目,而不是外部启动Tomcat. SpringMVC比起Servlet/JSP方便了太多 W ...

  2. jenkins+git+maven搭建自动化部署项目环境

    简介    折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.co ...

  3. React项目模板-从项目搭建到部署

    前一段时间做了一个小项目,时间比较紧,就一个人月.最终希望能够通过微信公众号链接启动应用. 项目的业务细节就不多说了,主要是想分享一下做这个项目技术方面的一些经验. 技术选型 参考范围大致三种:Ang ...

  4. Vue项目搭建与部署

    Vue项目搭建与部署 一,介绍与需求 1.1,介绍 Vue  是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue两大核心思想:组件化和数据驱动.组 ...

  5. React项目搭建与部署

    React项目搭建与部署 一,介绍与需求 1.1,介绍 1.1.1,React简介 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React ...

  6. 第一周博客之二---OA项目环境搭建及开发包部署

    OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...

  7. SSM 项目从搭建爬坑到 CentOS 服务器部署 - 速查手册

    SSM 项目从搭建爬坑到 CentOS 服务器部署 - 速查手册 提示: (1)CSDN 博客左边有操作工具条上有文章目录 (2)SSM 指 Spring,Spring MVC,MyBatis Mav ...

  8. 使用gogs,drone搭建自动部署

    使用gogs,drone搭建自动部署 使用gogs,drone,docker搭建自动部署测试环境 Gogs是一个使用go语言开发的自助git服务,支持所有平台Docker是使用go开发的开源容器引擎D ...

  9. Spring MVC Maven 环境搭建与部署

    本文简单演示了本地开发环境的搭建.项目出包.部署运行.HelloWorld,以及部分注意事项. 起初的玩法:先安装Eclipse,然后分别下载并安装Maven.spring的插件,再进行工程模式转换, ...

随机推荐

  1. 在Android中通过导入静态数据库来提高应用第一次的启动速度

    一个Android应用给用户的第一印象非常重要,除了要有好的创意和美观的界面,性能也是很关键的部分,本文讨论的就是第一次启动的速度问题. Android应用的启动过程不能让用户等待太长时间,个人觉得最 ...

  2. Zookeeper客户端Curator---Getting Started

    先说个小插曲,前几天有个网站转载我的文章没有署名作者,我有点不开心就给他们留言了,然后今天一看他们把文章删了.其实我的意思并不是你允许转载,我想表达的是我的付出需要被尊重.也不知道是谁的错~ ==== ...

  3. kubernetes Dashboard 使用RBAC 权限认证控制

    kubernetes RBAC实战 环境准备 先用kubeadm安装好kubernetes集群,[包地址在此](https://market.aliyun.com/products/56014009/ ...

  4. SQL Server 关于CROSS APPLY 和 OUTER APPLY应用

    先看看语法: <left_table_expression>  {cross|outer} apply<right_table_expression> 再让我们了解一下appl ...

  5. vue资源

    Vue中文官网:https://cn.vuejs.org/ Vue源码:https://github.com/vuejs/vue Vue官方工具:https://github.com/vuejs vu ...

  6. OS + CentOS 7 / centos 7 / VirtualBox /vegrant

    s VirtualBox:解决VirtualBox安装时libSDL-1.2.so.0()错误的问题. http://www.sklinux.com/983 为Centos6.2安装VirtualBo ...

  7. python---web框架本质(2)

    目录 controllers //存放控制方法 models //存放模型方法 views //存放视图模板 index.html new.html show.html index.py //用户访问 ...

  8. js格式化input输入框内容(每几位分一组,并使用特定字符分隔)

    <html> <head> <title></title> </head> <body> <input id=" ...

  9. 匿名内部类中使用的外部局部变量为什么只能是final变量

    被匿名内部类引用的变量会被拷贝一份到内部类的环境中 但其后,在外部,该变量如果被修改,则内部外部不一致 Java为了避免数据不同步的问题,做出了匿名内部类只可以访问final的局部变量的限制. 究其原 ...

  10. 使用java.util.LinkedList模拟实现内存页面置换算法--LRU算法

    一,LRU算法介绍 LRU是内存分配中“离散分配方式”之分页存储管理方式中用到的一个算法.每个进程都有自己的页表,进程只将自己的一部分页面加载到内存的物理块中,当进程在运行过程中,发现某页面不在物理内 ...