4

day01-2-依赖管理和自动配置 - 一刀一个小西瓜

 1 year ago
source link: https://www.cnblogs.com/liyuelian/p/17209453.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

依赖管理和自动配置

1.依赖管理

1.1什么是依赖管理

  1. spring-boot-starter-parent 中还有父项目,声明了开发中常用的依赖的版本号

  2. 并且进行自动版本仲裁,即如果程序员没有指定某个依赖jar的版本,则以父版本指定的版本为准

    image-20230312200211772

1.2修改自动仲裁/默认版本号

比如我们要将SpringBoot的 mysql 驱动版本改为 5.1.49(默认版本为8.0.26),有两种方法:

(1)方式一:在pom.xml文件中显式的导入mysql依赖,并指定version

<!--自己指定mysql的驱动版本--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version></dependency>

(2)方式二:在pom.xml文件的< properties>节点中指定mysql的 key,形如:

<properties> <mysql.version>5.1.49</mysql.version></properties> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency>
image-20230312201218333

为什么能够达到修改版本仲裁的效果?

答:根据依赖就近优先原则。比如pom.xml文件不断的应用依赖,形成了一个依赖树,那么项目依赖jar的版本以离本项目最近的版本为准。如果本项目没有指定该jar的版本,就以离本项目最近的父项目的版本为准。

2.starter场景启动器

2.1starter场景启动器基本介绍

(1)开发中我们引入了相关场景的starter,这个场景中所有的相关依赖都引进来来,比如我们做web开发引入了spring-boot-starter-web,该starter将导入所有与web开发相关的所有包

image-20230312202512477

(2)依赖树:可以看到spring-boot-starter-web帮我们引入了spring-webmvc,spring-web开发模块,还引入了spring-boot-starter-tomcat场景,spring-boot-starter-json场景,这些场景下面又引入了一大堆相关的包,这些依赖项可以快速启动和运行一个项目,提高开发效率。

springboot-quickstart

(3)所有场景启动器最基本的依赖就是spring-boot-starter,从前面的依赖树可以看到这个依赖是SpringBoot自动配置的核心依赖

image-20230312203201794

2.2官方提供的starter

官方文档:Developing with Spring Boot

  1. 在开发中我们经常会用到spring-boot-starter-xxx,比如spring-boot-starter-web,该场景作用于web开发,也就是说xxx是某种开发场景
  2. 我们只要引入starter,这个场景的所有常规需要的依赖都能自动引入

2.3第三方starter

  1. SpringBoot也支持第三方starter
  2. 第三方starter不需要从spring-boot开始,因为这是官方spring-boot保留的命名方式。第三方启动程序通常以项目名称开头。例如,名为thirdpartyproject的第三方启动程序项目通常被命名为thirdpartyproject-spring-boot-starter
  3. 也就是说,xxx-spring-boot-starter是第三方为我们提供的简化开发的场景启动器

3.自动配置

3.1自动配置介绍

在SSM框架整合时,需要配置tomcat、配置SpringMVC、配置如何扫描包、配置字符过滤器、配置视图解析器、文件上传等,非常麻烦。而在SpringBoot中,存在自动配置机制,极大提高了开发效率。

3.2SpringBoot自动配置了哪些

  1. 自动配置了Tomcat

  2. 自动配置了SpringMVC

  3. 自动配置了Web的常用功能:比如字符过滤器,文件上传,视图解析器等等

    image-20230312205600873
  4. 自动配置:默认扫描包结构[官方文档],它会去扫描主程序所在的包及其子包下的所有文件,当然如果要扫描其他包也可以进行配置。

    image-20230312210703781

3.3如何修改默认配置

3.3.1修改默认扫描包结构

直接在主程序的注解中指定要扫描的包及其子包:

@SpringBootApplication(scanBasePackages = {"com.li","xx.yy","aa.bb"})

注意,scanBasePackages属性可以接收多个值。

3.3.2通过属性文件修改配置

SpringBoot项目最重要也是最核心的配置文件就是application.properties,所有的框架配置都可以在这个配置文件中说明。application.properties文件一般放在resources目录下。

application.properties配置大全

默认配置最终都是映射到某个类中,这个类最终也会被注入到spring的容器中。

配置properties-->配置属性Bean-->Spring容器

#修改server的监听端口 默认为8080server.port=10000#修改单个文件上传的默认最大值 默认为1MB#multipart.max-file-size属性可以指定SpringBoot上传文件的大小限制#默认配置最终都是映射到某个类中!#比如multipart.max-file-size会映射到MultipartProperties类上#将光标放在该属性,输入ctrl+b,就可以定位这个属性是关联到哪个属性类上的spring.servlet.multipart.max-file-size=10MB
image-20230312215843707

