我尝试加载外部文件的属性值,并且该属性存储为键值格式(映射)。如果我使用java的Map就可以正常工作,就像代码一样:
import java.util.{Map, HashMap}
@Component
@ConfigurationProperties(prefix="config")
class ConfigProperties {
val corporationSecrets : Map[String, String] = new HashMap[String, String]
}
但是当我将 map 更改为Scala的 map 时,我无法从 map 中获取任何值,即 map 是空的。
import java.util.HashMap
import scala.collection.JavaConverters._
@Component
@ConfigurationProperties(prefix="config")
class ConfigProperties {
val corporationSecrets : Map[String, String] = new HashMap[String, String].asScala
}
我尝试了可变映射和不可变映射,但没有任何情况有效。
这是否意味着我不能在这种情况下使用 Scala 的 map ?
最佳答案
是的,Spring Boot 不知道如何处理 Scala 集合。但是您可以在内部使用 Java 集合并添加返回 Scala 版本的方法。当然,他们需要有不同的名字。例如
import java.util.{HashMap => JHashMap, Map => JMap}
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.stereotype.Component
import scala.beans.BeanProperty
import scala.collection.JavaConversions._
@Component
@ConfigurationProperties(prefix = "security-util")
class SecurityUtilProperties {
@BeanProperty
val corporationSecrets: JMap[String, String] = new JHashMap[String, String]
def corporationSecretsScala = corporationSecrets.asScala
}
关于java - 外部化配置不适用于 Scala 的 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48333896/