springboot多模块项⽬搭建之基础模块
序⾔:
之前开发项⽬的时候,都是在项⽬中根据逻辑分为dao、service、web层,这些都是在⼀个项⽬内部进⾏分层,所表现的形式就是不同的包。
但是这种⽅式会带来⼀些问题:
1. 同⼀个数据表,在不同的项⽬中或者功能使⽤。所以每个项⽬都会配⼀个mybatis。如果⼀开始规定这个表不能改什么字段了,那这
样做没问题。但事实上,⼀张表从开始到结束,会经历⼤风⼤浪,所以可能在多个项⽬中改mybatis改到晕眩。。。。。。
2. 再举个例⼦,⽐如有⼀个web服务⾥⾯包含了多个功能,其中⼀个功能可能会消耗⼤量CPU和内存,那这样可能会影响到其他功能的
使⽤。这个时候,如果能把各个功能模块分不出来单独部署,最终通过http或者rpc去调⽤,相信会提⾼不少。
其实不管是分包还是分模块,都是为了让我们的代码能够具有重⽤性,同时也能降低代码之间的依赖(解耦合)。
不知不觉说这么多了,下⾯就直接⼿把⼿教⼤家如何搭建⼀个多模块的项⽬。
我这边⽤的是idea,eclispe的玩家可以忽略本⽂,我不是很熟 -。-
⼀、创建⽗⼯程:
idea 中创建Spring Initializr ⼯程,依赖包的啥都不要选。创建结束后,删除src、mvn、等,只保留⼀个l⽂件。
⼆、创建⼦模块
1. 依次点击根项⽬ 选择 new-> Module
2. 选择Maven -> Next
3. 填写AiffactId -> Next
4. 修改Module name ,中间加个斜杠 -> Finish
5. 同理 添加 demo-web,demo-service⼦模块。最终的项⽬结构如下:
⼤家注意下,添加完⼦模块后,⽗⼯程的pom中已经有了modules的信息。
三、设置启动模块
到现在为⽌,这仅仅是⼀个maven项⽬,都没有个启动的⼊⼝,我们这⾥可以利⽤springboot添加⼀个⼊⼝类。
1. ⾸先在demo-web层的l中添加springboot的依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
然后在 demo-web层创建⼀个com.cj.demo.web包,在demo下(和web同⽬录)创⼀个DemoApplication .java.代码如下所⽰:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class);
}
}
2. 在web下新建⼀个controller包并创建⼀个controller,添加test⽅法测试接⼝是否可⽤:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("demo")
public class IndexController {
@GetMapping("test")
public String test() {
springboot是啥return "test";
}
}
demo-web层的⽬录如下所⽰:
3. 运⾏DemoApplication类中的main⽅法,访问localhost:8080/demo/test得到如下效果:
可能会出现的问题:
1 错误: 不到或⽆法加载主类 com.cj.DemoApplication
启动项中的路径不对,修改⼀下就好了,如下图进⾏修改:
四、配置模块间的依赖关系
⽗⼯程pom⽂件中都要声明所有的⼦模块的依赖。
⼦模块之间依赖关系:service 依赖dao层,web依赖service层。
1. ⽗⼯程pom⽂件中声明所有⼦模块依赖:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。