3.3.3application.properties常用配置

#端口号server.port=10000#应用的上下文路径(项目路径)server.servlet.context-path=/allModel#指定 POJO 扫描包来让 mybatis 自动扫描到自定义的 POJOmybatis.type-aliases-package=com.cxs.allmodel.model#指定 mapper.xml 的路径:#application 上配置了@MapperScan(扫描mapper类的路径)和 pom.xml 中放行了 mapper.xml后,#配置mapper-locations没有意义。如果mapper类和 mapper.xml不在同一个路径下时,mapper-locations就有用了mybatis.mapper-locations=classpath:com/cxs/allmodel/mapper#session 失效时间(单位 s)spring.session.timeout=18000#数据库连接配置#mysql 数据库 urlmysql.one.jdbc-url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai&useSSL=false#mysql 数据库用户名mysql.one.username=#数据库密码mysql.one.password=#线程池允许的最大连接数mysql.one.maximum-pool-size=15#日志打印:#日志级别 trace<debug<info<warn<error<fatal 默认级别为 info,即默认打印 info 及其以上级别的日志#logging.level 设置日志级别,后面跟生效的区域,比如 root 表示整个项目,也可以设置为某个包下,也可以具体到某个类名(日志级别的值不区分大小写)logging.level.com.cxs.allmodel.=debuglogging.level.com.cxs.allmodel.mapper=debuglogging.level.org.springframework.web=infologging.level.org.springframework.transaction=infologging.level.org.apache.ibatis=infologging.level.org.mybatis=infologging.level.com.github.pagehelper = infologging.level.root=info#日志输出路径logging.file=/tmp/api/allmodel.log#配置 pagehelper 分页插件pagehelper.helperDialect=mysqlpagehelper.reasonable=truepagehelper.supportMethodsArguments=truepagehelper.params=count=countSql#jackson 时间格式化spring.jackson.serialization.fail-on-empty-beans=false#指定日期格式,比如 yyyy-MM-dd HH:mm:ss,或者具体的格式化类的全限定名spring.jackson.date-format=yyyy-MM-dd HH:mm:ss#指定日期格式化时区,比如 America/Los_Angeles 或者 GMT+10spring.jackson.time-zone=GMT+8#设置统一字符集spring.http.encoding.charset=utf8#redis 连接配置# redis 所在主机 ip 地址spring.redis.host=#redis 服务器密码spring.redis.password=#redis 服务器端口号spring.redis.port=#redis 数据库的索引编号(0 到 15)spring.redis.database=14# 连接池的最大活动连接数量,使用负值无限制spring.redis.pool.max-active=8# 连接池的最大空闲连接数量,使用负值表示无限数量的空闲连接spring.redis.pool.max-idle=8# 连接池最大阻塞等待时间,使用负值表示没有限制spring.redis.pool.max-wait=-1ms# 最小空闲连接数量,使用正值才有效果spring.redis.pool.min-idle=0# 是否启用 SSL 连接.spring.redis.ssl=false# 连接超时,毫秒为单位spring.redis.timeout= 18000ms# 集群模式下,集群最大转发的数量spring.redis.cluster.max-redirects=# 集群模式下,逗号分隔的键值对(主机:端口)形式的服务器列表spring.redis.cluster.nodes=# 哨兵模式下,Redis 主服务器地址spring.redis.sentinel.master=# 哨兵模式下,逗号分隔的键值对(主机:端口)形式的服务器列表spring.redis.sentinel.nodes= 127.0.0.1:5050,127.0.0.1:5060

3.3.4application.properties自定义配置

我们还可以在properties文件中自定义配置,通过@Value("${}")获取对应属性值

(1)application.properties 文件

my.website=https://www.baidu.com

(2)某个 Bean

@Value("${my.website}")private String bdUrl;//从application.properties中获取value值

3.4SpringBoot在哪里读取application.properties配置

(1)打开ConfigFileApplicationListener.java,看一下源码

image-20230312222302971
private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/*/,file:./config/";

可以看到SpringBoot默认读取的路径有:

  1. 类路径:classpath:/
  2. 类路径的config目录下:classpath:/config/
  3. 项目根目录下:file:./
  4. 根目录的config目录的任何子级目录下:file:./config/*/
  5. 根目录的config目录下:file:./config/

也就是说如果我们把 application.properties 放在上述任意的目录下, 你会发现依然是管用的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK