【问题标题】:Pass array list of topic names to @KafkaListener将主题名称的数组列表传递给@KafkaListener
【发布时间】:2020-01-17 01:52:42
【问题描述】:

我正在尝试关注 https://github.com/spring-projects/spring-kafka/issues/361 将主题名称从 .yml 文件传递​​给 @kafkalistener。但是编译器会抛出以下错误

Type mismatch.
Required:
Array<String>
Found:
String
 Unresolved reference: spring

下面是接收方代码

@Component
class Receiver {

    companion object {
        private val LOGGER = LoggerFactory.getLogger(Receiver::class.java)
    }

    @Autowired
    private val taskExecutor: TaskExecutor? = null

    @Autowired
    private val applicationContext: ApplicationContext? = null

    @KafkaListener(topics = "#{'${spring.kafka.topics}'.split(',')}")
    fun receive(@Header(KafkaHeaders.RECEIVED_TOPIC) topic: String) {

    }    
}

下面是我的 build.gradle 文件

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.1.7.RELEASE"
    id("io.spring.dependency-management") version "1.0.8.RELEASE"
    kotlin("jvm") version "1.2.71"
    kotlin("plugin.spring") version "1.2.71"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.springframework.kafka:spring-kafka")
}


tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

我在这里错过了什么?

【问题讨论】:

  • 就 Java 而言,您不能这样做。注释中的值必须是最终的,而不是动态代码。
  • ^ 显然排除了Spring自身的动态值。
  • 你必须在问题中提到你使用 Kotlin。我的意思是这件事上有一个特定的 SO 标签。这个故事更多的是关于 Kotlin,而不是 Spring……

标签: spring-boot kotlin spring-kafka


【解决方案1】:

这对我有用:

@KafkaListener(topics = ["#{'\${test.topics}'.split(',')}"])

注意我是如何将 Kotlin 语法应用于注解属性值的。 另外请记住,$ 是 Kotlin 中特定于模板的运算符,因此我们需要 转义 以使其成为进一步属性占位符解析的普通符号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2011-04-02
    • 2014-08-31
    相关资源
    最近更新 更多