coldsmog开发笔记
JS 事件笔记
Ckeditor 上传WPS图片失败问题
Springboot
SpringBoot 统一异常处理
Springboot 引入外部jar包
Springboot 打成war包
Springboot 多环境配置
SpringBoot @Scope注解学习
Springboot 快速生成项目API文档
SpringCache 缓存
Spring jetcache 二级缓存
Springboot 按条件装配类
FastJson的JsonPath语法
正则表达式语法
Spring 路径匹配
Feign 基础数据操作
监控Feign调用metrics
Springboot feign的性能优化
Jackson 设置序列化属性
SpringBoot 集成 Spring Data Mongodb 操作 MongoDB
MongoDB 的一些注意事项
MongoDB 指令对比
Jackson 解析XML
Springboot Redis注册
SpringBoot RedisTemplate批量插入
Springboot 指标监控Micrometer
springboot validation 注解校验
springboot 引入配置
Springboot 静态文件处理
Springboot 导出csv文件
Springboot 事件驱动(发布/订阅模式)
Springboot 启动过程和扩展点
Springboot 优化停机上下线
Spring自动装配 - 干饭角度学习
Springboot ShardingJDBC
Springboot的重试
springboot 动态修改端口
Oracle
Oracle 中实现自增ID
Oracle 定时任务
Oracle 解锁临时表
Oracle 检查连接数
Oracle 表空间
Oracle 解释执行SQL
markdown作图(适用typora)
服务器压测
业务对象层和数据层
并发限流处理
中间件
Yarn的使用
Dubbo学习笔记-RPC扩展和本地Mock
Dubbo学习笔记-泛化实现进行mock
Redis缓存穿透,缓存击穿,缓存雪崩
Galera 集群说明
Pip 镜像
pip 使用
MySQL命令行
数据库缓存双写方案
Git相关操作
Redis 操作时间复杂度一览
nacos 杂记
mybatis 散记
shardingjdbc
一次线上事故排查发现的Caffeine缓存死锁问题
设计模式
重新讲讲单例模式和几种实现
更优雅地实现策略模式
Http-headers
Prometheus 杂散笔记
JAVA 散记
CompletableFuture
Gson、FastJson、Jackson、json-lib对比总结
jackson 时间的序列化踩坑
JVM
自定义注解
mysql类型和java类型 转换一览表
枚举维护一个Map<value, Enum>的映射
Java中String +、concat、StringBuilder、StringBuffer 性能对比
TraceId 使用
MySQL 多数据源处理
Mybatis-plus 流式查询
JAVA发送win 桌面通知
idea 启动项目失败非代码问题杂记
Lambda 简述
Arthas 使用笔记
一种链式更新数据的数据模式
Skywalking 新增中间件插件
Redission 使用
数据导出为图片
IDEA 的热重启
Netty 工具类
maven 插件
TCP 抓包
本文档使用 MrDoc 发布
-
+
首页
springboot 引入配置
使用@Value注入map、List List: ```kotlin @Value("${test.list.ids:1,2,3}") private List<String> testList; ``` 或者 ```kotlin @Value("${test.list.ids:1,2,3}") private String[] testList; ``` List 指定分隔符 ```coffeescript @Value("#{'${test.list}'.split(',')}") private List<String> list; ``` 配置文件 ```undefined test.list: topic1,topic2,topic3 ``` split(‘,’)只以’,’为分隔符,也可以换成别的 当配置文件中没有key时,也可以使用`key:default_value`的方法设置默认值 map: ```typescript @Value("#{${test.maps}}") private Map<String,String> maps; ``` 配置文件 ```scss test.maps: "{key1: 'value1', key2: 'value2'}" ``` **ps: 注意上面的map解析中,一定要用""把map所对应的value包起来,要不然解析会失败,导致不能转成 Map<String,String>。** ### ### 通过@Value( ) 给静态变量注入值 spring 不允许/不支持把值注入到静态变量中,如: ``` @Value("${ES.CLUSTER_NAME}") private static String CLUSTER_NAME; ``` 在方法中获得的CLUSTER_NAME,会得到null 解决 好在spring支持set方法注入,我们可以利用非静态setter 方法注入静态变量。如: ``` private static String CLUSTER_NAME; @Value("${ES.CLUSTER_NAME}") public void setClusterName(String clusterName) { CLUSTER_NAME = clusterName; } ``` @Value必须修饰在方法上,且set方法不能有[static](https://so.csdn.net/so/search?q=static&spm=1001.2101.3001.7020) 这样就能获得值了 ## Spring中使用@Value如何按类型注入值 示例: 容器中,有一个Runnable的bean ``` @Configuration public class Config { @Bean("myrun") public Runnable run() { return () -> System.out.println("this is spring run"); } } ``` 想使用@Value的方式,把这个bean注入进来,这种是按bean的名字注入。 ``` @Service public class Runner { @Value("#{myrun}") private Runnable run; public void run() { run.run(); } } ``` ## #{…}和${…} ### ${…}用法 通过@Value(“${spelDefault.value}”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如 ``` @Value("${test.value:127.0.0.1}") ``` ### #{…}用法 \#{…}的{}里面的内容必须符合SpEL表达式,详细的语法,以后可以专门开新的文章介绍,这里只演示简单用法:  ### ${…}和#{…}混合使用 ${...}和#{...}可以混合使用,如下文代码执行顺序:通过 ```crystal ${server.name} ``` 从属性文件中获取值并进行替换,然后就变成了 执行SpEL表达式 ```objectivec #{'server1,server2,server3'.split(',')} ``` // SpEL: 传入一个字符串,根据","切分后插入列表中, #{}和${}配置使用(注意单引号,注意不能反过来${}在外面,#{}在里面) ```coffeescript @Value("#{'${server.name}'.split(',')}") private List<String> servers; ``` 在上文中在#{}外面,${}在里面可以执行成功,那么反过来是否可以呢${}在外面,#{}在里面,是不能。 因为spring执行${}是时机要早于#{}。${}在外面,#{}在里面是非法操作。 小结 \#{…} 主要用于加载外部属性文件中的值 ${…} 用于执行SpEl表达式,并将内容赋值给属性 \#{…} 和${…} 可以混合使用,但是必须#{}外面,${}在里面 ### ConfigurationProperties注入 ```scss @Data @ConfigurationProperties(prefix = "jdbc") public class SpringBootProperty { private String url; private String driverClassName; private String username; private String password; } ``` 注解解析: @ConfigurationProperties注解声明当前类为属性读取类 prefix:读取数据文件中,前缀为jdbc的值 在类上定义各个属性,名称必须与属性文件中jdbc.后面部分一致 属性文件是定义在application.yml文件中的 ``` spring: application: name: property server: port: 8083 jdbc: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test username: root password: 123 list: - {} - {tag: 补充样例,} map: { tag: 补充样例, } ``` | 二者区别 | @ConfigurationProperties | @Value | | -------------------- | ------------------------ | ---------- | | 功能 | 批量注入配置文件中的属性 | 一个个指定 | | 松散绑定(松散语法) | 支持 | 不支持 | | SpEL | 不支持 | 支持 | | JSR303数据校验 | 支持 | 不支持 | | 复杂类型封装 | 支持 | 不支持 | 参照: https://segmentfault.com/a/1190000018536906 https://blog.csdn.net/ZYC88888/article/details/88748516 做配置类 https://blog.csdn.net/kouxinsu8594/article/details/107208242
寒烟濡雨
2023年8月9日 20:42
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码