首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从oracle-r2dbc版本0.4.0升级到1.0.0将导致在更新时类强制转换异常。

从oracle-r2dbc版本0.4.0升级到1.0.0将导致在更新时类强制转换异常。
EN

Stack Overflow用户
提问于 2022-10-05 05:49:10
回答 2查看 148关注 0票数 0

我试图将R2DBC从0.4.0升级到1.0.0。当我这样做的时候,我得到了更新中的错误,它在0.4.0版本中运行得很好。

我正在使用的Build.gradle

代码语言:javascript
运行
复制
plugins {
    id 'org.springframework.boot' version '2.7.2'
    id 'io.spring.dependency-management' version '1.0.12.RELEASE'
    id 'java'
}

group = '<group>'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    maven {
        url "https://nexus/repository/maven-public/"
    }
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

dependencies {
    implementation ('org.springframework.boot:spring-boot-starter-actuator:2.7.4') {
        exclude group: 'org.springframework.boot', module: 'spring-boot'
    }
    implementation 'org.springframework.boot:spring-boot:2.7.4'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.7.4'
    implementation ('org.springframework.boot:spring-boot-starter-data-r2dbc:2.7.4') {
        exclude group: 'io.r2dbc', module: 'r2dbc-spi'
        exclude group: 'io.r2dbc', module: 'r2dbc-pool'
        exclude group: 'org.springframework.data', module: 'spring-data-r2dbc'
        exclude group: 'io.projectreactor', module: 'reactor-core'
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter'
    }
    implementation 'io.r2dbc:r2dbc-spi:1.0.0.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter:2.7.4'
    implementation ('io.r2dbc:r2dbc-pool:1.0.0.RC1') {
        exclude group: 'io.projectreactor', module: 'reactor-core'
    }
    implementation ('org.springframework.data:spring-data-r2dbc:1.5.3') {
        exclude group: 'org.springframework', module: 'spring-r2dbc'
        exclude group: 'io.r2dbc', module: 'r2dbc-spi'
        exclude group: 'io.projectreactor', module: 'reactor-core'
        exclude group: 'org.springframework.data', module: 'spring-data-commons'
        exclude group: 'org.springframework.data', module: 'spring-data-relational'
        exclude group: 'org.springframework', module: 'spring-tx'
        exclude group: 'org.springframework', module: 'spring-context'
        exclude group: 'org.springframework', module: 'spring-beans'
        exclude group: 'org.springframework', module: 'spring-core'
    }
    implementation 'org.springframework.data:spring-data-commons:2.7.3'
    implementation 'org.springframework.data:spring-data-relational:2.4.3'
    implementation 'org.springframework:spring-tx:5.3.23'
    implementation 'org.springframework:spring-context:5.3.23'
    implementation 'org.springframework:spring-beans:5.3.23'
    implementation 'org.springframework:spring-core:5.3.23'


    implementation ('org.springframework:spring-r2dbc:5.3.23') {
        exclude group: 'io.r2dbc', module: 'r2dbc-spi'
        exclude group: 'io.projectreactor', module: 'reactor-core'
    }
    implementation 'io.projectreactor:reactor-core:3.4.23'



    implementation ('com.oracle.database.r2dbc:oracle-r2dbc:1.0.0') {
        exclude group: 'com.oracle.database.jdbc', module: 'ojdbc11'
        exclude group: 'io.projectreactor', module: 'reactor-core'
    }
    implementation ('org.springframework.boot:spring-boot-starter-webflux') {
        exclude group: 'io.projectreactor', module: 'reactor-core'
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter'
    }
    implementation files('./lib/eagle_commons-0.0.1-SNAPSHOT-plain.jar')
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'

    implementation ('sg.com.gic:crypto-lib:1.0.5') {
        exclude group: 'slf4j', module: 'slf4j-api'
        exclude group: 'ch.qos.logback', module: 'logback-core'
        exclude group: 'ch.qos.logback', module: 'logback-classic'
    }
    implementation group: 'com.oracle.database.jdbc', name: 'ojdbc11', version: '21.7.0.0'
    implementation group: 'org.springdoc', name: 'springdoc-openapi-webflux-ui', version: '1.6.11'
    implementation group: 'org.modelmapper', name: 'modelmapper', version: '3.1.0'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

下面是来自R2dbcRepository存储库的SQL查询:

代码语言:javascript
运行
复制
@Modifying
  @Query(value = "UPDATE <Table_name> SET PARAM_VALUE=:paramValue WHERE BATCH_ID=:batchId and PARAM_NAME=:paramName")
  Mono<Integer> updateODADateParam(String paramValue, String batchId, String paramName);

错误日志:

代码语言:javascript
运行
复制
2022-10-05 09:47:37,080 DEBUG [ForkJoinPool.commonPool-worker-3] org.springframework.r2dbc.core.DefaultDatabaseClient$DefaultGenericExecuteSpec: Executing SQL statement [UPDATE <table_name> SET PARAM_VALUE=:P0_paramValue WHERE BATCH_ID=:P1_batchId and PARAM_NAME=:P2_paramName]
2022-10-05 09:47:37,121 ERROR [ForkJoinPool.commonPool-worker-7] com.gic.eagle.txnHld.handler.RESIBatchDateHandler: Error [class java.lang.Long cannot be cast to class java.lang.Integer (java.lang.Long and java.lang.Integer are in module java.base of loader 'bootstrap')]
java.lang.ClassCastException: class java.lang.Long cannot be cast to class java.lang.Integer (java.lang.Long and java.lang.Integer are in module java.base of loader 'bootstrap')
    at java.base/java.util.stream.Collectors.lambda$summingInt$19(Collectors.java:673)
    at reactor.core.publisher.MonoStreamCollector$StreamCollectorSubscriber.onNext(MonoStreamCollector.java:132)
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmit(FluxFlatMap.java:543)
    at reactor.core.publisher.FluxFlatMap$FlatMapInner.onNext(FluxFlatMap.java:984)
    at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200)
    at reactor.core.publisher.FluxConcatArray$ConcatArrayDelayErrorSubscriber.onNext(FluxConcatArray.java:364)
    at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onNext(FluxFilterFuseable.java:118)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299)
    at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2398)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:360)
    at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.request(FluxFilterFuseable.java:191)
    at reactor.core.publisher.FluxConcatArray$ConcatArrayDelayErrorSubscriber.request(FluxConcatArray.java:461)
    at reactor.core.publisher.FluxPeek$PeekSubscriber.request(FluxPeek.java:138)
    at reactor.core.publisher.FluxFlatMap$FlatMapInner.onSubscribe(FluxFlatMap.java:964)
    at reactor.core.publisher.FluxPeek$PeekSubscriber.onSubscribe(FluxPeek.java:171)
    at reactor.core.publisher.FluxConcatArray$ConcatArrayDelayErrorSubscriber.onSubscribe(FluxConcatArray.java:350)
    at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onSubscribe(FluxFilterFuseable.java:87)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:265)
    at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)
    at reactor.core.publisher.Flux.subscribe(Flux.java:8466)
    at reactor.core.publisher.FluxConcatArray$ConcatArrayDelayErrorSubscriber.onComplete(FluxConcatArray.java:443)
    at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:73)
    at reactor.core.publisher.Flux.subscribe(Flux.java:8466)
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:426)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539)
    at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
    at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onNext(MonoFlatMapMany.java:250)
    at reactor.core.publisher.FluxUsingWhen$UsingWhenSubscriber.onNext(FluxUsingWhen.java:345)
    at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
    at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200)
    at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
    at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201)
    at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onNext(MonoFlatMapMany.java:250)
    at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2398)
    at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onSubscribeInner(MonoFlatMapMany.java:150)
    at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:189)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:172)
    at oracle.r2dbc.impl.AsyncLock.lambda$get$2(AsyncLock.java:167)
    at oracle.r2dbc.impl.AsyncLock.unlock(AsyncLock.java:125)
    at oracle.r2dbc.impl.AsyncLock$UsingConnectionSubscriber.terminate(AsyncLock.java:516)
    at oracle.r2dbc.impl.AsyncLock$UsingConnectionSubscriber.onComplete(AsyncLock.java:502)
    at reactor.core.publisher.StrictSubscriber.onComplete(StrictSubscriber.java:123)
    at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:2058)
    at org.reactivestreams.FlowAdapters$FlowToReactiveSubscriber.onComplete(FlowAdapters.java:221)
    at oracle.jdbc.internal.CompletionStageUtil$IteratorSubscription.emitComplete(CompletionStageUtil.java:804)
    at oracle.jdbc.internal.CompletionStageUtil$IteratorSubscription.emitItems(CompletionStageUtil.java:751)
    at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

