2.springboot-约定优于配置

 SpringBoot Spring SpringMVC关系梳理

1.他们的关系大概是:Spring Boot(包含的内容)>Spring>Spring MVC

2.Spring MVC只是Spring处理WEB层请求的一个模块/组件,Spring MVC的基石是Servlet

3.Spring的核心是IOC和AOP,IOC提供了依赖注入的容器,AOP解决了面向切面编程

4.Spring Boot是为了简化开发,推出的封神框架(约定优于配置【简称COC】,简化了Spring项目的配置流程),SpringBoot包含很多组件/框架,Spring就是最核心的内容之一,也包含Spring MVC

5.Spring家族,有众多衍生框架和组件例如boot、security、jpa等,他们的基础都是Spring


如何理解:约定优于(大于)配置

1、约定优于配置(Convention over Configuration/COC),又称按约定编程,是一种软件设计规范,本质上是对系统、类库或框架中一些东西假定一个大众化合理的默认值(缺省值)

2、例如在模型中存在一个名为User的类,那么对应到数据库会存在一个名为user的表,只有在偏离这个约定时才需要做相关的配置(例如你想将表名命名为t_user等 非user时才需要写关于这个名字的配置)

3、简单来说就是假如你所期待的配置与约定的配置一致,那么就可以不做任何配置,约定不符合期待时,才需要对约定进行替换配置

4、约定优于配置理念【为什么要搞一个约定优于配置?】

约定其实就是一种规范,遵循了规范,那么就存在通用性,那么事情就会变得相对简单,程序员之间的通成本会降低,工作效率会提升,合作也会变得更加简单

5、避免理解成约定的优先级高于配置,其实配置的优先级是高于约定的,只是缺省时按照约定配置。


依赖管理和自动配置

1.依赖管理
 

什么是依赖管理

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

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


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

自动版本仲裁,即如果程序员没有指定某个依赖jar的版本,则以父项目指定的版本为准。

1.需求说明:将SpringBoot mysql驱动修改成5.1.49

2.查看spring-boot-dependencies.pom里面规定当前依赖的版本对应的key,这里是mysql.version

3.修改springboot:2\01_quickstart\pom.xml重写配置,当更新Maven时,就依赖到新的mysql驱动

如果要修改版本,有两种方法:

        1)在pom文件重新引入依赖,指定版本

        2)在pom中,<properties>中指定mysql的key

<properties>
<mysql.version>5.1.49</mysql.version>
</properties>

        3)为什么可以修改版本仲裁:根据依赖就近优先原则,以自己指定的为准

2.starter场景启动器

starter场景启动器基本介绍

1.开发中我们引入了相关场景的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自动配置的核心依赖

 

官方提供的starter

1)地址:https://docs.spring.io/spring-boot/reference/using/build-systems.html#using.build-systems.starters

2)介绍

1.在开发中我们经常会用到spring-boot-starter-xxx,比如spring-boot-starter-web,该场景是用作
web开发,也就是说xxx是某种开发场景。

2.我们只要引入starter,这个场景的所有常规需要的依赖我们都自动引入。


第三方starter

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


3.自动配置

自动配置基本介绍

1.小伙伴还记得否,前面学习SSM整合时,需要配置Tomcat、配置SpringMVC、配置如何扫描包、配置字符过滤器、配置视图解析器、文件上传等[如图],非常麻烦。而在SpringBoot中,存在自动配置机制,提高开发效率
2.简单回顾以前SSM整合的配置.

SpringBoot自动配置了哪些?

1.自动配置Tomcat

2.自动配置SpringMVC

3.自动配置Web常用功能:比如字符过滤器。

        提示:通过获取ioc容器,查看容器创建的组件来验证,

        或者打断点,进行估值

4.自动配置:默认扫描包结构

官方文档:
https://docs.spring.io/spring-boot/reference/using/structuring-your-code.html#using.structuring-your-code.using-the-default-package

com
 +- example
     +- myapplication
         +- MyApplication.java
         |
         +- customer
         |   +- Customer.java
         |   +- CustomerController.java
         |   +- CustomerService.java
         |   +- CustomerRepository.java
         |
         +- order
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderRepository.java

1.说明:默认主程序(MyApplication.java)所在的包及其子包下会被扫描
2.这就是为什么,没有配置扫描包,HelloController也会被扫描

如何修改默认配置

1.如何修改默认扫描包结构

        主程序的注解是可以的带参数,通过(scanBasePackaes="xxx")进行配置,可以是{数组}

@SpringBootApplication(scanBasePackages= "com.stein")
public class MainApp{
}


2.配置大全

resources\application.properties

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

https://blog.youkuaiyun.com/pbrlovejava/article/details/82659702


3.修改配置

resources\application.properties

各种配置都有默认,可以在resources\application.properties修改,application.properties文件我们可以手动创建


#默认server.port=8080
server.port=10000


#比如:默认spring.servlet.multipart.max-file-size=1MB
#该属性可以指定springboot.上传文件大小的限制
#默认配置最终都是映射到某个类上,比如这里配置会映射到MultipartProperties
#把光标放在该属性,ct+b就可以定位该配置映射到的类


spring.servlet.multipart.max-file-size=10MB

4.常用配置

resources\application.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

#数据库连接配置
#mysql数据库url
mysql.one.jdbc=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


5.自定义配置

resources\application.properties

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

application.properties文件
my.website=https://www.baidu.com

//某个Bean
@Value("${my.website}")
private String bdUrl;

SpringBoot在哪配置读取application.properites

(新版3.5.6找不到这个类了)

file指的是quickStart这个项目的根目录下面

自动配置,遵守按需加载原则

基本说明

1.自动配置遵守按需加载原则:也就是说,引入了哪个场景starter就会加载该场景关联的jar包,没有引入的starter则不会加载其关联jar

2.SpringBoot所有的自动配置功能都在spring-boot-autoconfigure包里面

3. 在 SpringBoot 的自动配置包 , 一般是XxxAutoConfiguration.java, 对应XxxxProperties.java, 如图

实例演示

1.以MultipartProperties,MultipartAutoConfiguration和application.properties来说明

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值