SpringBoot提倡的是一种“零配置”的设计框架,所以提供有许多默认的配置项。如:SpringBoot项目默认运行的8080端口就是一种默认配置。如果开发者需要修改SpringBoot的这种默认配置,可以在项目所在的CLASSPATH目录下添加application.properties或者application.YAML配置文件。
Spring官方推荐使用application.YAML来配置SpringBoot框架。如果项目中同时存在application.YAML与application.properties配置文件并且配置冲突,将以application.properties文件中的配置为参考。在本书后面讲解的过程中,如无意外,将全部使用application.YAML对SpringBoot项目的配置。
创建一个SpringBoot工程【boot_configure】,并在当前的工程目录下的src/main/resources/application.properties,如图2.1所示。
图2.1
注意:配置文件名称要相同
SpringBoot开发框架对一些结构(子包扫描)和配置文件application.properties做出了限定,这样开发者在使用框架开发的时候可以减少配置。如果开发者定义的配置文件名称不是application.properties,那么SpringBoot将无法加载。
然后配置项目运行的端口8081(会覆盖默认的端口8080),如图2.2所示。
图2.2
修改完成后重新启动SpringBoot项目,可以看到提示信息:Tomcatinitializedwithport(s):8081(http),如图2.3所示,表示当前的项目可以直接运行在8081端口上。
图2.3
常见的application.properties的配置如下:
server.servlet.session.cookie.comment:session-cookie的注释。
server.servlet.session.cookie.domain=/:指定在其中可见此cookie的域名。默认情况下,cookie只返回给发送它们的服务器。因此,设置域名将使Cookie可用于同一域名下的不同服务器。
server.servlet.session.cookie.max-age=10m:cookie的最大有效时间(10分钟)指定cookie在用户计算机中存储的时间,以秒为单位。如果未设置,则退出Web浏览器时将删除cookie。
server.servlet.session.cookie.http-only=true:如果设置为true,则J avascript无法在客户端读取此cookie,从而可以防止某些跨站点脚本攻击。
server.servlet.session.cookie.name=jsessionId:session-cookie的名称。
server.servlet.session.cookie.path=/:path路径地址,如果要限制cooki e在服务器上的某个路径(及其子路径)中可用,请使用此方法。
server.servlet.session.cookie.secure=true:secureflag是否开启,如果设置为true,则仅在使用安全协议(HTTPS或SSL)时将cookie从浏览器发送到服务器。默认为false。
server.servlet.session.persistent=falsesession重启后是否还有效。
server.servlet.session.timeout=10msession超时时间。
server.servlet.session.store-dir=/session存放目录。
在SpringBoot中可以使用的配置文件类型有两种:application.properties和application.YAML,这两种配置文件都可以实现对SpringBoot环境的修改。
k:(空格)v:表示一对键值对(空格必须有)
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
属性和值也是大小写敏感
值的写法
字面量:普通的值(数字,字符串,布尔)
测试获取配置的数据:
对象,Map(属性和值)(键值对)写法如下所示:
创建实体类封装成一个对象:
测试获取配置的数据:
数组(List,Set)用“-”值表示数组中的一个元素写法如下所示:
实体类:
@ConfigurationProperties注解描述:
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置绑定prefix="person":配置文件中哪个下面的所有属性一一映射测试获取配置的数据。
注解@ConfigurationProperties与@Value注解都能获取到值,之间的区别见表2.1。
表2.1 @ ConfigurationProperties与@ value功能
下面将application.properties配置替换为application.YAML,并设置端口8082,如图2.4所示。
图2.4
修改完成后重新启动SpringBoot项目,并将之前编写的application.properties注释掉,可以看到提示信息:Tomcatinitializedwithport(s):8082(http),如图2.5所示,表示当前的项目可以直接运行在8082端口上。
图2.5
此时实现了与之前完全相同的配置设置服务请求的端口,可以发现使用application.YAML配置文件的结构要比使用application.properties更加清晰。
提示:关于YAML配置文件描述。
YAML实际上是YAML(Yet Another Markup Languange,一种标记语言)文件,这是一种结构化的数据文件,大量应用在各种开源项目之中,如ApacheStorm。
Spring官方推荐使用application.YAML来SpringBoot或SpringCloud框架的配置定义。如果项目中同时存在application.YAML与application.properties配置文件并且配置冲突,将以application.properties文件中的配置为参考。推荐全部使用application.YAML对Spring Boot项目的配置。
SpringBoot项目中同时存在application.properties和application.yml文件时,两个文件都有效,但是application.properties的优先级会比application.yml低,如在application.properties和application.yml中都配置了端口号,那么在请求的时候则以application.yml为准,如application.yml文件中没有配置,则以application.properties文件中的配置文件为准。
配置互补案例:
创建SpringBoot工程,并在resources目录下分别创建application.properties和application.yml文件。
application.properties文件编写端口号与自定义一个数据信息,代码如下所示:
application.yml文件编写端口号,代码如下所示:
在controller层编写一个,请求地址方法,代码如下所示:
如上控制层的请求方法,获取到了application.properties文件中自定义的一个值启动工程,在浏览器上输入地址http://localhost:8082/getString,结果如图2.6所示。
图2.6
如上执行结果,可以看出运行的端口号是8082端口,而8082端口在application.yml文件中配置的,可以看成application.yml要高于application.properties。而获取的lastName值是在application.properties文件定义的这样就形成了互补情况。