java - 外部化配置不适用于 Scala 的 Map

标签 java spring scala spring-boot

我尝试加载外部文件的属性值,并且该属性存储为键值格式(映射)。如果我使用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/

相关文章:

java - 字节数组到某种 Java/Scala 图像。性能考虑

Eclipse 和 Scala-IDE 源文件编码错误?

java - 如何在每次新运行时生成新的日志文件

java - Spring添加web.xml配置时Session总是过期

java - 了解 akka 中的调度程序

java - spring 单例 bean 构造

java - spring-roo 生成骨架应用程序如何工作?

java - JTable 彩色行标题出现在表格未出现的位置

java - 在 Java 中反转单词而不使用任何语言特定函数

java - Apache Commons - 在文件中搜索