使用Scala读取Spring Boot配置属性

m4pnthwp  于 2022-11-09  发布在  Scala
关注(0)|答案(2)|浏览(142)

我在Scala中使用了Spring Boot。我想通过@ConfigurationProperties注解读取带有Scala类型的Case类的属性。我已经知道我将不能注解Scala Case类,因为Spring Boot不支持基于构造的属性注入。但至少我希望将集合(列表和Map)从配置Map到基于Scala的类型。这样我就可以编写一个配置类:

@Component
@ConfigurationProperties("kafka")
case class KafkaConfig() {
  @BeanProperty
  var bootstrapServers: List[String] = _

}

并编写如下配置文件Applation.yml:

kafka:
  bootstrapServers:
    - "node1:9092"
    - "node2:9092"

这有可能吗?在这种情况下,我尝试使用Converters,如下所示:

import org.springframework.core.convert.converter.Converter
import scala.collection.JavaConverters._

@Component
@ConfigurationPropertiesBinding
class JavaListToList extends Converter[java.util.List[Any], List[Any]] {
  override def convert(s: java.util.List[Any]): List[Any] = {
    s.asScala.toList
  }
}

但这并不起作用,因为Spring尝试不转换已经读取的(Java)列表,而是示例化一个空的Scala列表并追加到它后面。所以我肯定是走错了路。
如果有任何帮助,我将不胜感激。

mbjcgjjk

mbjcgjjk1#

import java.util.{List => JList, ArrayList => JArrayList}

@Configuration
@ConfigurationProperties("kafka")
class AppConfig {

 @BeanProperty
 var bootstrapServers: JList[String] = new JArrayList[String]

 def getBootStrapServer: JList[String]  = bootstrapServers
}

import java.util.{List => JList, ArrayList => JArrayList}

@Component
@ConfigurationProperties(prefix = "kafka")
class KafkaConfig {

 @BeanProperty
 var bootstrapServers: JList[String] = new JArrayList[String]

 def getBootStrapServer: JList[String]  = bootstrapServers
}
jrcvhitl

jrcvhitl2#

您可以使用数组NOT LIST:

db:
  name: mysql
  dbs:
    - default
    - hive
    - test
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.stereotype.Component

import scala.beans.BeanProperty

@Component
@ConfigurationProperties(prefix = "db")
class DbConfig {

  @BeanProperty
  var name: String = _

  @BeanProperty
  var dbs:Array[String] = _
}

object DbConfig {
}

相关问题