关于SpringBoot的配置注意项

1.主配置文件的位置

首先我们知道,springBoot的自动配置,要先由主配置类(即@SpringBootApplication)调用注解@SpringBootConfiguration和@EnableAutoConfiguration进行自动注入,而@EnableAutoConfiguration调用AutoConfigurationPackages.Registrar.class对@SpringBootApplication所在类的包及其子包进行扫描,所以主配置类的存放应当是在最高层包(不应包括并行最高层包),否则会导致自动扫描遗漏,项目无法找到全部类。

例:com.Main(@SpringBootApplication)位于src/main/java,那么所有配置类只能位于com包及其子包中,而不能位于src/main/java。

 

2.yaml的注意点

转义字符的使用,如果需要转义字符本身的计算机含义,那么我们需要把它写在双引号内。如果使用单引号或不使用引号,那会被当作普通字符处理。

message: "one\ntwo"

输出:
one(换行)
two

Map/Object的使用是花括号,数组的使用是中括号。注意,冒号后面跟空格,逗号后面不跟空格。注意yaml的级层关系是通过对齐的方式,所以不要乱打空格。

对象或Map:
name: {one: value,two: value}

数组:
name: [one,two]

 

3.关于全局配置文件与注入数据

首先我们要注意,最好养成数据独立,配置独立的习惯,所以我们最好不要再application.properties中写注入数据,而应当把各个bean需要的数据独立写成一个fileName.properties,所以需要在组件类声明所需注入文件。

@Component
@PropertySource(value = { "classpath:fileName.properties" })
@ConfigurationProperties(prefix = "xxxxxx")

...类正文...

那么需要注意的是,如果全局配置文件也有相关的数据,那么是全局优先的,也就是application.properties > 指定的fileName.properties,经过测试,如果同时存在application.yml,那么application.properties > application.yml > 指定的fileName.properties。当然养成良好的代码习惯是必要的,冲突本就应该被避免。

 

4.关于properties文件中的引用

首先,引用使用 ${name} 语法,如果所引用的这个name不存在,那么将会被当作字符串处理。

//if
property.one = 1
property.two = ${property.one}

结果:property.two = 1

//if
property.two = ${property.one}

结果:property.two = ${property.one}  ----字符串

另外的,properties的key不支持引用,即引用只能用于值,如 property.map.${key} 的 ${key} 会被当做字符串处理,也可能error。

 

5.多环境的配置文件

我们的副配置文件一般使用 application-profileName.properties ,引用时会自动截取 profileName ,所以引用时不要写全称。

注意如果主配置文件如果没有引用 spring.profiles.active=profileName ,则主配置文件优先。例,

//application-one.properties
server.prot=8811


//如果application.properties这样写,结果port=8800
server.port=8800

//如果application.properties这样写,结果port=8811
server.port=8800
spring.profiles.active=one

当然也可以后期用命令行  --spring.profiles.active=one  修改配置文件。

附yaml文档块写法,

//主配置块调用one模块注册新的配置,最后port=8811

server:
  port:8800
spring:
  profiles:
    active:one

---
server:
  port:8811
spring:
  profiles:one

 

6.多个主配置文件

springboot支持多个主配置文件,已形成互补配置。一般来说,最多允许有4个,分别位于file:/config/file:/classpath:/config/classpsth:/,优先级从高到低。配置冲突时,优先级高的覆盖优先级的,不冲突时都加载形成配置互补。

 如果需要额外添加配置文件,可以在外部编写配置文件,在项目启动时使用命令行  --spring.config.location=path 来指定一个配置文件,同样形成互补配置,注意优先级:外部 > 内部。如果不想指定,放在项目包同目录下也可。即目录结构:/.../project/.../application.properties,外部配置文件自动加载。

如果修改的配置参数少,在项目启动时使用命令行参数即可,不需要配置文件,且该命令优先级最高,且互补。例:--server.port=8083 会将服务端口设置为8083。

 

7.关于自动配置

前面1说到,扫描,然后自动配置,那么自动配置,首先就是根据项目类型获取所需的 xxxxAutoConfiguration 类并将它们加入到容器中,每一个类都是一个配置文件,类的属性就是我们手写配置文件的参数,即我们配置文件所编写的参数,一般就是在修改这些类的属性。而配置类中同样存在一些组件,提供给我们管理属性值。而这些类的属性,同样的也是一个类,一般是 xxxxProperties 类。

配置类的运行顺序:先根据项目条件判断是否生效?生效即启动配置类,加载相应的组件及属性值(可能是默认值,也可能是我们设定的手动值)。一般来说,一个配置类会有多个条件判断是否生效,但是一旦一个条件的属性被手动调用,那么其它判断值也会自动修改为满足生效的值(或者默认值就满足),一定程度上防止开发人员调用失败。同时,组件或属性值的加载一般也会有条件判断,同样需要满足条件才加载,如 @ConditionalOnXxxx 类型的注解,一般就是条件判断注解。

所以当我们足够熟悉各个配置类时,我们不仅可以通过配置文件来配置项目参数,还可以直接修改配置类的组件方法及属性值,以达到我们希望的配置情况。

ps,如果不确定启动了哪些配置类,我们可以在application.properties文件中加上 debug=true ,就会有AUTO-CONFIGURATION REPORT,能在报告里查看具体的生效与失效配置类。

 

END!


 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值