代码之家  ›  专栏  ›  技术社区  ›  Daniel Haughton

Spring boot-从Spring属性中注入值-空指针

  •  0
  • Daniel Haughton  · 技术社区  · 5 年前

    我有一节课

     public class Constants {
    @Value("${graph.apiSecret")
    public static   String API_SECRET;
    }
    

    在我的 application-dev.properties graph.apiSecret=secretHere 财产

    我的测试显示API_SECRET为空

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class GraphViewSiteTest {
        @Test
        public void testgetAllFilesInAFolderOnOurDevSite() throws  ConnectException, IOException, OAuth2AccessTokenErrorResponse, InterruptedException, ExecutionException {
            System.out.println(Constants.API_SECRET);
       }
    

    我使用的是弹簧靴1.5.2

    1 回复  |  直到 5 年前
        1
  •  1
  •   sudo    5 年前

    Spring不会将值注入静态变量,因此必须为它创建一个非静态setter:

    @Value("${graph.apiSecret]")
    public void setApiSecret(String apiSecret){
      API_SECRET= apiSecret;
    }
    
        2
  •  0
  •   Himanshu Sharma    5 年前

    以上答案是正确的,你将不得不使用非静态setter。

    https://www.mkyong.com/spring/spring-inject-a-value-into-static-variables/
    

    但您还需要指定属性文件的读取路径。

    @RunWith(SpringRunner.class)
    @ContextConfiguration(classes = Constants.class)
    @TestPropertySource("classpath:application-test.properties")  
    public class GraphViewSiteTest {
    
    @Test
    public void testgetAllFilesInAFolderOnOurDevSite()   {
        System.out.println(Constants.API_SECRET);
       }
    }