当前位置: 首页 > news >正文

springboot 注入配置文件中的集合 List

在使用 springboot 开发时,例如你需要注入一个 url 白名单列表,你可能第一想到的写法是下面这样的:

application.yml

white.url-list:- /test/show1- /test/show2- /test/show3
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {@Value("${white.url-list}")private List<String> whileUrlList;@GetMapping("/show1")public Mono<String> show1(){log.info("whileUrlList={}", whileUrlList);return Mono.just("OK");}}

然而,我们天真的以为,这样是没有问题的,实际不然,这是一种错误的行为,本文截稿时 Spring 还是不支持直接使用 @Value 的方式注入集合的。
这种需求查看了官网ISSUE,从2014年(甚至更早)就被很多人提出,很遗憾的是官方至今没有对这种注入方式进行支持。

那么我们如何注入集合呢,这里我们需要使用 @ConfigurationProperties 的方式来达到目的,具体的代码如下:

1、添加依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>

2、application.yml 配置文件

white.url-list:- /test/show1- /test/show2- /test/show3

3、创建对应的Java对象

@Data
@Component
@ConfigurationProperties(prefix = "white")
public class WhiteUrlProperties {private List<String> urlList;}

4、注入Java对象使用

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {@Autowiredprivate WhiteUrlProperties whileUrlList;@GetMapping("/show1")public Mono<String> show1(){log.info("whileUrlList={}", whileUrlList.getUrlList());return Mono.just("OK");}}

如果实在不想单独出来一个Java类,你直接把 @ConfigurationProperties 添加到你的 Service、Controller 等 SpringBean 的 Java 类上也是可以的,但是要注意一定要有对应的 set 方法(否则失败),如下代码所示:

@Slf4j
@RestController
@RequestMapping("/test")
@ConfigurationProperties("white")
public class TestController {private List<String> urlList;@GetMapping("/show1")public Mono<String> show1(){log.info("whileUrlList={}", urlList);return Mono.just("OK");}public void setUrlList(List<String> urlList) {this.urlList = urlList;}
}

(END)

http://www.lryc.cn/news/216294.html

相关文章:

  • springboot整合redis+lua实现getdel操作保证原子性
  • win10系统nodejs的安装npm教程
  • C语言assert函数:什么是“assert”函数
  • R语言绘图-5-条形图(修改坐标轴以及图例等)
  • uniapp自定义权限菜单,动态tabbar
  • ubuntu20.04配置解压版mysql5.7
  • 【js】vue获取document.getElementById(a)为null
  • 系列六、Mybatis的一级缓存
  • 用中文编程工具给澳大利亚客户定制开发的英文版服装进销存软件应用实例
  • geoserver 的跨域问题怎么解决
  • SQL语法实践(一)
  • 路由器如何设置IP地址
  • 自动驾驶算法(一):Dijkstra算法讲解与代码实现
  • MS5910PA为行业内领先的可配置10bit到16bit分辨率的旋变数字转换器,可替代AD2S1210
  • Random指定随机种子遇到的坑
  • 2023云栖大会:属于开发者的狂欢
  • jsp 网上订餐Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 优化大表分页查询性能:大表LIMIT 1000000, 10该怎么优化?
  • ubuntu PX4 vscode stlink debug设置
  • Flask的一种启动方式和三种托管方式
  • cudnn too short
  • 01、SpringBoot + MyBaits-Plus 集成微信支付 -->项目搭建
  • Linux 性能调优之网络优化
  • RT-Thread系统使用常见问题处理记录
  • 优先队列----数据结构
  • nginx项目部署教程
  • 资源限流 + 本地分布式多重锁——高并发性能挡板,隔绝无效流量请求
  • day52【子序列】300.最长递归子序列 674.最长连续递增序列 718.最长重复子数组
  • 计算机视觉 计算机视觉识别是什么?
  • Make.com实现多个APP应用的自动化的入门指南