SpringBoot自定义配置[学习笔记]


前面已经提到了springboot的运行原理,包扫描以及配置扫描
一些基本配置就生效了,比如我们引入一个spring-boot-starter-web,启动时就会默认开启8080端口,我么也没有做其他配置,如果我们想要自定义配置那该怎么做呢?

SpringBoot自定义配

想要自动一配置就要知道springboot启动时会扫描那些配置文件---->>
扫描哪些呢?.xml ?.peoperties?还是其他的?
别着急,看看springboot源码中是怎么做的---->

先看第一种创建springboot的方式----继承父类
在这父类依赖中
在这里插入图片描述

编译器版本

默认jdk1.8如果需要别的jdk版本,则按需配置字符编码默认为UTF-8
在这里插入图片描述

如果想要自定义配置,可以在pom.xml自己配置别的jdk版本与编码方式;

配置文件

在这里插入图片描述
第一个resource表示资源文件只扫描这个一application*.yml或者application*.yaml或者application*.properties文件;

第二个resource表示扫描时排除了上面三个文件剩下的;
如果要自定义配置文件/或文件类型,那么在pom文件中配置resource来替换掉这个配置,这将会覆盖spring-boot-starter-parent中的代码,即spring-boot-starter-parent中的代码将失效。

但是既然官方都默认这么干了,那还是按照官方走吧;
由此我们也可以看到,如果要自动扫描,就要循序官方的配置文件命名格式
配置文件的命名格式
以application开头的yam/yaml/properties文件;
实际工作中以yml作为配置文件用的是最多的;
在这里插入图片描述
如果非要使用xml来配置的化.也不是不可以,(但springboot为我们提供的方便—自动扫描,何乐而不为呢,自己配置的还要再去手动指认要扫描的配置文件名;)
在这里插入图片描述

这里还是以官方推荐的配置文件进行展开-------------------->>>>

配置文件的配置格式是什么样的呢?------最好的学习方式就是去官网;
找到springboot部分,映入眼帘的是,关于springboot的介绍,系统要求,以及构建工具等;
在这里插入图片描述每个springboot支持的JDK版本不同---->>

Spring Boot 2.6.2 需要Java 8,并且兼容 Java 17(包括 Java 17)。Spring Framework 5.3.14或更高版本也是必需的。

在这里插入图片描述
如果手动添加的数据库配置则springboot中的默认配置会退位让贤给手动配置的数据库内容;
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
内容还是比较多的,先打地基-----配置文件格式----->>

配置文件格式

配置文件的类型有很多,不过大部分还是以默认的为基准,真正自己自定义的配置比较少;

数据库配置,
事务配置
web端口号和访问路径配置
缓存配置

在这里插入图片描述

以web中的配置为例-------->>
springboot在没有配置上下文路径是默认为空,即直接访问servlet就可以了;
在这里插入图片描述
但实际运用中要配置上下问路径的;
在这里插入图片描述
下面到了自己指定上下文路径的时候了

在这里插入图片描述
报错了---->>
在这里插入图片描述
落了一个 /
注意事项---->>
在这里插入图片描述
再次运行—>
在这里插入图片描述

前面提到了 配置文件的命名那个规则,以application开头的yam文件,yaml,或者properties文件
三种文件的配置格式---->>
properties配置---->>键值对的形式

在这里插入图片描述
yml的配置形式—>>>层级关系
在这里插入图片描述
yaml配置形式---->>层级关系
在这里插入图片描述
这里的每一个. 都代表一个层级
properties配置文件转换成yml/yaml之后,使用缩进代表层级关系
基本格式要求
① 大小写敏感
② 使用缩进代表层级关系
③ 相同的部分只出现一次
④ 注意配置参数与值之间的空格

自定义的配置信息
在这里插入图片描述
在这里插入图片描述

既然有三种配置形式,那么优先级关系是怎样的呢??
当建立了三种配置文件,idea给出的图标提示如下---->>
在这里插入图片描述
分别在三个配置文件中添加内容,port端口号不同

在这里插入图片描述

properties的优先级最高;其次是yml,最后是yaml
如果properties中没有的配置内容,会再次扫描yml,以此类推

在这里插入图片描述
访问端口与路径
在这里插入图片描述
springweb与springjdbc配置
在这里插入图片描述
但是就这样来讲,这些配置写法不太好做分类;
比较乱,
yml配置文件

server:
  servlet:
    encoding:
      charset: UTF-8
    context-path: /gavin
  port: 8050

yaml配置文件

server:
  servlet:
    context-path: /gavin_war_exployded
  port: 8070

properties配置文件

server.port=8080
server.servlet.context-path=/spring_boot_war_exploded
server.servlet.encoding.charset=UTF-8
server.error.path=/error.html
spring.datasource.url=jdbc:mysql://localhost:3306/gavin?timeZone=Asia/shanghai
spring.datasource.username=gavin
spring.datasource.password=955945
spring.datasource.driver-class-name=
spring.transaction.default-timeout=10
spring.jdbc.template.query-timeout=5
spring.datasource.tomcat.default-transaction-isolation=
spring.transaction.rollback-on-commit-failure=

配置文件存放的位置

1,网上说放在根目录下,为啥我试了不好使呢?

在这里插入图片描述
2,放在根目录下的config文件夹下也不好使
在这里插入图片描述
3.放在classpath目录下,这个好使
在这里插入图片描述
4,放在classpath下的config文件夹下
在这里插入图片描述
在这里插入图片描述
套娃也不行
在这里插入图片描述
可能是版本的问题吧,先不管他了;

存放位置读取的优先级

在这里插入图片描述
8070胜利,即内层的config文件夹下被先读取;

为什么不是覆盖?
如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。

在这里插入图片描述

我习惯把配置文件统一放在classpath目录下;

bootstrap配置文件

Spring Boot 中有两种上下文对象,一种是 bootstrap, 另外一种是 application(ServletContext), bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

bootstrap配置文件特征

①boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载。
②boostrap 里面的属性不能被覆盖。

bootstrap与 application 的应用场景
application 配置文件主要用于 Spring Boot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
①使用 SpringCloudConfig 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。
②一些固定的不能被覆盖的属性。
③一些加密/解密的场景。

SpringbootWeb 配置

在没有配置web项目之前的目录结构
在这里插入图片描述

建一个webapp目录发现idea只是把它当作一个普通目录来识别的,要想识别为项目资源目录,需要这样配置一下
在这里插入图片描述

导入其他配置类

这 @Import注解可用于导入额外的配置类。 或者可以使用 @ComponentScan自动拾取所有 Spring 组件,包括 @Configuration类。

禁用特定的自动配置类

如果您发现正在应用您不想要的特定自动配置类,您可以使用的 exclude 属性 @SpringBootApplication禁用它们,如果该类不在类路径中,则可以使用 excludeName注释的属性并指定完全限定名称

Springboot对远程开发的支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeMartain

祝:生活蒸蒸日上!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值