随着微服务的遍地开花,SpringBoot成了框架中的一颗耀眼明星。在还没有接触SpringBoot的一段时间内,一直认为Spring已经是和轻量级的框架, 即使编程过程中需要配置的内容比较繁琐,但也是使用一段时间后才会有的感触。就像ecplise的出现扼杀了netBeans,IDEA的出现也撼动了ecplise的霸主地位。新的事物或者方式方法出现体现了行业的活力,也使从业者能不断注入新鲜的血液,更能适行业的发展。以下是学习的过程中,其实写博客更像是一种学习笔记吧。
一、yml配置
Springboot是基于约定配置的,意思是有很多默认的配置,不需要咱们配置,但是如果如果想要自己配置时,SpringBoot的配置也相当灵活。除了熟悉的application.properties的配置,还提供了特有的YML配置application.yml(application.ymal)。无论是properties还是yml形式的配置其实都是基于键值对的形式,properties已经比较了解,下面来学习下yml配置。
普通数据:
格式: key: value
name: zhangsan
注意: value之前一个英文空格(英文)
对象数据:
格式:
key:
key1: value1
key2: value2
或者:key: {key1: value1,key2: value2}
person:
age: 23
name: zhangsan
或
person: {age: 23,name: zhangsan}
Map数据(与上一致)
key:
key1: value1
key2: value2
或者:key: {key1: value1,key2: value2}
注意:key1前面的空格个数不限定,在yml语法中,相同缩进代表同一个级别
person:
age: 24
name: lisi
或
person: {age: 24,name: lisi}
数组数据(List、Set):
key:
-value1
-value2
city:
- beijing
- wuhan
- guangzhou
- lasa
或者:
city: [beijing,wuhan,guangzhou,lasa]
集合中的对象
RuralLove:
- name: guangkun
-age: 45
-name: zhaosi
-age: 49
-name: wanglaoqi
-age: 50
注:value1与之间的 - 之间存在一个空格
以上呢就是ymal配合的内容,SpringBoot的官方文档上也有详细的默认配置说明:
https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#common-application-properties
二、配置文件和配置bean的映射
通过@Value注解将配置的文件的配置映射到管理的bean中,代码如下:
controller代码:
package cn.com.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 快速入门Controller
*/
@Controller
public class QuickStartController {
@Value("${person.name}")
private String name;
@Value("${person.age}")
private String age;
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "successful name=" +name + ",age= "+age;
}
}
application.yml配置:
修改默认端口和映射bean配置
server:
port: 8888
person:
name: zhaozilong
age: 48
启动类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 启动类
*/
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class);
}
}
运行结果:
内嵌的tomcat端口启动为8888
读取数据:
使用注解@ConfigurationProperties映射
controller代码:
package cn.com.controller;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ConfigurationProperties(prefix = "person")
public class QuickStart2Controller {
private String name;
private String age;
@RequestMapping("/quick2")
@ResponseBody
public String quick(){
return "successful2 name=" +name + ",age= "+age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
}
运行结果:也是成功的
从上面的例子中,我们可以看出,value的写法简单,不过仅支持单字段的映射,而ConfigurationProperties写法虽然繁琐,但是支持bean类的复杂类型封装,这也是二者最大的区别之一。