Java 外部化配置不适用于Scala';s地图

Java 外部化配置不适用于Scala';s地图,java,spring,scala,spring-boot,Java,Spring,Scala,Spring Boot,我尝试加载外部文件的属性值,该属性存储为键值格式(Map)。如果我使用java的Map,它可以正常工作,正如代码所示: import java.util.{Map, HashMap} @Component @ConfigurationProperties(prefix="config") class ConfigProperties { val corporationSecrets : Map[String, String] = new HashMap[String, String]

我尝试加载外部文件的属性值,该属性存储为键值格式(Map)。如果我使用java的Map,它可以正常工作,正如代码所示:

import java.util.{Map, HashMap}

@Component
@ConfigurationProperties(prefix="config")
class ConfigProperties {
    val corporationSecrets : Map[String, String] = new HashMap[String, String]
}
但是,当我只是将映射更改为Scala的映射时,我无法从映射中获取任何值,即,映射为空

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的映射?

是的,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
}

我得到了它。谢谢!