经常看到GitHub上的一些官方demo,为了展示很多功能,项目是由多模块的形式组织的,基于maven构建的形式为根文件夹下有个pom.xml,每个功能文件夹下又有pom.xml。
刚开始傻傻不会用的时候,直接引入子文件夹下的pom.xml为maven项目。然后有需要看另一个功能又打开了一个子模块,因为IDE用的是idea,变成了多窗口。后来发现直接打开父模块接可以了,各个子模块可以在同一个窗口下切换和启动。
以下最简单的建一个多模块项目,为了学习微服务,将建两个springboot web的子模块,服务提供者provider和消费者consumer。
两个服务在同个idea窗口中开发和启动,测试调用consumer的服务,consumer内部会调用provider。
new Module - > spring initializr,分别新增artifactId为provider和consumer,放在springbootmodules目录之下:
因为两个SpringBoot项目都默认是8080端口,为了能同时启动,调整consumer的端口为8081,在consumer的application.properties中添加server.port=8081
在provider和consumer分别新增两个controller: ProviderController和ConsumerController,返回最简单的字符串。
ProviderController.java:
ConsumerController中为了调用provider( http://localhost:8081/provider ),使用了spring的RestTemplate做http客户端,多配置了RestTemplate的Bean
父pom.xml现在只有管理两个子模块的作用,可以抽取子模块统一的配置信息和依赖版本控制放父模块中管理。
父pom.xml:
子模块pom.xml,设置parent为springbootmodules:
使用mvn clean package命令,或点击idea maven窗口功能,把两个子模块打成jar包:
使用java -jar命令启动两个服务:
两个服务都正常启动,并且服务消费者consumer调用服务提供者provider正常: