近期在开发一个内部的管理系统,通过前期的技术选型采用了spring boot技术,在前期的代码结构设计上想模仿之前做过的多模块化设计,在做完之后,进行简单的总结回顾。
模块化设计目的
1、将开发代码按照功能拆分成若干个子模块,方便模块间的相互调用、接口共享。
2、达成模块间相互解耦,相互独立的目的,方便后期的服务化扩展。
3、模块间相互解耦,互不影响,模块间独立开发,独立负责,发现问题更加容易定位解决。
模块化设计基本思路
讲整个项目分为3个大部分:
- 基础层:用来存放通用的能力,如数据库驱动与数据库domain类
- 业务层:用来实现具体的service业务逻辑与controllerweb接口
- 启动层:用来扫描所有的web接口,启动服务。
除此之外,还定义了一层parent层,用来管理所有依赖。
整体模块分布图如下:
模块化实现步骤
1、创建新的Module
2、将对应的模块代码放到该Module下
3、将移动后的Module数据坐标通过pom.xml文件导入到要使用的包下
<dependencies>
<dependency>
<groupId>com.xxxx.xxxx</groupId>
<version>1.0.0-SNAPSHOT</version>
<artifactId>common</artifactId>
</dependency>
<dependencies>
4、将子模块设置为jar 父模块设置为pom
5、在mian函数,模块,添加插件:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
其他模块不加。
5、将模块安装到本地模块中
安装完毕后便可以正常运行。
踩坑点
1、不同的module使用不同的配置文件时,要在启动模块的配置文件下启用其他模块的配置文件,例如common module创建了配置文件:
在启动module中就要:
进行启用。
2、每次修改模块代码后,若要进行打包,最好先进行maven clean 后install,否则jar包可能会出问题。
3、在子模块中,要在子module的pom文件下配置build插件,否则可能编译会没有产物,导致运行失败,配置代码:
<build>
<directory>output</directory>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<outputDirectory>output/classes</outputDirectory>
<testOutputDirectory>output/test-classes</testOutputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>