当前位置:Gxlcms > PHP教程 > SpringBoot框架的知识点详解

SpringBoot框架的知识点详解

时间:2021-07-01 10:21:17 帮助过:63人阅读


摘要:1、Spring Boot的属性配置文件1.1 Spring Boot的属性配置文件的第一种形式使用properties配置文件,如下两个属性的含义是更改访问端口为8081,并且加了一个contextPath,可以理解为在地址栏多加层地址。server.port= ...

1、Spring Boot的属性配置文件

1.1 Spring Boot的属性配置文件的第一种形式

使用properties配置文件,如下两个属性的含义是更改访问端口为8081,并且加了一个contextPath,可以理解为在地址栏多加层地址。

server.port=8081
server.context-path=/joyou

右键点击DemoApplication.java ——》Run As ——》Spring Boot App启动程序

效果如下,首先从日志上看,端口已经变为8081

浏览器访问效果如下。

补充:

属性文件是最常见的管理配置属性的方式。Spring Boot 提供的 SpringApplication 类会搜索并加载 application.properties 文件来获取配置属性值。SpringApplication 类会在下面位置搜索该文件:

1.当前目录的/config子目录

2.当前目录

3.classpath 中的/config包

4.classpath

上面的顺序也表示了该位置上包含的属性文件的优先级。优先级按照从高到低的顺序排列。

可以通过spring.config.name这个key的配置属性来指定不同的属性文件名称。也可以通过spring.config.location来添加额外的属性文件的搜索路径

1.2 Spring Boot的属性配置文件的第二种形式(推荐)

使用yml方式配置,在resources目录下建立application.yml文件。代码如下。

server:  port: 8082  context-path: /joyou

效果与1.1相同。

补充:

相对于属性文件来说,YAML 是一个更好的配置文件格式。当有前缀的情况下,使用.yml格式的配置文件更简单。

注意:使用.yml时,属性名的值和冒号中间必须有空格,如name: SpringBoot正确,SpringBoot就是错的。

YAML 在 Ruby on Rails 中得到了很好的应用。YAML是JSON的一个超集,也是一种方便的定义层次配置数据的格式。它的基本语法规则如下:

  • 大小写敏感

  • 使用缩进表示层级关系

  • 缩进时不允许使用Tab键,只允许使用空格。

  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

  • # 表示注释,从这个字符一直到行尾,都会被解析器忽略。

1.3 application.properties里面到底有哪些key是可配置的?

在SpringBoot官网文档给出了详尽的配置以及说明。在Appendix A. Common application properties中:http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#common-application-properties

不完全统计,这个完整的application properties文件,有1183行。其中,属性key有950个。当你看到如此庞大的配置,你一定会被吓到。不过,在实际项目中,我们如果遵循Spring Boot的约定,通常不需要我们单独指定太多配置。

1.4 关于配置的优先级

Spring Boot提供了一种优先级配置读取的机制来帮助我们从这种困境中走出来。

Spring Boot 所提供的配置优先级顺序比较复杂。按照优先级从高到低的顺序,具体的列表(从高到低)如下所示。

  • 1.命令行参数(优先级最高)。

  • 2.通过 System.getProperties() 获取的 Java 系统参数。

  • 3.操作系统环境变量。

  • 4.从 java:comp/env 得到的 JNDI 属性。

  • 5.通过 RandomValuePropertySource 生成的random.*属性。

  • 6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件,通过spring.config.location参数指定

  • 7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件

  • 8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件

  • 9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件

  • 10.应用 Java配置类,包含@Configuration注解的 Java 类,通过@PropertySource注解声明的属性文件。

  • 11.通过SpringApplication.setDefaultProperties声明的默认属性。

如果Spring Boot在优先级更高的位置找到了配置,那么它就会忽略优先级低的配置。下面我们简单讲讲这些优先级。Spring Boot 的这个配置优先级看似复杂,其实是很合理的。命令行参数的优先级之所以被设置为最高,是因为可以方便我们在测试或生产环境中快速地修改配置参数值,而不需要重新打包和部署应用。

SpringApplication 类默认会把以“--”开头的命令行参数转化成应用中可以使用的配置参数,如 “--name=Alex” 会设置配置参数 “name” 的值为 “Alex”。

如果不需要这个功能,可以通过SpringApplication.setAddCommandLineProperties(false)

禁用解析命令行参数。

2、Spring Boot自定义属性

2.1、 第一个自定义属性的例子

在实际开发过程中,需要程序去配置文件中读取数据(如:URL,一些账号密码等),所以就需要我们来自定义属性,供程序读取。

首先在yml里自定一个属性,格式如下:

company: joyouemployee: 二十岁以后

在Java程序中取值,代码如下:

package com.example.demo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloSpringBoot {	
	@Value("${company}")
	private String company;	
	@Value("${employee}")
	private String employee;	

	@RequestMapping(value="/hello" , method = RequestMethod.GET)
	public String HelloSpring(){		
			return company+"====="+employee;
	}
}

使用浏览器访问效果如下

2.2 在自定义属性中调用其他属性

yml文件中的配置

company: joyouemployee: 二十岁以后   
All: "公司: ${company} , 员工: ${employee}"

在JAVA程序中注入All属性

package com.example.demo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloSpringBoot {	
	@Value("${All}")	private String All;	
	
	@RequestMapping(value="/hello" , method = RequestMethod.GET)	public String HelloSpring(){		
			return All;
	}
}

效果如图所示:

2.3 对于多个属性如何一次调用

人气教程排行