Spring Boot读取application.yaml属性

Spring Boot读取application.yaml属性

一、访问实体属性

1、pom.xml文件里添加snakeyaml依赖

<dependency>
   <groupId>org.yaml</groupId>
   <artifactId>snakeyaml</artifactId>
   <version>1.18</version>
</dependency>

2、创建applicaiton.yaml文件

3、创建BookSettings类

packa
<think>嗯,我现在需要弄清楚System.getProperty("fastjson.parser.safeMode")是否能读取application.yaml中的配置。首先,我应该回顾一下Java中的System.getProperty的作用。System.getProperty通常用于获取Java系统属性,这些属性通常是在启动JVM时通过-D参数设置的,比如-Dfastjson.parser.safeMode=true。而application.yaml一般是Spring Boot应用的配置文件,里面配置的属性会被Spring框架加载到环境变量或者应用的配置对象中,比如通过@Value注解或者@ConfigurationProperties来注入。 接下来,我需要确认这两个配置来源是否有关联。系统属性Spring的配置是分开管理的,除非有特别的处理将application.yaml中的配置同步到系统属性中。默认情况下,Spring不会自动将配置文件的属性设置到系统属性里。所以,如果application.yaml中有fastjson.parser.safeMode这个配置,System.getProperty可能无法直接读取到它,除非在应用启动时显式地将该配置的值设置到系统属性中。 然后,我应该考虑可能的解决方法。例如,在Spring Boot应用中,可以在启动后获取配置,然后手动调用System.setProperty来设置这个值。或者在application.yaml中配置后,通过环境变量获取,再设置到系统属性里。此外,可能还需要注意配置的优先级问题,系统属性的优先级通常高于配置文件,但如果有多个地方配置了同一个属性,需要明确处理顺序。 另外,Fastjson本身是否支持从系统属性读取safeMode的设置呢?根据Fastjson的文档,safeMode可以通过代码设置,比如ParserConfig.getGlobalInstance().setSafeMode(true);,或者通过系统属性来启用。这时候,如果在启动JVM时指定了-Dfastjson.parser.safeMode=true,Fastjson会读取这个系统属性。但如果是通过application.yaml配置的,就需要应用在启动时主动将yaml中的值赋给系统属性,才能让Fastjson识别到。 还需要检查是否有其他方式可以让Fastjson直接读取Spring的配置,而不是依赖系统属性。例如,在创建Fastjson的实例时,直接从Spring的环境变量中获取配置值,然后应用到解析器的配置中。这可能更符合Spring应用的标准做法,而不是依赖于系统属性。 总结一下,System.getProperty默认不会读取application.yaml的配置,但可以通过编码方式在应用启动时将配置值设置到系统属性中,从而让System.getProperty能够获取到。此外,直接使用Spring的配置管理来设置Fastjson的参数可能是更好的做法,避免依赖系统属性带来的潜在问题。</think>System.getProperty("fastjson.parser.safeMode") 的读取逻辑与 application.yaml 配置的关系,可通过以下分步分析理解: --- ### **1. 两者的作用域差异** - **System.getProperty** 读取的是 **JVM 系统属性**,需通过 `-D` 参数在启动时设置(例如:`java -Dfastjson.parser.safeMode=true -jar app.jar`)。 系统属性与操作系统环境变量无关,也与 Spring Boot 的配置文件独立。 - **application.yaml** Spring Boot 的配置文件属性存储在 `Environment` 对象中,需通过 `@Value` 或 `Environment.getProperty()` 获取,与系统属性默认无关联。 --- ### **2. 直接读取的可行性** - **不能直接读取** 若仅在 application.yaml 中配置 `fastjson.parser.safeMode: true`,直接调用 `System.getProperty("fastjson.parser.safeMode")` 会返回 `null`,因为系统属性未被赋值。 --- ### **3. 如何让两者关联** #### 方法 1:启动时传递系统参数 在启动命令中显式指定参数: ```bash java -Dfastjson.parser.safeMode=true -jar your-app.jar ``` 此时 `System.getProperty` 可读取到值,但需与 application.yaml 中的配置保持同步。 #### 方法 2:在代码中动态同步 在 Spring Boot 启动后,将 application.yaml 的值手动同步到系统属性: ```java @Configuration public class ConfigSync { @Value("${fastjson.parser.safeMode}") private String safeMode; @PostConstruct public void init() { System.setProperty("fastjson.parser.safeMode", safeMode); } } ``` 此后 `System.getProperty` 可读取application.yaml 的配置值。 --- ### **4. Fastjson 的安全模式配置建议** Fastjson 的 `safeMode` 更推荐通过代码直接设置,而非依赖系统属性: ```java // 在 Spring 初始化时配置 @Bean public ParserConfig fastjsonParserConfig() { ParserConfig.getGlobalInstance().setSafeMode(true); return ParserConfig.getGlobalInstance(); } ``` 此方式直接利用 Spring 的配置管理,避免依赖系统属性。 --- ### **总结** | 方式 | 能否直接读取 | 推荐度 | |---------------------|------------------------|--------| | 仅配置 application.yaml | ❌ 不能 | 不推荐 | | 启动参数 + 系统属性 | ✅ 能 | 中 | | 代码动态同步 | ✅ 能(需额外处理) | 中 | | 直接代码设置 Fastjson| ✅ 最可靠 | 高 | 建议优先通过代码或 Spring 配置管理 Fastjson 参数,而非依赖系统属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒城译痴无心剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值