1 前言
以前做过很多单体项目,基本上就是新建一个Springboot工程,然后新建yml配置文件,将开发环境与生产环境进行配置,接下来搭建基础设施功能,比如系统管理、日志管理、定时任务等等。虽然在工程目录结构上对这些功能进行了划分,但是还是显得比较臃肿,另外如果新项目要使用之前项目的功能只得复制粘贴了,这样做太费时费力了。
我相信很多开发者之前肯定也这么干过,哈哈。
前天公司来了个实习的,看着他打开Idea演示项目的时候,我发现跟我之前的做法类似,所有业务功能在一个工程里面,没有进行功能的模块划分(小项目这样做确实无可厚非)。
因为公司后面要进行一个大项目的开发,需要新来的同事理解模块化的工程。所以我就大致的给新同事介绍了下。
2 为什么需要搭建聚合工程
比如我们盖房子,有搬砖的、有筛沙的、有粉刷的、有装水电的等等,大家分工合作,各自负责自己的部分(这里比喻可能不是那么贴切,毕竟现实中有的一人负责多项工作)。
了解微服务的同学都知道,微服务是将一个复杂的业务功能进行服务的拆分,服务与服务之间通过RPC进行通讯,每个服务可以单独部署,也可以集群化。这种设计思想和聚合工程类似,但微服务更为复杂。
比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且针对某个模块的特殊控制更为方便。
3 聚合工程搭建
3.1 创建父工程
点击File->New Project,在弹出的窗口选择Maven项,右侧选择mava-archetype-quickstart,点击Next
按要求填写项目名称及存放路径,点击Next
这里设置Maven的路径,根据自己实际情况配置,配置完成后点击Finish
删除src目录,留个pom文件就行,编辑父pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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>
<!--子工程结构是Springboot,所以这里父工程继承Springboot工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.example</groupId>
<artifactId>shop</artifactId>
<version>1.0.0</version>
<!-- 父工程设置成pom-->
<packaging>pom</packaging>
<name>shop</name>
<!-- 创建子工程时,将子工程模块会自动注册到这里-->
<modules>
</modules>
<properties>
<springboot.version>2.7.7</springboot.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${springboot.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 设置构建插件-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
到此,父工程创建完毕。
3.2 创建子模块
在根目录上面右键New->Module
和创建父工程一样的选择,然后一直Next即可
点击Finish。
子工程pom配置如下
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>shop</artifactId>
<version>1.0.0</version>
</parent>
<groupId>org.example</groupId>
<artifactId>shop-admin</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>shop-admin</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- SpringBoot Web容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot 测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
执行 maven install
将启动类改造成Springboot启动,在原来的类上加 @SpringBootApplication注解
@SpringBootApplication
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class,args);
}
}
在src下创建resources目录,跟Springboot工程结构一样,再创建一个yml配置文件
配置启动项
启动项目
4 总结
到此搭建结束,其实也很简单,这里只是列出一种比较简单的方式,当然还有其他的,大家可以尝试下。