![详解Spring Boot:从入门到企业级开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/831/47379831/b_47379831.jpg)
2.4 Spring Boot的配置文件
Spring Boot支持两种格式的全局配置文件:属性文件格式和YAML格式,配置文件用于对Spring Boot项目的默认配置进行微调,配置文件放在src/main/resources目录下或者类路径的/config目录下。
由图2-1可以看到,在src/main/resources目录下已经有了一个application.properties文件,如果需要使用YAML格式,则可以在该目录下新建一个application.yml文件(也可以使用后缀.yaml)。不建议同时使用两种格式的配置文件。
Spring Boot使用SnakeYAML库来解析.yml格式的文件,只要在类路径上有SnakeYAML库,SpringApplication类就会自动支持以YAML格式替代属性文件格式。spring-boot-starter会自动提供SnakeYAML,所以无须我们配置该库。
在整个应用程序中,应该始终坚持使用同一种格式的配置文件,如果在相同的位置同时存在.properties格式和.yml格式的配置文件,那么优先选择.properties格式的配置文件。
2.4.1 YAML语法
YAML是JSON的超集,其全称是YAML Ain't Markup Language(YAML不是标记语言),在开发这种语言时,YAML的意思其实是:Yet Another Markup Language(仍是一种标记语言),但为了强调这种语言是以数据为中心,而不是以标记语言为重点,所以用反向缩略语重命名。
YAML是一种数据序列化语言,其通过最小化结构字符的数量,并允许数据以自然和有意义的方式显示自己,从而实现了独特的简洁性。例如,缩进可以用于结构,冒号可以分隔键值对,破折号用于创建“项目符号”列表。
数据结构有无数种风格,但它们都可以用三种基本原语来充分表示:映射(哈希/字典)、序列(数组/列表)和标量(字符串/数字)。YAML利用了这些原语,并添加了一个简单的类型系统和别名机制,以形成用于序列化任何本机数据结构的完整语言。
1.基本语法
YAML采用树状结构,其基本语法格式要求如下:
● 对英文大小写敏感。
● 使用缩进表示层级关系。
● 缩进不允许使用Tab键,只允许使用空格。
● 缩进的空格数目不重要,只要相同层级的元素左对齐即可。
● 注释以#开头,必须用空格字符与其他标记分隔。
2.数据类型
YAML支持以下几种数据类型。
● 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)。
● 数组:一组按次序排列的值,又称为序列(sequence)/列表(list)。
● 标量(scalar):单个的、不可再分的值。
3.YAML对象
对象键值对使用冒号来分隔键和值,要注意的是,冒号后面一定要跟一个空格,如port:9000。可以使用缩进来表示层级关系,例如:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_50_1.jpg?sign=1739518192-DmlDXrTlyaRpGifuVM1PwBtM52waai7i-0-59e02118c6c154fd86938759f1e676c7)
也可以使用key:{key1:value1,key2:value2,...}这种形式来表示层级关系。
对于较为复杂的对象格式,可以使用一个问号加一个空格表示一个复杂的key,一个冒号加一个空格代表一个value,例如:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_50_2.jpg?sign=1739518192-t1zJyU5Bdx59gMcYsLJhoYaZI0kApCiP-0-861b81cf00fa5d29e2712bb0abdcf519)
意思是对象的属性是一个数组[complexkey1,complexkey2],对应的值也是一个数组[complexvalue1,complexvalue2]。
4.YAML数组
以短横线(-)开头的行,表示构成一个数组,例如:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_50_3.jpg?sign=1739518192-18hM2iR5UV2RIpJCCR1gWFDnZV3RYtuq-0-7c5f8b870dffd976f6e8d38459ae99ee)
YAML支持多维数组,可以使用行内表示,例如:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_50_4.jpg?sign=1739518192-DkMewa2TiqxVwTFypdtEDTEKhlvZgdts-0-3a54983a1250cdb38c47919073593cc1)
若数据结构的子成员是一个数组,则可以在该项下面缩进一个空格,例如:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_50_5.jpg?sign=1739518192-YRrpPWNLe6hVPbXflpkgCOgbnpUTjAhV-0-b1489100a7af2f4e92b017cb41ef3648)
我们看一个相对复杂的例子,如下所示:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_51_1.jpg?sign=1739518192-y0Nv4huQ9NgyCuZcuGzIXfrZPSJ4uHf4-0-5ade831b95e7135bdbe6c3a4528f8bf4)
意思是companies属性是一个数组,每一个数组元素又都是由id、name、price三个属性组成的。
数组也可以使用流式(flow)的方式来表示:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_51_2.jpg?sign=1739518192-rLQqswEKp5U4YqRxXaBY4v3bl5MkZDFg-0-ce8edb3ed577bfd668ce0f2b90aca6fb)
5.复合结构
数组和对象可以构成复合结构,例如:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_51_3.jpg?sign=1739518192-f2PP7bnPNPal77Oq5xM6F72p88KPC4Bb-0-a4d37372aa5809dd9e67acb9c2a5ded9)
转换为JSON格式为:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_51_4.jpg?sign=1739518192-w8svoGwIjexcOFhfaX2Ag0Sr9BQdmAOt-0-5a4e8efd067c9f6f7cd2346c44922128)
6.标量
标量是最基本的、不可再分的值,包括:
● 字符串
● 布尔值
● 整数
● 浮点数
● Null
● 时间
● 日期
我们看下面的示例:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_52_1.jpg?sign=1739518192-jwByK2zyNFIzPraPPd832swuKBzKjzoh-0-c85f1a385d1713658b279c2d3f3a4bc7)
7.引用
&锚点和*别名可以用来构建引用,例如:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_52_2.jpg?sign=1739518192-ibjmTWQxepAPkxbVrRTiaQuRSyiaZDre-0-0c9fa3647d7e7d85561d43028e4f3fc7)
相当于:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_52_3.jpg?sign=1739518192-5PMrYT45kiW7iLtyK5HB8Vxwp9X101j7-0-b9baf66981c836ebd144a29f0e7d26e3)
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_53_1.jpg?sign=1739518192-7tEh6mFCWb9PFcjAmu2HVWmzTL7MwuWS-0-8d9cab687dc3555d87fd66dbcf96aa0d)
&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。
下面是另一个例子:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_53_2.jpg?sign=1739518192-6cBhczhiF39nSzzz2nSkugkhbJSl7f7A-0-8de1ddc15d8dc511aad70697d7f9403d)
转换为JSON格式为:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_53_3.jpg?sign=1739518192-UvG7mhp4P6iNvXfQo96Sqo9ZM0bJjII6-0-3db7d1a437189c8dc1a5ab3ff886ad4f)
2.4.2 配置嵌入式服务器
Spring Boot默认使用Tomcat作为嵌入式Web服务器,监听8080端口,以“/”作为上下文根,在个人开发时,一般不需要修改这个默认配置,但在团队协作开发时(如前后端分离的项目开发),或者需要同时运行多个Web应用程序时,又或者在产品环境下,就需要对默认的嵌入式Web服务器进行配置,修改监听的端口或者上下文路径,端口号是通过server.port属性来设置的,上下文路径是通过server.servlet.context-path属性来设置的。
在application.properties文件中的配置如下:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_53_4.jpg?sign=1739518192-SQUiPZfbuldxXsD4lEGK8ciGva8E6rnn-0-c56b93b74652d557fc4d3b3d166a5dcd)
在application.yml文件中的配置如下:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_53_5.jpg?sign=1739518192-4MlOx6Lf7TOB8fqE8aErD9mfRgBlYtSp-0-9743a61ac91de8de0a2f8082d7015e4b)
运行项目,在控制台窗口中可以看到如下的输出信息:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_53_6.jpg?sign=1739518192-30tWPG2GMtTZr4Daz1Pxep3rqPUingbU-0-ec7b822f5276cccf06280d8a28be6135)
此时访问项目,端口号要使用80(HTTP协议默认端口号就是80,因此可以不用显式给出),而不是使用8080了,即http://localhost/api。
提示:读者在学习的时候,在项目中可以同时建立application.properties文件和application.yml文件,但为了避免冲突,建议在使用其中一个配置文件时,将另一个配置文件的后缀名修改一下(如改为application.yml2)以避免把自己都搞糊涂了。
1.配置HTTPS服务
我们除希望服务器提供端口号外,还希望服务器提供HTTPS服务。HTTPS加密每个数据包并以安全的方式进行传输,保护敏感数据免受窃听或者黑客的攻击。Web应用程序需要安装SSL证书来实现HTTPS,互联网上受信任的证书通常是向CA申请的证书,在学习阶段,我们可以使用JDK自带的keytool工具生成自签名证书,步骤如下。
第一步:打开命令提示符窗口,执行下面的命令。
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_54_2.jpg?sign=1739518192-FWirDQcvMgvOlXYUH46Ef2ZogoXBZ1HD-0-1e039d9867ae56c6805f44f5848f4a7c)
按下回车键后,会让你输入密钥库的口令(密码),此时应记住输入的口令,因为后面会用到,笔者输入的口令是:12345678。接下来会询问一些与名字、组织机构、所在地区等相关的信息。
第二步:将生成的server.keystore文件复制到项目的src/main/resources目录下。
第三步:在application.properties文件中配置嵌入式服务器的HTTPS服务,代码如下所示。
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_54_3.jpg?sign=1739518192-zBdnZR4sUJe8SXJ2bGDg8S8ui37GLYDj-0-c064f4afe5b8c89d8aeea94eb46d838d)
如果使用application.yml,则配置如下所示:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_54_4.jpg?sign=1739518192-2AelQ4mdnqVigwDjeBwu69diCWZNil3J-0-758533459ea95e865e61efe3da85d1d3)
运行项目,在Chrome浏览器中访问URL:https://localhost:8443/,出现如图2-8所示的提示。
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_55_1.jpg?sign=1739518192-fyWrVdefCqKLr5cH6zPgzzxWqApKVWxr-0-1efabd1f1bd9bd4ee2d5b80111410b51)
图2-8 提示证书不安全
我们访问的是localhost,无须担心证书的问题。单击“高级”按钮,出现如图2-9所示的高级页面。
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_55_2.jpg?sign=1739518192-tr2a1rsJBoEi9GsNQudl7syS1hRd5NFW-0-fa866c3fca7c6d52aafe84d111fa2960)
图2-9 高级页面
单击“继续前往localhost(不安全)”链接,即可看到服务器发送的响应内容:Hello。
2.更换默认的Tomcat服务器
更换默认的Tomcat服务器不是在Spring Boot的配置文件中进行的,而是在POM文件中引入其他的Web服务器依赖,同时从spring-boot-starter-web依赖中排除spring-boot-starter-tomcat依赖。
修改POM文件,将默认的Tomcat服务器替换为Jetty服务器,代码如下所示:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_55_3.jpg?sign=1739518192-8EWiYxqtP1rImFYTiwjkfDtjpbPHdvtS-0-1601b8e6897001338c2e9158641b3b60)
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_56_1.jpg?sign=1739518192-8Iq0sIBiUE2VDuz1u101YBb2PGoaejeN-0-46577f4d65333aab3408be4dfed11c8d)
更新依赖后,运行项目,在控制台窗口中可以看到如下的输出信息:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_56_2.jpg?sign=1739518192-4kNRLgM9kNm3tOGPkSgmn1hgCojRuMkq-0-0adba0e2ddf965d6c9d574517e1132d4)
2.4.3 关闭启动时的Banner
在Spring Boot项目启动时,会有一个由字符组成的Banner,如图2-10所示。
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_56_3.jpg?sign=1739518192-w22euRzu5aNXEkPqZiB82Uhw6trCsCy2-0-5e7b1b27c653825fea4723853a0e3d69)
图2-10 Spring Boot项目启动时的Banner
如果要关闭Banner的显示,则可以在application.properties文件中将spring.main.banner-mode的值设置为off,如下所示:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_56_4.jpg?sign=1739518192-neujnuSFODc5HF87VzcKNBwf4vi4G1qV-0-b628afe33b9821e7a7ffb2a18994fcfb)
在application.yml文件中的设置如下:
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_56_5.jpg?sign=1739518192-ATR501qiMHI4aEcXnO4Pwhw0bRHfCxwX-0-295f8daa39a6078de444f6eb9a843ba5)
再次启动项目,可以发现Banner没有了。
2.4.4 配置日志
Spring Boot默认使用的日志组件是logback,该组件是由log4j的创始人设计的,其性能比log4j更为优异。Spring Boot默认已经集成了logback组件,因此不需要为使用logback而额外添加Maven依赖。
Spring Boot默认使用INFO级别将日志输出到控制台。之前我们在运行程序时,已经看到了Spring Boot的INFO级别的日志输出,如图2-11所示。
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_56_6.jpg?sign=1739518192-VGQ2HGWLEnomemvIKv6K5vReqtu3O5vZ-0-9700892fea29890e610a774e302c78cf)
图2-11 Spring Boot应用程序启动时默认的日志输出
可以看到默认输出的日志记录每一条都包含了以下7个部分的内容。
(1)日期时间
日志记录的时间,精确到毫秒。
(2)日志级别
日志级别,由低到高依次为:TRACE、DEBUG、INFO、WARN、ERROR和FATAL。
(3)进程ID
启动的应用程序的进程ID。
(4)分隔符
即每条日志记录中的“---”,用于标识实际日志的开始。
(5)线程名
方括号括起来的部分,产生日志事件的线程的名字。
(6)Logger名
通常使用源代码的完整类名。
(7)日志内容
冒号后的部分,详细的日志消息。
要修改日志的输出格式,只需要在src/main/resources目录下创建名为logback-spring.xml或者logback.xml的文件即可,Spring Boot会自动读取该文件中的日志配置内容。如果要使用自定义文件名,则需要在Spring Boot的配置文件中通过logging.config属性给出自定义的文件名。
接下来在src/main/resources目录下新建logback-spring.xml文件,内容如例2-2所示。
例2-2 logback-spring.xml
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_57_1.jpg?sign=1739518192-T7xYZ7Fp8l4A0Iepa85XYfpFSr9mHAqB-0-b10c64f15f08ee8983f286a2ea09d76e)
启动应用程序,可以在控制台窗口中看到如图2-12所示的日志输出内容。
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_58_1.jpg?sign=1739518192-L7akZkYbuMgXHiODdYcTbH61xyLRX1nG-0-28b4bae2d6a4fd23ee24bcff1074f75a)
图2-12 自定义日志输出格式后的日志输出
读者可以将图2-12与图2-11的默认日志输出比较一下。
如果需要将日志信息输出到文件中,则可以按照例2-3所示的内容来配置日志输出。
例2-3 logback-spring.xml
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_58_2.jpg?sign=1739518192-F3RVuBUW3OcACwBL6NaKmrPAR4sZRtyz-0-f57029881172ebf6120bb7fb5196636e)
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_59_1.jpg?sign=1739518192-FbroavgVJroxYJUwTL3sQXmkFjtmxR5B-0-bd0b51651d700d7955e2edd89beb00f7)
启动应用程序,将会在F盘的logs目录下看到一个形如sys-2022-03-22-0.log的文件,文件内容就是输出的日志信息。
2.4.5 使用Profile进行配置
在实际项目研发过程中,在开发阶段和产品发布阶段所需要的配置信息往往是不同的,即当应用程序部署到不同的运行环境时,一些配置细节也会有所不同。例如,数据库连接的配置,在开发环境和生产环境下通常是不同的。
Spring Boot支持基于Profile的配置,Profile是一种条件化配置,基于运行时激活的Profile,会使用或者忽略不同的Bean或配置类。
在生产环境中,只关注WARN或更高级别的日志,且把日志信息写到文件中即可。而在开发环境下,则输出DEBUG或更高级别的日志,且在控制台中输出即可。下面我们分别使用属性文件格式和YAML格式来进行多环境的配置。在此之前,先把2.4.4节编写的logback-spring.xml文件进行改名,以免影响到下面的配置。
提示:除非有特殊需要,否则不建议读者配置DEBUG级别的日志,因为这样会输出很多日志信息,增加项目启动时间,从而影响开发效率。这里将日志设置为DEBUG级别,只是为了演示多环境的配置。
1.使用属性文件格式配置多环境
在src/main/resources目录下新建两个属性文件,分别为application-dev.properties和application-prod.properties,前者是用于开发环境的配置文件,后者是用于生成环境的配置文件。
在开发环境下,日志以DEBUG级别或更高级别输出到控制台中,application-dev.properties文件的代码如例2-4所示。
例2-4 application-dev.properties
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_59_3.jpg?sign=1739518192-J9JzJ3k3EeMSTpL34RQW48hVjFZ8Hrom-0-2410cf86bdc0f0b9bdc2d7d07e83ba13)
在生产环境下,将日志级别设置为WRAN,并将日志写入到文件中。application-prod.properties文件的代码如例2-5所示。
例2-5 application-prod.properties
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_59_4.jpg?sign=1739518192-5JSJ0fs948vyS4Zpf55X9Mh9IVUTT5Eo-0-86f2d17b665c18c5250b6102e6e7fe45)
logging.file.name属性用于指定日志文件名,日志文件名可以是精确的位置,也可以是相对于当前目录的位置。与这个属性类似的是logging.file.path属性,该属性用于指定日志文件的位置,例如:/var/log。要注意的是,这两个属性不能同时使用,如果同时使用,则默认只有logging.file.name属性生效。如果只配置了logging.file.path属性,则会在该属性指定的目录下生成默认的spring.log文件。
另外要注意的是,之所以要将2.4.4节编写的logback-spring.xml文件进行改名,是因为如果提供了该文件,那么对于日志的配置将以该文件为准,这样就会影响到这一节的实例测试。
接下来在主配置文件application.properties中设置spring.profiles.active属性的值,在值为dev时将加载application-dev.properties中的配置项,在值为prod时将加载application-prod.properties中的配置项。
application.properties的代码如例2-6所示。
例2-6 application.properties
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_60_1.jpg?sign=1739518192-rcLzkMpYAaKZ9PlMz0WxfynoM3H8jx3w-0-a5641163520dc56d5361e580df2c9206)
运行程序,将会在控制台窗口中看到很多DEBUG级别的日志信息。
将spring.profiles.active属性的值设置为prod,再次运行程序,会在F盘下看到生成的demo.log日志文件,但是该文件内容是空的,因为在项目启动时,并未有WRAN级别的日志信息产生。如果想让demo.log文件中有内容,则可以在application-prod.properties中将logging.level.root属性的值设置为INFO,这个就交由读者自行完成了。
提示:对于并不特定于某个Profile的属性或者需要为属性设置默认值,可以放在主配置文件application.properties中。
2.使用YAML文件格式配置多环境
使用YAML格式来配置多环境,与使用属性文件格式配置多环境是一样的,只需要在src/main/resources目录下创建application-{profile}.yml这样的YAML文件即可。
在src/main/resources目录下新建application-dev.yml和application-prod.yml两个文件,文件内容分别如例2-7和例2-8所示。
例2-7 application-dev.yml
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_60_3.jpg?sign=1739518192-daah9TumO1w5D8F6CiHQGXWkdkVpaGCx-0-b8121e3de533c5270f329cf2f8287478)
例2-8 application-prod.yml
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_60_4.jpg?sign=1739518192-jebBLLxVEnF6mdYilfnyfnSVu0JzBDmE-0-a94d62ef8d3c140373e543034fcbbb4b)
主配置文件application.yml的代码如例2-9所示。
例2-9 application.yml
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_61_1.jpg?sign=1739518192-Br3tGRkz1Y4Op2rwHY4fg3Frkc9A5uDR-0-cc425e58c96ebeabf7dcafbc624f2574)
3.多环境下的日志输出
对于日志而言,如果需要详细配置日志的输出格式与输出方式,那么需要在logback本身的配置文件中进行配置。下面我们结合Profile,对logback的日志输出进行多环境配置。
修改logback-spring.xml,将2.4.4节的控制台输出配置和文件输出配置结合在一个文件中,代码如例2-10所示。
例2-10 logback-spring.xml
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_61_2.jpg?sign=1739518192-SsZKrl2kWYKyPsDwVK8c2HyyVv2fo8So-0-7ec3c9c8b59c44432773d86eaaa96652)
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_62_1.jpg?sign=1739518192-d8Zw3CCIvTPnW2Z7RsChnBICMcXo9lW4-0-ce26b82d91869b17a4a60c028c54d70d)
之后就可以在主配置文件application.yml中通过spring.profiles.active属性指定使用哪一个Profile配置,如例2-11所示。
例2-11 application.yml
![](https://epubservercos.yuewen.com/450A7A/26763867809480806/epubprivate/OEBPS/Images/43984_63_1.jpg?sign=1739518192-Af2eDbriRogPc0htzRagLgIWtcnHnXYs-0-7c858907fe6fd7db94b97fbeafe35bf4)
若修改active属性的值为prod,就可切换日志输出到文件中。
提示:为避免影响测试结果,请读者将application-dev.yml和application-prod.yml两个文件改名或者删除。