课程表

Spring Boot课程

工具箱
速查手册

Boot 常用Yml配置

当前位置:免费教程 » Java相关 » Spring Boot
注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue  发布时间:2019/6/3 13:11:59

一、基本操作

第一节我们说到,我们会把配置文件“application.properties”改名成.yml文件,因为.yml是一种更方便的配置办法,我们现在就来操作。鼠标放在右键“application.properties”文件上,点击鼠标右键,选择“Refactor”(重构)-->“Rename”(重命名),在弹出的对话框中,把文件名改为application.yml 即可:

9.png

大家已经注意到了,在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 教程

三、配置大全

上面说的是配置的一些基本知识,目前已经够用了,接下来的教程里,还需要更多的配置,但我们先不着急一一说明,到用的时候,自然会引入。

下面的内容是为了你们日后查询方便,整理的配置属性大全,你可以随时回来查阅。

Boot 配置属性之mvc相关

Boot 配置属性之server

Boot 配置属性之DataSource

Boot 配置属性之NOSQL

Boot 配置属性之MQ

Boot 配置属性之Security

Boot 配置属性之Migration

Boot 配置属性之其他

注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue  发布时间:2019/6/3 13:11:59