使用properties配置文件,以下两个属性的含义是更改访问端口为8081,而且加了一个contextPath,能够理解为在地址栏多加层地址。html
server.port=8081 server.context-path=/joyou
右键点击DemoApplication.java ——》Run As ——》Spring Boot App启动程序java
效果以下,首先从日志上看,端口已经变为8081web
浏览器访问效果以下。spring
补充:浏览器
属性文件是最多见的管理配置属性的方式。Spring Boot 提供的 SpringApplication 类会搜索并加载 application.properties 文件来获取配置属性值。SpringApplication 类会在下面位置搜索该文件:app
1.当前目录的/config子目录 dom
2.当前目录 spring-boot
3.classpath 中的/config包 测试
4.classpathspa
上面的顺序也表示了该位置上包含的属性文件的优先级。优先级按照从高到低的顺序排列。
能够经过spring.config.name这个key的配置属性来指定不一样的属性文件名称。也能够经过spring.config.location来添加额外的属性文件的搜索路径。
使用yml方式配置,在resources目录下创建application.yml文件。代码以下。
server: port: 8082 context-path: /joyou
效果与1.1相同。
补充:
相对于属性文件来讲,YAML 是一个更好的配置文件格式。当有前缀的状况下,使用.yml格式的配置文件更简单。
注意:使用.yml时,属性名的值和冒号中间必须有空格,如name: SpringBoot正确,SpringBoot就是错的。
YAML 在 Ruby on Rails 中获得了很好的应用。YAML是JSON的一个超集,也是一种方便的定义层次配置数据的格式。它的基本语法规则以下:
在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的约定,一般不须要咱们单独指定太多配置。
Spring Boot提供了一种优先级配置读取的机制来帮助咱们从这种困境中走出来。
Spring Boot 所提供的配置优先级顺序比较复杂。按照优先级从高到低的顺序,具体的列表(从高到低)以下所示。
若是Spring Boot在优先级更高的位置找到了配置,那么它就会忽略优先级低的配置。下面咱们简单讲讲这些优先级。Spring Boot 的这个配置优先级看似复杂,实际上是很合理的。命令行参数的优先级之因此被设置为最高,是由于能够方便咱们在测试或生产环境中快速地修改配置参数值,而不须要从新打包和部署应用。
SpringApplication 类默认会把以“--”开头的命令行参数转化成应用中可使用的配置参数,如 “--name=Alex” 会设置配置参数 “name” 的值为 “Alex”。
若是不须要这个功能,能够经过SpringApplication.setAddCommandLineProperties(false)
禁用解析命令行参数。
在实际开发过程当中,须要程序去配置文件中读取数据(如:URL,一些帐号密码等),因此就须要咱们来自定义属性,供程序读取。
首先在yml里自定一个属性,格式以下:
company: joyou employee: 二十岁之后
在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; @RestController public class HelloSpringBoot { @Value("${company}") private String company; @Value("${employee}") private String employee; @RequestMapping(value="/hello" , method = RequestMethod.GET) public String HelloSpring(){ return company+"====="+employee; } }
使用浏览器访问效果以下
yml文件中的配置
company: joyou employee: 二十岁之后 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; @RestController public class HelloSpringBoot { @Value("${All}") private String All; @RequestMapping(value="/hello" , method = RequestMethod.GET) public String HelloSpring(){ return All; } }
效果如图所示:
看了上面的例子后,会产生一个疑问,若是想一次调用10个、20个、50个属性值,难道我要在程序中注入50次值,使用50次注解吗? 为了解决这个疑问,Spring Boot 是这么解决的!
首先一个女孩,有身高、体重、罩杯等等属性,咱们能够这样来写!
Girl: High: 160CM Weight: 80KG CupSize: 30A
而后写一个类,这个类中提供Girl的属性,及Setter,Geter方法,须要使用两个注解:
而后在java程序中注入Gril类
package com.example.demo; @RestController public class HelloSpringBoot { @Autowired private Girl girl; @RequestMapping(value="/hello" , method = RequestMethod.GET) public String HelloSpring(){ return girl.toString(); } }
启动程序,刷新浏览器,效果以下:
面对生产与开发的不一样场景,对于一些属性的值可能不一样,难道我要在开发环境写的属性值,到生产环境在一个一个改吗?既然都这么说了,那固然是不用的了。咱们能够在开发时候就写好两套环境中对于属性值不一样需求的yml文件,而后在调用须要的yml文件就行了。
对于生产环境Girl的属性值以下:
对于开发环境Girl的属性值以下:
我只须要在application.yml中调用不一样的文件就行了,dev这个值是我开发和生产环境不一样yml文件的后缀名(注意看上面两个图文件的命名)
浏览器对应的结果
第二种环境对应的配置
浏览器对应的结果