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

时间:2018-01-19 03:56:15

标签: 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]
}

但是当我只是将地图更改为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的地图?

1 个答案:

答案 0 :(得分:1)

是的,Spring Boot并不知道如何处理Scala集合。但是您可以在内部使用Java集合并添加返回Scala版本的方法。当然,他们需要有不同的名字。 E.g。

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
}