Как использовать реактивный веб-клиент Spring в веб-приложении Spring, работающем на Tomcat - PullRequest
0 голосов
/ 25 апреля 2019

Невозможно использовать реактивный WebClient Spring в загрузочном веб-приложении Spring, которое работает на Tomcat.Сам запуск приложения не выполняется из-за неразрешенных зависимостей.

Я посмотрел на https://github.com/spring-projects/spring-boot/issues/9690, но, к сожалению, это не вариант для меня, так как я не могу установить тип WebApplication на None

Мой gradlefile:

dependencies {

    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa') {
        exclude(module: 'tomcat-juli')
    }
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis'


    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web'
    compile group: 'org.springframework.session', name: 'spring-session'

    compile group: 'org.hibernate', name: 'hibernate-java8'
    compile group: 'org.hibernate', name: 'hibernate-validator', version: '5.2.4.Final'

    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-guava'
    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-hibernate5'
    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310'

    compile group: 'com.google.guava', name: 'guava'
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.3.2'
    compile group: 'org.postgresql', name: 'postgresql'

    compile group: 'io.jsonwebtoken', name: 'jjwt', version:'0.9.0'

    compile group: 'com.nimbusds', name: 'nimbus-jose-jwt', version:'5.12'

    // Spring managed dependency is not working, so resorted to using specific version
    // compile('org.springframework.boot:spring-boot-starter-webflux')
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-webflux', version: '2.1.4.RELEASE'
    /*
    compile group: 'org.springframework', name: 'spring-web-reactive', version: '5.0.0.M1'
    compile group: 'org.springframework', name: 'spring-web', version: '5.1.6.RELEASE'
    */


    implementation 'com.auth0:jwks-rsa:0.7.0

}

bootRepackage {
    enabled = false
}

Ошибка:

Caused by: java.lang.NoClassDefFoundError: org/springframework/http/client/reactive/ClientHttpConnector
        at org.springframework.web.reactive.function.client.WebClient.create(WebClient.java:144)

Затем я попытался добавить,

compile group: 'org.springframework', name: 'spring-web-reactive', version: '5.0.0.M1'

Который потом жаловался на что-то еще, что заставило меня добавить

compile group: 'org.springframework', name: 'spring-web', version: '5.1.6.RELEASE'

Но при запуске моего приложения появляется другая ошибка, которая заставляет меня думать, что есть какая-то другая проблема.

Если быть точным, я просто хочу вызвать MicroService с использованием Reactive WebClient из другогоMicroService (веб-приложение на основе Spring Boot).

Использование RestTemplate работает нормально , но я просто хотел попробовать реактивный WebClient и застрял с ошибкой.

Из-заКак мы размещаем наши зависимости, управляемые зависимости не работают.Наш сервер зависимостей не может их разрешить.Это причина наличия конкретной версии загрузочных зависимостей

1 Ответ

1 голос
/ 26 апреля 2019

org.springframework.http.client.reactive.ClientHttpConnector является частью банки spring-web, поэтому она должна быть доступна, если используется spring-boot-starter-webflux или spring-boot-starter-web.Если вы пишете традиционное приложение на основе сервлетов, тогда вы должны использовать spring-boot-starter-web.

. Проверьте вывод gradle dependencies, чтобы убедиться, что у вас есть spring-web банка.Если вы это сделаете, скорее всего, он каким-то образом поврежден, и вам следует очистить кеш-память.

Я бы также рекомендовал использовать управляемые зависимости Spring Boot , а не указывать номера версий для каждого из них.зависимость.Это обеспечит получение версий, которые хорошо работают вместе.

...