在SpringBoot中通过自定义参数可以实现很多重要的功能来达到解耦。
SpringBoot 自定义参数的类型有:
简单键值对,自定义对象,数组,List,Map,List<Map>
1. yml中添加自定义参数
# yml 自定义参数
cus:val: 雨泽bean:id: 2name: 雨昕arr1: 1, 3, 4arr2: [1, 3, 4]list:- lista- listbmap:a: mapab: mapblistmap:- a: ab: bc: c- d: de: ef: f
二、使用注解 @Value 来获取
获取原则(参数较少):
- 简单的键值对
- 不带[]的简单数组
2.1. 获取yml自定义参数中的键值对
方式一:使用注解 @Value 来获取
@Value("${cus.val}")
private String cusVal;注意:在${}中不能有空格。
2.2. 获取yml自定义参数中的数组
方式一:使用注解 @Value 来获取
@Value("${cus.arr1}")
private String cusVal;注意:在${}中不能有空格。对于没与使用”[]“括起来的数组可以使用方式一来获取,而使用了”[]“括起来的数组只能用方式二获取
三、配置文件中其他获取
配置文件中其他文件就不能使用简单的 @Value 注解来获取,需要使用如下方式获取。使用如下方式可获取:1.获取yml自定义参数中的键值对,对应上面配置文件的 val
2.获取yml自定义参数中的数组,对应上面配置文件的 arr1,arr2
3.获取yml自定义参数中的对象,对应上面配置文件的 bean 对象
4.获取yml自定义参数中的List,对应上面配置文件的 list
5.获取yml自定义参数中Map<Object,Object>,对应上面配置文件的 map
6.获取yml自定义参数中List<Map<Object,Object>>,对应上面配置文件的 listmap
第一步首先定义一个如下格式的类,具体格式:
(1)其中的成员变量名称需要与配置的自定义参数名称一致
(2)每个成员变量必须要有 get/set 方法
(3)该类使用注解 @Component 和 @ConfigurationProperties 修饰
package com.gblfy.mall.config;import com.gblfy.mall.form.UserLoginForm;
import com.gblfy.mall.pojo.User;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Map;@Component
@ConfigurationProperties(prefix = "cus")
@Data
public class YmlParamConfig {private String val;private UserLoginForm bean;private String[] arr1;private String[] arr2;private List<String> list;private Map<String, String> map;private List<Map<String, String>> listmap;
}
测试类:
package com.gblfy.mall.controller;import com.gblfy.mall.config.YmlParamConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@Slf4j
public class YMLController {@Autowiredprivate YmlParamConfig ymlParamConfig;@Value("${cus.val}")private String cusVal;@Value("${cus.arr1}")private String cusArrl;@GetMapping("/getYmlByValue")public void getYmlByValue() {log.info("获取yml自定义参数中的 简单键值对 cusVal={}", cusVal);log.info("获取yml自定义参数中的 不带[]的数组 cusArrl={}", cusArrl);}@GetMapping("/getYmlByconfigFile")public void getYmlByconfigFile() {log.info("获取yml自定义参数中的 键值对={}", ymlParamConfig.getVal());log.info("获取yml自定义参数中的 数组1 ={}", ymlParamConfig.getArr1());log.info("获取yml自定义参数中的 数组2 ={}", ymlParamConfig.getArr2());log.info("获取yml自定义参数中的 对象 ={}", ymlParamConfig.getBean());log.info("获取yml自定义参数中的 List ={}", ymlParamConfig.getList());log.info("获取yml自定义参数中的 Map<Object,Object>", ymlParamConfig.getMap());log.info("获取yml自定义参数中的 List<Map<Object,Object>>={}", ymlParamConfig.getListmap());}
}
日志输出:
c.g.mall.controller.YMLController - 获取yml自定义参数中的 简单键值对 cusVal=雨泽
c.g.mall.controller.YMLController - 获取yml自定义参数中的 不带[]的数组 cusArrl=1, 3, 4
c.g.mall.controller.YMLController - 获取yml自定义参数中的 键值对=雨泽
c.g.mall.controller.YMLController - 获取yml自定义参数中的 数组1 =1
c.g.mall.controller.YMLController - 获取yml自定义参数中的 数组2 =1
c.g.mall.controller.YMLController - 获取yml自定义参数中的 对象 =User(id=2, username=null, password=null, email=null, phone=null, question=null, answer=null, role=null, createTime=null, updateTime=null)
c.g.mall.controller.YMLController - 获取yml自定义参数中的 List =[lista, listb]
c.g.mall.controller.YMLController - 获取yml自定义参数中的 Map<Object,Object>
c.g.mall.controller.YMLController - 获取yml自定义参数中的 List<Map<Object,Object>>=[{a=a, b=b, c=c}, {d=d, e=e, f=f}]
扩展:
#这种方式是:在配置文件中使用配置
#请求url拦截配置信息
excludeRegister: /user/register
excludeLogin: /user/login
requrl:pathPatterns: '/**'excludePathPatterns: ${excludeRegister},${excludeLogin}