天天看點

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

Spring boot擷取yml字段内容為null的各種情況
Spring boot擷取yml字段内容為null的各種情況
Spring boot擷取yml字段内容為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;
}
      

}

Spring boot擷取yml字段内容為null的各種情況

View Code

執行測試代碼

Spring boot擷取yml字段内容為null的各種情況
Spring boot擷取yml字段内容為null的各種情況
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {
    @Test
    public void test(){
        String b = TestYml.B;
        System.out.println(b);
    }
}      

得到結果如下:

Spring boot擷取yml字段内容為null的各種情況

2.然後去掉set方法中的static,執行上一步的測試代碼可以正常擷取

Spring boot擷取yml字段内容為null的各種情況

3.如果需要将B分别和C,D進行拼接呢,将代碼修改如下:

Spring boot擷取yml字段内容為null的各種情況
Spring boot擷取yml字段内容為null的各種情況
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;      
</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;
}
      

執行代碼如下:

Spring boot擷取yml字段内容為null的各種情況
@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);
    }
}      
Spring boot擷取yml字段内容為null的各種情況

拼接的結果時而正常,時而為null,如下:

Spring boot擷取yml字段内容為null的各種情況

4.然後将get方法的static也去掉,結果同樣也是不穩定

測試代碼如下:

Spring boot擷取yml字段内容為null的各種情況
@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);
        }
    }
}      
Spring boot擷取yml字段内容為null的各種情況

結果如下:

Spring boot擷取yml字段内容為null的各種情況

5.将@Value至于參數處,且将參數的static也去掉,并且将測試代碼改為注入的方式,結果則是拼接的null都不見了

Spring boot擷取yml字段内容為null的各種情況

6.然後修改get方法,将拼接的值get作為該參數的傳回,調用方式直接使用注入和get方法,擷取值才正常

Spring boot擷取yml字段内容為null的各種情況
Spring boot擷取yml字段内容為null的各種情況
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;      

@Value("${A.B}")

private String B;

@Value("${A.C}")

private String C;

@Value("${A.D}")

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;
}
      

測試代碼

Spring boot擷取yml字段内容為null的各種情況
Spring boot擷取yml字段内容為null的各種情況
@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);
        }
    }
}      

執行結果可以正常擷取到值

Spring boot擷取yml字段内容為null的各種情況

繼續閱讀