我试图从配置包加载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/
定义要从属性中读取的属性的类应该包含@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系统输出
可能你写错了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编译了它。