Boot 常用Yml配置
注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue 发布时间:2019/6/3 13:11:59
一、基本操作
第一节我们说到,我们会把配置文件“application.properties”改名成.yml文件,因为.yml是一种更方便的配置办法,我们现在就来操作。鼠标放在右键“application.properties”文件上,点击鼠标右键,选择“Refactor”(重构)-->“Rename”(重命名),在弹出的对话框中,把文件名改为application.yml 即可:
大家已经注意到了,在IntelliJ IDEA 中,要想对包括类文件、模板文件、静态文件在内的所有文件,改名都没有直接的一级选项,只有在“Refactor”(重构)里面,才能重命名。
在改成application.yml 后,重新清理旧包、生成新包时会下载Maven的一些依赖,不要担心,这也是一次性的。
我们打开application.yml文件,发现是空的,因为它是从空的application.properties文件转来的。我们先在这里进行一些简单的配置,在文件上面加上如下代码:
- server:
- port: 8080 #端口
这里是定义一个server大节,然后再在这个大节下面定义port小节,这个小节的作用是定义预览的端口,是“8080”,你也可以改成其他的端口。后面的文字“#端口”是注释文字,yml文件的注释文字放在#后面。
值得注意的是,每个yml属性名冒号,和属性值之间,都有一个英文空格,比如“port: 8080”,注意,“port:”后面是有一个英文空格的。如果你把这个空格去掉,编辑器里“port”字样的颜色就会改变,就不再能识别成属性名了。
二、本地Tomcat配置和自定义配置
我们继续对server大节进行配置。在server大节的下面,添加一个和port平行的兄弟节点tomcat:
- tomcat:
- uri-encoding: utf-8 #定义默认的字符集
- protocol-header: x-forwarded-proto #设定Header包含的协议,通常是 X-Forwarded-Proto,如果另一个属性remoteIpHeader有值,则将设置为RemoteIpValve.
- remote-ip-header: x-forwarded-for #设定remote IP的header,如果remoteIpHeader有值,则设置为RemoteIpValve
- basedir: /usr/local/yealink/data/version-manager #设定Tomcat的base 目录,如果没有指定则使用临时目录。
几个属性的作用已经用注释的方式说明了,因为spring boot项目默认引用了内置的tomcat,所以,在这里,我们是对这个内置的tomcat进行配置。可能你还不太明白为什么强调这一点,稍后说明。
接下来,我们再加一个节点,是和上面的port和tomcat平行的:
- servlet:
- context-path: /jiaocheng
“context-path”这个节点的作用是配置程序的一级目录,一般设置为包名,加了这个节点后,就必须用如下地址访问我们在第一节定义的Hello World路径了:
- http://localhost:8080/jiaocheng/hello
为什么要配置这个路径呢?细心的朋友会发现,第一节最后我们提到,Tomcat会对该War包进行解压,然后,以包名为jiaocheng为例,你就可以通过如下地址,从互联网的任何一个地方访问你的程序:
- http://www.xxx.com/jiaocheng
如果这里我们不设置“context-path: /jiaocheng”这个节点,本地的路径就会和服务器上的路径不一致,就会产生许多因为路径引起的404错误。为什么会这样?
我们先看看,配置完的server节点全部属性如下:
- server:
- port: 8080 #端口
- tomcat:
- uri-encoding: utf-8 #定义默认的字符集
- protocol-header: x-forwarded-proto #设定Header包含的协议
- remote-ip-header: x-forwarded-for #设定remote IP的header
- basedir: /usr/local/yealink/data/version-manager #设定Tomcat的base目录,如果没有指定则使用临时目录。
- servlet:
- context-path: /jiaocheng
但是,“server”节点的配置只在本地生效!这里配置的port、uri-encoding、context-path等属性,都只是针对本地的,传到服务器上都没有了。但是,这些配置在服务器上仍然有用。
这些属性还有什么用呢?可以在代码中直接取它们的值!比如,可以通过如下的代码取得“context-path”的值:
- @Value("${server.servlet.context-path}")
- private String path;
@Value注解必须引用“org.springframework.beans.factory.annotation.Value”包(上一节“Boot IDEA外观和Yml配置”中说明了导入包的快捷键Alt+Enter,以后导包问题不再赘述)。这里的变量“path”必须作为类的成员变量,而不能作为方法的局部变量。
通过这个独特的功能,我们就可以定义一些常见的、但每个专题都不一样的属性值,比如我们在“servlet”节下面加入如下配置:
- special-name: w3xue的 Spring Boot 教程
然后,我们回到MainRestController类,加入如下代码:
- @Value("${server.servlet.special-name}")
- private String sSpecialName;
将hello路径的函数,加上引用这个变量的代码:
- @RequestMapping(value="/hello",method= RequestMethod.GET)
- public String sayHello(){ return "Hello World,"+sSpecialName; }
在浏览器访问“http://localhost:8080/jiaocheng/hello”就会打印出如下内容,这个内容不管是本地,还是服务器,都是一样可以显示的:
- Hello World,w3xue的 Spring Boot 教程
三、配置大全
上面说的是配置的一些基本知识,目前已经够用了,接下来的教程里,还需要更多的配置,但我们先不着急一一说明,到用的时候,自然会引入。
下面的内容是为了你们日后查询方便,整理的配置属性大全,你可以随时回来查阅。
注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue 发布时间:2019/6/3 13:11:59