最初在这里提出了这个问题:https://github.com/oracle/oracle-r2dbc/issues/97

从Oracle那里得到的信息是,问题可能与https://github.com/oracle/oracle-r2dbc/issues/89相同

如果有人能指出依赖版本的错误所在,那将是有帮助的。谢谢

EN

回答 2

Stack Overflow用户

发布于 2022-10-05 08:02:52

不要处理重写和手动管理依赖项。这只会导致问题。而且,使用Spring R2DBC与特定版本的R2DBC绑定在一起,因此您不能简单地升级,您必须等待支持该特定版本的版本。

如果您想重写版本,请遵循记录在案方法,而不是所有的排除和重写。

代码语言:javascript
运行
复制
plugins {
    id 'org.springframework.boot' version '2.7.4'
    id 'io.spring.dependency-management' version '1.0.12.RELEASE'
    id 'java'
}

group = '<group>'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    maven {
        url "https://nexus/repository/maven-public/"
    }
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

ext['oracle-database.version']='21.7.0.0'

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'

    implementation 'com.oracle.database.r2dbc:oracle-r2dbc'
    implementation files('./lib/eagle_commons-0.0.1-SNAPSHOT-plain.jar')
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'

    implementation 'sg.com.gic:crypto-lib:1.0.5' 
    implementation group: 'com.oracle.database.jdbc', name: 'ojdbc11'
    implementation group: 'org.springdoc', name: 'springdoc-openapi-webflux-ui', version: '1.6.11'
    implementation group: 'org.modelmapper', name: 'modelmapper', version: '3.1.0'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

这将修复所有的排除版本和不兼容版本。您不能在2.7 ( R2DBC Boot 2.7,AFAIK)中使用Spring1.0.0,您需要升级到Spring 3.0.0 (因为这包括适当的BOot数据版本和与Spring 2.7不兼容的R2DBC版本,因为它需要SpringFramework6、java 17等)。

如果您想升级,修改Spring插件版本,其他所有内容都应该自动包括在内。

票数 1
EN

Stack Overflow用户

发布于 2022-11-13 02:50:50

R2dbc 1.0.0引入了一些破坏性的更改(尤指)。一些集合函数,如。count返回Long而不是Integer。

我不认为SpringBoot2.7.x托管的Spring数据R2dbc已经为R2dbc 1.0.0做好了准备。最新的Spring R2dbc (对齐到R2dbc 1.0.0)被升级到SpringBoot3.0代码库。

  1. 继续使用SpringBoot2.7.5和内置的Spring R2dbc。
  2. 如果您想使用最新的R2dbc 1.0.0,请考虑SpringBoot3.0.0-RC2,SpringBoot3.0接近GA状态。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73956324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档