写点什么

SpringBoot 系列(5)- 自定义配置

用户头像
引花眠
关注
发布于: 2020 年 11 月 16 日

springboot 的配置

之前介绍过 springboot 相比 spring 来讲需要配置的地方少了很多。 使用 spring 就像是自己组装电脑,需要自己选择购买 CPU,内存,显卡,硬盘等,而使用 springboot 就像是买品牌电脑,已经把合适的配置选择好了,直接用就可以了。 不过 springboot 不只是帮你选择了配置,它还允许你在现有配置上进行DIY,就像选择指定型号的硬件一样,让你参与到配置的过程中。 一般情况下,使用默认的配置绰绰有余,但是在某些情况下, 默认配置无法满足你的要求,在这种情况下你就需要自定义配置了。



通过配置文件调整

如果只是调整一些细节,比如数据源的类型或日志级别,或端口号,那么只需要在配置文件中进行设置就可以了。 SpringBoot 本身支持很多种属性的调整,所以如果需要某些功能的改变时可以先查询一下是否有相关的配置属性。、 springboot 设置属性有多种方式,可以写在文件中,也可以配置到环境变量中 以下是一个配置文件(application.yml)中的一部分,其中调整了端口号和数据源的部分属性



server:
port: 9000
debug: false
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/onlineshop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&useInformationSchema=true&allowPublicKeyRetrieval=true
driver-class-name: com.mysql.cj.jdbc.Driver
username: spring-boot
password: 123456



springboot 属性优先级

springboot 可以从以下位置获取属性,这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。例如,命令行参数会覆盖其他属性源里的属性。



  1. 命令行参数

  2. java:comp/env里的JNDI属性

  3. JVM系统属性

  4. 操作系统环境变量

  5. 随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random.long})

  6. 应用程序以外的application.properties或者appliaction.yml文件

  7. 打包在应用程序内的application.properties或者appliaction.yml文件

  8. 通过@PropertySource标注的属性源

  9. 默认属性



application 属性文件存储位置

application 属性文件也有四个位置可以存储,按以下优先级排序,位置高的将覆盖位置



  1. 当前项目目录下的一个/config子目录,也就是在相对于应用程序运行目录的/config子目录里

  2. 当前应用程序运行目录

  3. 项目的resources 即一个classpath下的/config包

  4. 项目的resources 即classpath根路径(root)



ps:在同一优先级位置同时有application.properties和application.yml,那么application. yml里的属性会覆盖application.properties里的属性



自定义 bean 覆盖配置

如果默认的实现不满足需求,可以自定义配置覆盖默认的配置,比如对于前后端分离在调试时经常发生的跨域问题,就可以使用自定义的配置实现。 每个应用是否需要跨域,可以访问哪些路径等等这都是不一样的,所以使用默认配置是不合适的,以下就是一个跨域配置的例子。



@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
.allowCredentials(true).maxAge(3600);
}
}



不同的环境激活不同的配置

应用程序可能需要部署到不同的环境中,比如开发、测试、生产等,在不同的环境一些配置细节通常会有所不同。 比如,数据库连接在开发环境下和测试环境下就会不一样,在生产环境下又不一样;日志的打印级别也不一样。 使用 springframework 的 profile 条件化配置,可以选择运行特定的配置。 比如,在上一个跨域的配置中,我们可以设置值在sit环境才启用跨域设置。



@Profile("sit")
@Configuration
public class CorsConfig implements WebMvcConfigurer {
...
}



使用的时候设置 spring.profiles.active 属性就能激活 Profile,任意设置配置属性的方式都能用于设置这个值。 比如 application.properties 中设置 spring.profiles.active=production



发布于: 2020 年 11 月 16 日阅读数: 24
用户头像

引花眠

关注

还未添加个人签名 2018.06.11 加入

还未添加个人简介

评论

发布
暂无评论
SpringBoot系列(5)- 自定义配置