我在 Scala 中使用 Spring Boot。我想通过 @ConfigurationProperties 注释读取具有 Scala 类型的案例类的属性。我已经知道我将无法注释 Scala 案例类,因为 Spring Boot 不支持基于构造的属性注入。但至少我想将集合(列表和映射)从配置映射到基于 Scala 的类型。这样我就可以编写一个配置类:
@Component
@ConfigurationProperties("kafka")
case class KafkaConfig() {
@BeanProperty
var bootstrapServers: List[String] = _
}
Run Code Online (Sandbox Code Playgroud)
并像这样编写一个配置文件 application.yml:
kafka:
bootstrapServers:
- "node1:9092"
- "node2:9092"
Run Code Online (Sandbox Code Playgroud)
这可能吗?我尝试在这种情况下使用转换器,如下所示:
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
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为 Spring 尝试不转换已经读取的 (java) 列表,而是实例化一个空的 Scala 列表并附加到它。所以我肯定会在这里走错路。
我将不胜感激。
小智 1
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
}
Run Code Online (Sandbox Code Playgroud)
或者
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1067 次 |
| 最近记录: |