简介
前面几章简单介绍了Spring Boot的基本使用,利用前面几章的内容已经可以进行简单应用的开发了.不过,我们有必要去更深入的了解Spring Boot的特性和内容,以帮助我们解决那些看起来比较困难的问题.
本章介绍一下Spring Boot的配置内容和Profiles的使用.
配置
Spring Boot允许使用配置文件来管理我们项目的配置.将某些配置写在配置文件的好处咱就不说了.
在Spring Boot中,我们可以使用`.properties`和`.yml`文件,也可以使用`环境变量`和`命令行参数`来管理我们的配置.
配置优先级以及覆盖
Spring Boot通过`PropertySource`来管理各种配置,其优先级如下:
-
命令行参数
-
java:comp/env的JNDI属性
-
java系统属性(System.getProperties())
-
操作系统环境变量
-
random.\*产生的`RandomValuePropertySource` (在配置文件中生成随机数)
-
在打包的jar外的应用程序配置文件(application.properties,包含YAML和profile变量)
-
在打包的jar内的应用程序配置文件(application.properties,包含YAML和profile变量)
-
在@Configuration类上的@PropertySource注解
-
默认属性(使用SpringApplication.setDefaultProperties指定)
从上到下,优先级依次降低,并且优先级低的会被优先级高的覆盖掉.也就是说,如果我们在使用命令行参数时制定了一个原本在application.properties文件中制定的参数,那么该值则会使用命令行参数时制定的值.
以此类推.
`.properties`和`.yml`文件
在使用这两种配置文件管理我们的配置时,我们可以直接在代码中使用`@Value`注解来注入我们的配置,也可以通过`@ConfigurationProperties`注解,将我们的配置直接绑定到一个Java Class中,
通过`@AutoWired`注入这个Java Class来使用.
-
配置文件
-
使用`@Value`
-
使用`@ConfigurationProperties`
-
测试
-
使用`命令行参数`
先来创建一个Controller
-
默认情况
在默认情况下`curl http://localhost:8080/settings`或者直接在浏览器调用`http://localhost:8080/settings` 会返回`阳光如初.`.
-
使用`命令行参数`输出
好吧,现在来测一下使用`命令行参数`指定`veryjava.name`会得到什么样的结果.
使用`mvn package -Dmaven.test.skip` 打成jar包后,再使用`java -jar settings-0.0.1-SNAPSHOT.jar --veryjava.name=sunshineasbefore.`运行该项目.
再次调用`curl http://localhost:8080/settings`或者直接在浏览器调用`http://localhost:8080/settings`,返回`sunshineasbefore.`
这个地方充分说明了Spring Boot关于配置项的优先级覆盖问题.
进阶
基本的配置项说完了,再来看看Spring Boot支持的其他高级配置特性.
-
配置随机值
`RandomValuePropertySource` 可以让我们在配置文件中直接产生随机值.这些随机值包含整数,long或字符串类型
几种生成随机数的例子:
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
-
配置项
-
新建一个My类
-
修改VeryJavaProperties类
新增 `private My my;` 字段和其getter/setter方法.
-
测试
-
加载application属性文件
默认情况下 Spring Boot加载`src/main/resources/application.properties`文件,当然我们可以通过命令行指定配置文件的位置或名称.
-
指定名称
java -jar myproject.jar --spring.config.name=myproject
-
指定位置
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
-
属性占位符/引用其他属性值
当然必须引用先前定义的,而不是之后定义的.
Over.
类型安全的配置属性
我们来重新详细介绍一下`@ConfigurationProperties`注解的使用.
Java是一个强类型安全的语言.每一个变量必须有它特定的类型,这样也保证了Java语言本身的安全性.
类型安全的配置属性,也就是说给配置文件里的每一个配置项都加上类型,比如String.
几个重点:
-
在使用`@ConfigurationProperties`注解时我们可以用`prefix`来指定要加载的配置项的前缀.
-
配置项的名称和类字段的对应关系:
eg:
`private String firstName;`字段
配置文件配置项:
-
person.firstName
-
person.first-name
-
PERSON_FIRST_NAME
-
属性值校验
使用`SR-303 javax.validation约束注解`
eg:
使用`@NotNull`注解
代码
本文限于篇幅原因,不能展示所有的代码,如果想要完整的代码示例,请移步 https://github.com/sunshineasbefore/veryjava.spring.boot/tree/master/settings
支持请点赞,不喜勿喷.
每天一点点,成长多一点.
本文详细介绍SpringBoot中的配置管理方式,包括使用.properties和.yml文件、环境变量及命令行参数等,并探讨配置优先级与覆盖机制。
1万+

被折叠的 条评论
为什么被折叠?



