1. Spring-Boot项目2中创建方式的POM区别

141 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

  1. 在POM文件中声明当前项目的上级项目为spring-boot-starter-parent
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>xxxx</version>
</parent>

跟进源码POM可以发现,直接上级的pom中什么依赖都么有,那么可以继续看上上级的pom,是否引入的各类依赖 image.png 果然发现在上上级spring-boot-dependencies中加入了大批的依赖,非常的方便!真香

image.png 继续跟踪到顶层的spring-boot-build的pom文件,发现其中仅有一些仓库一类的配置,并不影响咱的代码开发,至此spring-boot项目启动的时候用什么就清楚了!

image.png 2. 问题:直接这样用系统引入的依赖会很多吗? 答案:会的,毕竟用微服务打包都是Fat jar(胖Jar包),在实际使用的时候建议能减少依赖的就减少,参考另外一种spring-boot的pom文件的创建方式! 3. 按需要引入启动类 好处:按照需要引入依赖,1.可以减少依赖的数量;2.配置文件的简化和后期问题定位; 通常一个项目并不是仅仅只需要spring-boot就行了,还需要大量的第三方依赖,如果产生第三方的依赖和spring-boot的依赖冲突的时候,按需引入比上面的一把全部引入要好得多!至少减少了排查范围和排查难度!

<!-- Web项目依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--redis依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<!--集成Kafka-->
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>


<!-- 数据库三件套 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
</dependency>

<!-- 注册发现、远程配置、远程调用三件套 -->
<!-- 微服务远程调用 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 远程动态配置读取 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<!-- 服务注册与发现 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

4.分析spring-boot-starter-web的依赖 在本质上,spring-boot仅仅是做了一个spring mvc的套壳, 将spring mvc的复杂配置进行了简化,让开发人员的速度更快了,也更简单了! image.png 基于spring-boot-starter的启动服务,由此可见,不管什么spring-boot-starter-xxx都是要依赖spring-boot-starter的,仅仅是在spring-boot-starter上增加了自己的一点点特性 image.png

查看spring-boot-starter的核心依赖spring-boot项目的pom文件可知,spring-boot仅仅是将一些核心的依赖整合到一起了,跟进一下spring-boot的源码也可以发现,spring-boot的源码中没用太复杂的内容,更像是一个转换器,将各种配置,特性整合到一起后转换成spring-mvc的支持 image.png

  1. 深入学习建议阅读源码 使用搭配版本更容易学习,版本升级后会有些接口修改导致不兼容问题

Spring-Boot源码,建议使用2.1.13.Release版本

Spring-MVC源码,建议使用5.1.14.Release版本

Mybatis源码,建议使用3.5.6版本