【发布时间】: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