【发布时间】:2021-12-28 00:27:30
【问题描述】:
我正在尝试修复我们公司自制框架中的一个错误。基本上,我们应该能够通过作为我们框架一部分的以下类将 EclipseLink 属性注入EntityManager:
@ConfigurationProperties(prefix = "our.framework.eclipselink")
public class CustomEclipseLinkProperties {
private Map<String, Object> properties;
public Map<String, Object> getProperties() {
return properties;
}
public void setProperties(Map<String, Object> properties) {
this.properties = properties;
}
public String getBatchSize() {
return (String) properties.get(PersistenceUnitProperties.BATCH_WRITING_SIZE);
}
}
我们基于该框架构建的服务具有以下属性文件 (application.properties):
our.framework.eclipselink.properties.eclipselink.logging.level=FINEST
our.framework.eclipselink.properties.eclipselink.logging.level.cache=FINEST
our.framework.eclipselink.properties.eclipselink.logging.level.sql=FINEST
our.framework.eclipselink.properties.eclipselink.logging.parameters=true
our.framework.eclipselink.properties.eclipselink.jdbc.batch-writing.size=1000
our.framework.eclipselink.properties.eclipselink.jdbc.bind-parameters=true
our.framework.eclipselink.properties.eclipselink.jdbc.batch-writing=JDBC
our.framework.eclipselink.properties.eclipselink.jpa.uppercase-column-names=false
our.framework.eclipselink.properties.eclipselink.jpa.uppercase-columns=false
当我在CustomEclipseLinkProperties 被初始化后放置一个断点时,我可以看到getBatchSize() 返回null。如果我查看getProperties(),我确实看到检测到这些值,但它们被插入为LinkedHashMap。
预期的行为是我们将获得一个使用整个后缀作为字符串键的Map,而不是在属性列表中获得基本上调用String#split() 的LinkedHashMap。这意味着对getBatchSize() 的调用将返回1000。
我看过一些答案,例如this one,但它们似乎不够通用,我不喜欢。 当@ConfigurationProperties注入时,有没有办法简单地将整个后缀作为键?否则,每当我们想要支持不同类型的属性时,似乎都需要干预。
【问题讨论】:
标签: java spring spring-boot