Spring boot获取yml字段内容为null的各种情况
首先,在resource目录下配置test.yml文件
A:
B: http://123.com?
C: username="lili"&password="123456"
D: username="lisa"&password="123456"
1.为了调用方便,将参数全部设置为static,结果可想而知,获取不到,只能是null

package com.example.demo.constants; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component
public class TestYml {
public static String B;
public static String C;
public static String D;</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> String getB() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> B;
}
@Value(</span>"${A.B}"<span style="color: #000000;">)
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setB(String b) {
B </span>=<span style="color: #000000;"> b;
} </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> String getC() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> C;
}
@Value(</span>"${A.C}"<span style="color: #000000;">)
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setC(String c) {
C </span>=<span style="color: #000000;"> c;
} </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> String getD() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> D;
}
@Value(</span>"${A.D}"<span style="color: #000000;">)
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setD(String d) {
D </span>=<span style="color: #000000;"> d;
}
}

执行测试代码
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {
@Test
public void test(){
String b = TestYml.B;
System.out.println(b);
}
}
得到结果如下:

2.然后去掉set方法中的static,执行上一步的测试代码可以正常获取

3.如果需要将B分别和C,D进行拼接呢,将代码修改如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component
public class TestYml {
public static String B;
public static String C;
public static String D;</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> String getB() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> B;
}
@Value(</span>"${A.B}"<span style="color: #000000;">)
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setB(String b) {
B </span>=<span style="color: #000000;"> b;
} </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> String getC() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> C;
}
@Value(</span>"${A.C}"<span style="color: #000000;">)
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setC(String c) {
C </span>= getB() +<span style="color: #000000;"> c;
} </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> String getD() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> D;
}
@Value(</span>"${A.D}"<span style="color: #000000;">)
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setD(String d) {
D </span>= getB() +<span style="color: #000000;"> d;
}
}
执行代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {
@Test
public void test(){
String b = TestYml.B;
String c = TestYml.C;
String d = TestYml.D;
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}

拼接的结果时而正常,时而为null,如下:

4.然后将get方法的static也去掉,结果同样也是不稳定
测试代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {
@Test
public void test(){
int i = 10;
for (int i1 = 0; i1 < i; i1++) {
String b = TestYml.B;
String c = TestYml.C;
String d = TestYml.D;
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
}

结果如下:

5.将@Value至于参数处,且将参数的static也去掉,并且将测试代码改为注入的方式,结果则是拼接的null都不见了

6.然后修改get方法,将拼接的值get作为该参数的返回,调用方式直接使用注入和get方法,获取值才正常
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component
public class TestYml {
@Value("$")
private String B;
@Value("$")
private String C;
@Value("$")
private String D;</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getB() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> B;
} </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setB(String b) {
B </span>=<span style="color: #000000;"> b;
} </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getC() {
</span><span style="color: #0000ff;">return</span> getB() +<span style="color: #000000;"> C;
} </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setC(String c) {
C </span>=<span style="color: #000000;"> c;
} </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getD() {
</span><span style="color: #0000ff;">return</span> getB() +<span style="color: #000000;"> D;
} </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setD(String d) {
D </span>=<span style="color: #000000;"> d;
}
}
测试代码
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {
@Autowired
TestYml testYml;
@Test
public void test(){
int i = 10;
for (int i1 = 0; i1 < i; i1++) {
String b = testYml.getB();
String c = testYml.getC();
String d = testYml.getD();
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
}
执行结果可以正常获取到值

原文地址:https://www.cnblogs.com/biyuting/p/11184254.html
Spring boot获取yml字段内容为null的各种情况的更多相关文章
- Spring Boot获取前端页面参数的几种方式总结
Spring Boot的一个好处就是通过注解可以轻松获取前端页面的参数,之后可以将参数经过一系列处理传送到后台数据库. 获得的方式有很多种,这里稍微总结一下,大致分为以下几种: 1.指定前端url请求 ...
- spring boot(10) 基础学习内容
A Spring boot(10) 基础学习内容 B SpringBoot(16) 基础学习内容
- Spring Boot 获取 java resources 下文件
Spring Boot 获取 java resources 下文件 Spring Boot 获取 resources 目录下的目录(例:获取 resources 目录下的 template 目录): ...
- spring boot 接口返回值去掉为null的字段
现在项目都是前后端分离的,返回的数据都是使用json,但有些接口的返回值存在 null或者"",这种字段不仅影响理解,还浪费带宽,需要统一做一下处理,不返回空字段,或者把NULL转 ...
- Spring Boot 获取ApplicationContext
package com.demo; import org.springframework.beans.BeansException; import org.springframework.contex ...
- Spring Boot 获取Bean对象实体
一.实现 ApplicationContextAware 接口 package com.zxguan; import org.springframework.beans.BeansException; ...
- 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】
首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取 带 ...
- Spring Boot 获取yaml配置文件信息
Spring boot 项目启动过程中: org.springframework.boot.SpringApplication#prepareEnvironment 当程序步入listeners.en ...
- spring boot的 yml和properties的对比
Spring Boot 虽然做了大量的工作来简化配置,但其配置依然是相当的复杂!支持的外部配置方式就有很多种,笔者没有去统计,也许是为了灵活使用吧. application.yml 和 appli ...
随机推荐
- cmd命令符
运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本) CMD命令锦集 1. gpedit.msc-----组策略 2. ...
- Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令
最近偶尔有用户反馈某些 HTTP 接口出现超时问题,而 web 服务端的 Trace 监控没有出现 http 返回值为 503 等异常情况.出现这种情况一般是web容器出现问题,客户端连 Arthas ...
- 0922CSP-S模拟测试赛后总结
连发三篇爆炸实录我的心态竟然还这么好…… 昨天题目的D2.稍难. 这也不是我连续拿倒数第一的理由. T1不会.赛时硬写了一个30分的三次方暴力.还有一个地方写挂了.如果不是数据足够水我就爆零了. 也就 ...
- POJ 3134 - Power Calculus
迭代加深 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include<al ...
- Post Office IOI 2000 /// 区间DP oj24077
题目大意: 给定n个村庄的坐标,两个村庄之间的距离是其坐标之差的绝对值 最多能选m个村庄设立邮局,求设立邮局的地点使得各村庄与邮局距离总和最小 一, 所有的村庄看做在一条直线上 考虑三个因素:i 当前 ...
- wpf 纯样式写按钮
<!--自定义按钮样式--> <LinearGradientBrush x:Key="LinearGradientBlueBackground" EndPoint ...
- COGITATE | 分析当前热门软件的创新
热门软件分析实例一——Github [简介] gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub.作为一个分布式的版本控制系统,在Gi ...
- 简单搭建dubbo
为什么要用dubbo? 当网站规模达到了一定的量级的时候,普通的MVC框架已经不能满足我们的需求,于是分布式的服务框架和流动式的架构就凸显出来了. 单一应用架构 当网站流量很小时,只需一个应用 ...
- oi知识表
- win10下aria2和BaiduExporter的配置和安装
一.aria2的配置 下载 aria2下载地址: https://github.com/aria2/aria2/releases 链接:https://pan.baidu.com/s/1olJyZkX ...