当前位置: 首页 > 知识库问答 >
问题:

@值为空,而使用@PostCon构成t

邵飞鸿
2023-03-14

我试图从配置包加载YML文件,但每当我使用@Value(“${..}”)注释@PostConstruct方法期间,它为空,导致指针为空。我需要@PostConstruct一次加载所有文件。

  @Value("${my.property.name}")
  private String directoryPath;

  private Map<String, Map<String, List<String>>> entityFiles = new HashMap<>();
  private List<String> fieldsToEnrichByPE = new ArrayList<>();

  @PostConstruct
  public void getFieldsToEnrich() throws IOException {
    ClassLoader cl = this.getClass().getClassLoader();
    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
    Resource[] resources = resolver.getResources("classpath*:/" + DIRECTORY_PATH + "*.yml"); // RESOURCES IS NULL
    ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
    for (Resource resource : resources) { // THROWS NULL POINTER BECAUSE RESOURCES NEVER GETS POPULATED, DIRECTORY PATH IS NOT GETTING INSTANTIATED
      File ymlFile = resource.getFile();
      entityFiles.put(ymlFile.getName().replace(".yml", ""), mapper.readValue(ymlFile, Map.class));
    }
  }

对如何缓解这个问题有什么想法吗?

硬编码directoryPath工作正常,但如果是硬编码的,我将无法使用测试配置文件,因为directoryPath是硬编码到主资源文件夹而不是测试资源文件夹的。

YML文件:

my:
  property:
    name: a/b/c/

共有2个答案

竺承望
2023-03-14

定义要从属性中读取的属性的类应该包含@Component for Spring,以便在执行@PostContruct之前先准备变量

import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class TestProp {
    
    @Value("${my.prop.test}")
    private String prop;

    @PostConstruct
    public void postConstructMethod() {
    
    System.out.println("prop= " + prop);
    }
}

Eclipse系统输出

龚征
2023-03-14

可能你写错了YML路径。

尝试编写解析器。getResources(“classpath*:/“DIRECTORY_PATH”*.yml”);直接写入的行,用于检查您创建的路径是否不正确。

也许甚至Java生成路径也没有分配到放置YML的正确目录。

这是我的一个项目中的res文件夹,它位于Java构建路径中

这是我的猜测,如果我错了,我道歉。

祝您有个美好的一天!

 类似资料:
  • 我注意到我的bean在jar中的spring boot应用程序上一次调用的和两次。下面是两次初始化的示例bean。 和被调用两次: 从日志中,PostConconfit首先被调用: 第二个是: @Scheduled被调用了两次一次: 当我删除时,和只被调用了一次。我非常确定类只有一个实例。

  • 我的数据库中有一些值,如果还没有输入的话,它们可能为空。 但是当我在我的html中使用Thymeleaf时,它在解析空值时出错。 这个有什么办法处理吗

  • 问题内容: 我正在使用此构造来模拟一组 然后,我添加所有密钥并将它们映射到。 我了解到也可以使用 使用空结构与。 问题答案: 内存使用情况。例如,类型,以及, 输出(用于32位体系结构的字节): 输出(64位体系结构的字节): 参考文献: Go数据结构:接口

  • 我更改为r1,但值是否可以

  • 问题内容: 我写的http标签里面: 我有以下sas bean 在代码中,我从注册表中获取信息: 现在正在工作。 但是不赞成上课的问题 我这样替换了sas bean 但现在 总是返回空列表。 如何解决? PS完整配置: web.xml: 安全上下文: applicationContext.xml: dataContext.xml restTemplateContext.xml securityCo

  • 我使用iReport设计了我的报告,并用Java编译了它。