大家好,
我最近在一个spring boot项目(版本2.3.4)中尝试从application.yml文件中读取内容。
最初,yml文件中的所有属性都被读取为NULL。
在多次清理和重建project之后,我可以读取所有属性,除了用户定义的类对象列表(类下的List
我试过所有可能的解决办法,但没有一个对我有效。
请检查并帮助我理解我在下面的代码中遗漏了什么,因为list
在期待中感谢你!
配置Java类
@Configuration @EnableConfigurationProperties @ConfigurationProperties public class TestAPIConfiguration { private String eventCache; private String diskBasedCache; private List<String> sendAllSMSto; private List<String> sendAllEmailsto; //This property is getting read as null even if //value for this property is present in yml file. private List<LogComponent> logComponents; @NotNull private String selfURIPrefix; @NotNull private String investURIPrefix; @NotNull private String ifaURIPrefix; private String apiEnv; private final Joiner joiner = Joiner.on( "," ).skipNulls(); private static final Logger LOGGER = LoggerFactory.getLogger(TestAPIConfiguration.class); @PostConstruct public void setSystemProperties() { try { System.setProperty(SystemConstants.EVENT_CACHE_PATH, eventCache); System.setProperty(SystemConstants.DISK_BASED_CACHE_PATH, diskBasedCache); System.setProperty(SystemConstants.REQUEST_LOGGING_FIELDS, JSONUtils.getObjectMapper().writeValueAsString(logComponents)); System.setProperty(SystemConstants.ENVIRONMENT_IDENTIFIER, apiEnv); System.setProperty(INVEST_URI_PREFIX, investURIPrefix); System.setProperty(IFA_URI_PREFIX, ifaURIPrefix); if(sendAllSMSto != null) System.setProperty(SEND_ALL_SMS_TO, joiner.join(sendAllSMSto)); if(sendAllEmailsto != null) System.setProperty(SystemConstants.SEND_ALL_EMAILS_TO, joiner.join(sendAllEmailsto)); } catch(Exception se) { LOGGER.error("Error in Configuration Setup: {}", se.getLocalizedMessage()); } } public String getEventCache() { return eventCache; } public void setEventCache(String eventCache) { this.eventCache = eventCache; } public String getDiskBasedCache() { return diskBasedCache; } public void setDiskBasedCache(String diskBasedCache) { this.diskBasedCache = diskBasedCache; } public List getSendAllSMSto() { return sendAllSMSto; } public void setSendAllSMSto(List<String> sendAllSMSto) { this.sendAllSMSto = sendAllSMSto; } public List getSendAllEmailsto() { return sendAllEmailsto; } public void setSendAllEmailsto(List<String> sendAllEmailsto) { this.sendAllEmailsto = sendAllEmailsto; } public List getRequestLoggingFields() { return logComponents; } public void setRequestLoggingFields(List<LogComponent> requestLoggingFields) { this.logComponents = requestLoggingFields; } public String getSelfURIPrefix() { return selfURIPrefix; } public void setSelfURIPrefix(String selfURIPrefix) { this.selfURIPrefix = selfURIPrefix; } public String getInvestURIPrefix() { return investURIPrefix; } public void setInvestURIPrefix(String investURIPrefix) { this.investURIPrefix = investURIPrefix; } public String getIfaURIPrefix() { return ifaURIPrefix; } public void setIfaURIPrefix(String ifaURIPrefix) { this.ifaURIPrefix = ifaURIPrefix; } public String getApiEnv() { return apiEnv; } public void setApiEnv(String apiEnv) { this.apiEnv = apiEnv; } }
LogComponent Java类
@Component public class LogComponent { @NotNull private String headerName; @NotNull private String sessionKey; @NotNull private String logPrintKey; public String getHeaderName() { return headerName; } public String getSessionKey() { return sessionKey; } public String getLogPrintKey() { return logPrintKey; } }
application.yml文件
debug: true server: port: 8080 apiEnv: UAT selfURIPrefix: "https://testurl.localhost.net" investURIPrefix: "https://testurl.mediaserver.net" ifaURIPrefix: "https://testurl.secondaryserver.net" sendAllSMSto: - "0000000000" sendAllEmailsto: - "abc@testmail.com" eventCache: "C:\\Users\\username\\project\\devnull\\eventcachepurchase.mdb" diskBasedCache: "C:\\Users\\username\\project\\devnull\\cache.mdb" logComponents: - headerName: X-RT-REQUEST-TRACKER sessionKey: NOT AVAILABLE logPrintKey: REQUEST-TRACKER - headerName: X-RT-INX-DWD sessionKey: IFX-PDR logPrintKey: PDR_NO - headerName: X-RT-IFA-ARN sessionKey: IRX-AXRN logPrintKey: AXR-CDODEEE
终于找到了解决办法。
我没有在LogComponent类中创建setter方法,因为这些方法没有将值分配给变量。
在为所有字段添加setter之后,这个问题就解决了。
我有一个3节点的Apache Ignite集群,我创建了一个以整数为键的缓存,以'subscriber'POJO为值,当我从JAVA程序内部连接到集群并访问缓存时,我得到了上面提到的异常,我有'peerClassLoading'属性设置为false,并且我在所有节点中部署了'subscriber'POJO二进制文件,请在下面找到完整的堆栈跟踪。我错过了什么?当我在JAVA程序中用启动客户端时,它为
问题内容: 我有一个文本文件,其中包含一个由数字组成的表格,例如: 5 10 6 6 20 1 7 30 4 8 40 3 9 23 1 4 13 6 例如,如果我想要仅包含在第二列中的数字,我该如何将该列提取到列表中? 问题答案: 您可以使用列表理解来做同样的事情 Docs 返回字符串的单词列表。如果不存在可选的第二个参数sep或“无”,则单词将由任意的空白字符字符串(空格,制表符,换行符,返回
我的logback-spring.xml从application.properties中读取正常,但从application.yml中读取不正常。在我的项目中,我们被要求仅使用YAML格式,因为该格式正在同一项目中的其他微服务中使用,所以我无法添加属性文件。请帮助我为什么我的application.yml在logback.xml中没有被读取 我尝试了各种方法,并在stackoverflow上搜索了
我正在尝试从子项目中读取文件示例-dfx-sbi 文件位于src/main/resources文件夹内 那为什么文件没有加载呢?
我试图加载预填充数据到我的flutter应用程序。我已经在项目的根目录中创建了资产文件夹 在pubspec.yaml中添加了该文件引用 下面是我访问数据库的DBHandler.dart文件代码 我得到的错误是 在代码的给定行下面。 ByteData=等待rootBundle.load(连接('资产',dbName));
我有一个项目来解析一个大文件中的一些信息。 结构如下: 当我根据自己的想法运行应用程序时,我可以通过以下方式读取文件: 然后,如果我运行: 一切顺利。 即使在生成GraalNative jar并从本机generate jar运行应用程序时: 这一切都很好。 但是,当我运行命令来构建和运行docker时,我得到了我的错误: 有人能帮我吗?如何读取Docker容器上src/main/Resources