当我没有使用该批注或与MVC相关的任何依赖项时,Spring会抱怨@EnableWebMvc

时间:2019-07-12 06:50:39

标签: spring spring-boot kotlin spring-webflux reactor

我正在使用反应式Spring Boot API服务器。我最初想使用MVC模式,但我认为使用Reactor是个好主意。

所以我删除了所有对MVC的spring依赖(我相信)。

但是spring一直抱怨我不能在@EnableWebMvc中使用@EnableWebFlux

以下是我的错误日志

Caused by: java.lang.IllegalStateException: The Java/XML config for Spring MVC and Spring WebFlux cannot both be enabled, e.g. via @EnableWebMvc and @EnableWebFlux, in the same application.

可能是什么问题?我确定确实更新了我的依赖项。

然后是我的build.gradle.kts文件

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

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        "classpath"(group = "gradle.plugin.com.palantir.gradle.docker", name = "gradle-docker")
    }
}

plugins {
    kotlin("plugin.jpa") version "1.3.40"
    id("org.springframework.boot") version "2.1.6.RELEASE"
    id("io.spring.dependency-management") version "1.0.7.RELEASE"
    id("com.palantir.docker") version "0.22.1"
    kotlin("jvm") version "1.3.40"
    kotlin("plugin.spring") version "1.3.40"
}

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

val developmentOnly by configurations.creating
configurations {
    runtimeClasspath {
        extendsFrom(developmentOnly)
    }
}

repositories {
    mavenCentral()
    maven(url = "https://repo.spring.io/snapshot")
    maven(url = "https://repo.spring.io/milestone")
}

extra["springCloudVersion"] = "Greenwich.SR1"

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-batch")
    implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    //reactor
    implementation("io.projectreactor:reactor-core")
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("org.springframework.data:spring-data-jdbc:1.0.0.r2dbc-SNAPSHOT")
    implementation("org.springframework.data:spring-data-r2dbc:1.0.0.M1")
    implementation("io.r2dbc:r2dbc-spi:1.0.0.M5")
    implementation("io.r2dbc:r2dbc-postgresql:1.0.0.M6")

    developmentOnly("org.springframework.boot:spring-boot-devtools")
    runtimeOnly("org.postgresql:postgresql")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("io.projectreactor:reactor-test")
    testImplementation("org.springframework.batch:spring-batch-test")

    annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
        exclude(group = "junit", module = "junit")
    }
}

dependencyManagement {
    imports {
        mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}")
        mavenBom("io.projectreactor:reactor-bom:Bismuth-RELEASE")
    }
}

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


task<Copy>("unpack") {
    dependsOn(tasks.getByName("bootJar"))
    from(zipTree(tasks.getByName("bootJar").outputs.files.singleFile))
    into("build/dependency")
}

1 个答案:

答案 0 :(得分:0)

我通过删除每个依赖项来解决这个问题。

问题是

implementation("org.springframework.boot:spring-boot-starter-web")

删除它后,它起作用了。也许以上依赖关系对WebMvc都有它自己的依赖关系,但我不确定。