依赖管理和自动配置

1.依赖管理

1.1什么是依赖管理

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

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

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>

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

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

2.starter场景启动器

2.1starter场景启动器基本介绍

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

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

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

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的常用功能:比如字符过滤器,文件上传,视图解析器等等

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

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

3.3.3application.properties常用配置

#端口号
server.port=10000 #应用的上下文路径(项目路径)
server.servlet.context-path=/allModel #指定 POJO 扫描包来让 mybatis 自动扫描到自定义的 POJO
mybatis.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 数据库 url
mysql.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.=debug
logging.level.com.cxs.allmodel.mapper=debug
logging.level.org.springframework.web=info
logging.level.org.springframework.transaction=info
logging.level.org.apache.ibatis=info
logging.level.org.mybatis=info
logging.level.com.github.pagehelper = info
logging.level.root=info
#日志输出路径
logging.file=/tmp/api/allmodel.log #配置 pagehelper 分页插件
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.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+10
spring.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,看一下源码

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 放在上述任意的目录下, 你会发现依然是管用的。

day01-2-依赖管理和自动配置的更多相关文章

  1. SpringBoot原理深入及源码剖析(一) 依赖管理及自动配置

    前言 传统的Spring框架实现一个Web服务需要导入各种依赖jar包,然后编写对应的XML配置文件等,相较而言,SpringBoot显得更加方便.快捷和高效.那么,SpringBoot究竟是如何做到 ...

  2. 面试官:给我讲讲SpringBoot的依赖管理和自动配置?

    1.前言 从Spring转到SpringBoot的xdm应该都有这个感受,以前整合Spring + MyBatis + SpringMVC我们需要写一大堆的配置文件,堪称配置文件地狱,我们还要在pom ...

  3. 使用maven-pom进行依赖管理与自动构建

    使用maven-pom进行依赖管理与自动构建 span.kw { color: #007020; font-weight: bold; } /* Keyword */ code > span.d ...

  4. SpringBoot Beans管理和自动配置

    原 SpringBoot Beans管理和自动配置 火推 02 2017年12月20日 21:37:01 阅读数:220 SpringBoot Beans管理和自动配置 @SpringBootAppl ...

  5. Gradle实战教程之依赖管理

    这是从我个人网站中复制过来的,原文地址:http://coolshell.info/blog/2015/05/gradle-dependency-management.html,转载请注明出处. 简要 ...

  6. Gradle Maven 依赖管理

    仓库管理简介 本质上说,仓库是一种存放依赖的容器,每一个项目都具备一个或多个仓库. Gradle支持以下仓库格式: Ivy仓库 Maven仓库 Flat directory仓库 我们来看一下,对于每一 ...

  7. 如何编写Spring-Boot自动配置

    摘要 本文主要介绍如何把一个spring的项目(特别是一些公共工具类项目),基于spring boot的自动配置的思想封装起来,使其他Spring-Boot项目引入后能够进行快速配置. AutoCon ...

  8. 【系列教程1】Gradle入门系列三:依赖管理

    在现实生活中,要创造一个没有任何外部依赖的应用程序并非不可能,但也是极具挑战的.这也是为什么依赖管理对于每个软件项目都是至关重要的一部分. 这篇教程主要讲述如何使用Gradle管理我们项目的依赖,我们 ...

  9. Gradle入门(4):依赖管理

    在现实生活中,要创造一个没有任何外部依赖的应用程序并非不可能,但也是极具挑战的.这也是为什么依赖管理对于每个软件项目都是至关重要的一部分. 这篇教程主要讲述如何使用Gradle管理我们项目的依赖,我们 ...

  10. SpringBoot自动配置原理学习

    介绍 构建Springboot项目时我们会创建一个启动类 @SpringBootApplication public class DemoApplication { public static voi ...

随机推荐

  1. JS中split、slice、splice区别

    splite 定义:该方法是切割字符串的一种方法,该方法主要用于把一个字符串分割成字符串数组并且返回新生成的数组.用于字符串对象   语法:str.split(separator,howmany) 返 ...

  2. html让容器居中,css让容器水平垂直居中的7种方式

    这篇文章主要为大家详细介绍了css让容器水平垂直居中的7种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这种css布局平时用的比较多,也是面试题常出的一个题,网上一搜一大丢,不过还是想自己总 ...

  3. Java执行cmd命令工具类

    工具类: public class CmdTask implements Runnable { private String command; private String dirPath; publ ...

  4. Linux 上安装 jmeter

    Linux 下安装 Jmeter,要求先要安装 1.6 版本以上的jdk.所以先说明怎样安装jdk和配置环境变量,本文介绍的是.tar.gz版本的jdk安装. 1.首先在windows上,到官网:ht ...

  5. 解决ESP8266反复启动问题

    ESP8266刷不同固件后,有时会出现反复启动的问题,可能是FLASH里有未擦除干净的区域. 使用乐鑫 Flash 下载工具擦除 选好串口后点击erase擦除,即可正常使用

  6. Mybatis配置报错:Failed to configure a DataSource: 'url' attribute is not specified and no embe...

    问题分析及解决方案 问题原因: Mybatis没有找到合适的加载类,其实是大部分spring - datasource - url没有加载成功,分析原因如下所示. DataSourceAutoConf ...

  7. C++/Lua栈操作

    一.Lua栈结构 1. index为正数 c++获取lua的数组元素的实例: // 接口参数:void lua_rawgeti (lua_State *L, int index, int n); lu ...

  8. systick 理解

    systick 中断的优先级往往设置为最低值,而不是最高值:如果设置为最低值不会发生上图标号[6]处的情况,设置为最低可能会被其他中断抢占,延长systick的响应时间,但是这个延迟不会累计,因为sy ...

  9. 【项目记录】1:一些没有一次安装成功地Python模块

    记录一下,下次查找方便. 1.PIL包 PIL名称已经换成了Pillow 所以使用: pip3 install pil 会报错. 正确方法是: pip3 install pillow 2.win32c ...

  10. 20181224《网络攻防技术》Exp 8 Web综合

    20181224<网络攻防技术>Exp 8 Web综合 目录 20181224<网络攻防技术>Exp 8 Web综合 相关知识点总结 web前端 web后端 数据库编程 实验内 ...