0

I added postgres support to my application, but when I try to run the tests, I keep getting a blocking call error from blockhound, and I'm not sure why this is happening. The application it's runs fine, only the tests fail with the blocking call error.

These are my app dependencies:

    plugins {
    id 'org.springframework.boot'
}

    dependencies {
        annotationProcessor 'org.projectlombok:lombok'
        testAnnotationProcessor 'org.projectlombok:lombok'
        compileOnly 'org.projectlombok:lombok'
        testCompileOnly 'org.projectlombok:lombok'
    implementation 'io.projectreactor:reactor-tools'

    implementation 'software.amazon.awssdk:dynamodb-enhanced'

    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive'

    implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'io.r2dbc:r2dbc-postgresql'
    implementation 'org.postgresql:postgresql'
    implementation 'org.flywaydb:flyway-core'

    implementation 'com.github.bsideup.liiklus:client'

    implementation 'com.auth0:java-jwt'

    implementation 'org.springdoc:springdoc-openapi-webflux-core'
    implementation 'org.springdoc:springdoc-openapi-security'
    implementation 'org.springdoc:springdoc-openapi-webflux-ui'

    runtimeOnly 'io.sentry:sentry-logback'

    testRuntimeOnly 'io.sentry:sentry-logback'

    testImplementation 'com.amazonaws:aws-java-sdk-dynamodb'
    testImplementation 'com.github.bsideup.liiklus:testing'
    testImplementation 'io.projectreactor.tools:blockhound-junit-platform'
    testImplementation 'io.projectreactor:reactor-test'
    testImplementation 'io.rest-assured:rest-assured'
    testImplementation 'org.assertj:assertj-core'
    testImplementation 'org.awaitility:awaitility'
    testImplementation 'org.bouncycastle:bcprov-jdk15on'
    testImplementation 'org.mock-server:mockserver-client-java'
    testImplementation 'org.mock-server:mockserver-netty'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.testcontainers:localstack'
    testImplementation "org.testcontainers:testcontainers"
    testImplementation 'org.testcontainers:mockserver'
    testImplementation "org.testcontainers:junit-jupiter"

    testImplementation "org.testcontainers:postgresql"
    testImplementation "org.testcontainers:r2dbc"

    testRuntimeOnly "net.java.dev.jna:jna:5.12.1"

    //http://github.com/gradle/gradle/issues/8806 requires platform launcher in test runtime explicitly
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

Then I added these dependencies in the project build.gradle:

        dependency 'io.r2dbc:r2dbc-postgresql:0.8.12.RELEASE'
        dependency 'org.flywaydb:flyway-core:8.5.10'
        testImplementation 'org.postgresql:postgresql'

Then I have a test container logic like so:

var jdbcUrl = postgresqlContainer.getJdbcUrl();
    var r2dbcUrl = jdbcUrl.replaceAll("jdbc", "r2dbc");

    log.info("Set JDBC url: {}", jdbcUrl);
    log.info("Set R2DBC url: {}", r2dbcUrl);

    System.getProperties().put("spring.flyway.url", jdbcUrl);
    System.getProperties().put("spring.r2dbc.url", r2dbcUrl);

    Flyway flyway = Flyway.configure().dataSource(
            postgresqlContainer.getJdbcUrl(),
            postgresqlContainer.getUsername(),
            postgresqlContainer.getPassword()
    ).load();

    flyway.migrate();

Finally I had some configurations in app.yml, for setting test postgres url and credentials. And that's basically it. But when I run the tests, I get this error/stack trace:

    reactor.blockhound.BlockingOperationError: Blocking call! java.io.RandomAccessFile#readBytes
    at java.base/java.io.RandomAccessFile.readBytes(RandomAccessFile.java)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Assembly trace from producer [reactor.core.publisher.MonoFlatMap] :
    reactor.core.publisher.Mono.flatMap
    org.springframework.web.reactive.result.method.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:137)
Error has been observed at the following site(s):
    |_           Mono.flatMap ⇢ at org.springframework.web.reactive.result.method.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:137)
    |_                        ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.lambda$handle$1(RequestMappingHandlerAdapter.java:199)
    |_             Mono.defer ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:199)
    |_              Mono.then ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:199)
    |_          Mono.doOnNext ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:200)
    |_          Mono.doOnNext ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:201)
    |_             Mono.error ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handleException(RequestMappingHandlerAdapter.java:235)
    |_                        ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.lambda$handle$0(RequestMappingHandlerAdapter.java:195)
    |_     Mono.onErrorResume ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:202)
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_     Mono.switchIfEmpty ⇢ at org.springframework.security.web.server.authorization.AuthorizationWebFilter.filter(AuthorizationWebFilter.java:55)
    |_             checkpoint ⇢ org.springframework.security.web.server.authorization.AuthorizationWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_     Mono.onErrorResume ⇢ at org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter.filter(ExceptionTranslationWebFilter.java:44)
    |_             checkpoint ⇢ org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_              Mono.then ⇢ at org.springframework.security.web.server.authentication.logout.LogoutWebFilter.filter(LogoutWebFilter.java:62)
    |_     Mono.switchIfEmpty ⇢ at org.springframework.security.web.server.authentication.logout.LogoutWebFilter.filter(LogoutWebFilter.java:62)
    |_               Mono.map ⇢ at org.springframework.security.web.server.authentication.logout.LogoutWebFilter.filter(LogoutWebFilter.java:62)
    |_           Mono.flatMap ⇢ at org.springframework.security.web.server.authentication.logout.LogoutWebFilter.filter(LogoutWebFilter.java:63)
    |_           Mono.flatMap ⇢ at org.springframework.security.web.server.authentication.logout.LogoutWebFilter.filter(LogoutWebFilter.java:63)
    |_             checkpoint ⇢ org.springframework.security.web.server.authentication.logout.LogoutWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_                        ⇢ at org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter.lambda$filter$1(ServerRequestCacheWebFilter.java:39)
    |_           Mono.flatMap ⇢ at org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter.filter(ServerRequestCacheWebFilter.java:39)
    |_             checkpoint ⇢ org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_                        ⇢ at org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter.filter(SecurityContextServerWebExchangeWebFilter.java:38)
    |_             checkpoint ⇢ org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_                        ⇢ at org.springframework.security.web.server.authentication.WebFilterChainServerAuthenticationSuccessHandler.onAuthenticationSuccess(WebFilterChainServerAuthenticationSuccessHandler.java:36)
    |_              Mono.then ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.onAuthenticationSuccess(AuthenticationWebFilter.java:135)
    |_ Mono.subscriberContext ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.onAuthenticationSuccess(AuthenticationWebFilter.java:136)
    |_                        ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.lambda$authenticate$7(AuthenticationWebFilter.java:124)
    |_           Mono.flatMap ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.authenticate(AuthenticationWebFilter.java:124)
    |_         Mono.doOnError ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.authenticate(AuthenticationWebFilter.java:126)
    |_                        ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.lambda$filter$3(AuthenticationWebFilter.java:114)
    |_           Mono.flatMap ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.filter(AuthenticationWebFilter.java:114)
    |_     Mono.onErrorResume ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.filter(AuthenticationWebFilter.java:115)
    |_             checkpoint ⇢ org.springframework.security.web.server.authentication.AuthenticationWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_ Mono.subscriberContext ⇢ at org.springframework.security.web.server.context.ReactorContextWebFilter.filter(ReactorContextWebFilter.java:47)
    |_             checkpoint ⇢ org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_                        ⇢ at org.springframework.security.web.server.csrf.CsrfWebFilter.lambda$continueFilterChain$10(CsrfWebFilter.java:165)
    |_             Mono.defer ⇢ at org.springframework.security.web.server.csrf.CsrfWebFilter.continueFilterChain(CsrfWebFilter.java:162)
    |_              Mono.then ⇢ at org.springframework.security.web.server.csrf.CsrfWebFilter.filter(CsrfWebFilter.java:124)
    |_     Mono.switchIfEmpty ⇢ at org.springframework.security.web.server.csrf.CsrfWebFilter.filter(CsrfWebFilter.java:124)
    |_     Mono.onErrorResume ⇢ at org.springframework.security.web.server.csrf.CsrfWebFilter.filter(CsrfWebFilter.java:125)
    |_             checkpoint ⇢ org.springframework.security.web.server.csrf.CsrfWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_                        ⇢ at org.springframework.security.web.server.header.HttpHeaderWriterWebFilter.filter(HttpHeaderWriterWebFilter.java:44)
    |_             checkpoint ⇢ org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_ Mono.subscriberContext ⇢ at org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter.filter(ServerHttpSecurity.java:2936)
    |_             checkpoint ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_                        ⇢ at org.springframework.web.server.handler.FilteringWebHandler.handle(FilteringWebHandler.java:59)
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_                        ⇢ at org.springframework.security.web.server.WebFilterChainProxy.lambda$filter$4(WebFilterChainProxy.java:56)
    |_           Mono.flatMap ⇢ at org.springframework.security.web.server.WebFilterChainProxy.filter(WebFilterChainProxy.java:56)
    |_             checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_          Mono.doOnEach ⇢ at org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter.filter(MetricsWebFilter.java:87)
    |_        Mono.doOnCancel ⇢ at org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter.filter(MetricsWebFilter.java:88)
    |_ Mono.transformDeferred ⇢ at org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter.filter(MetricsWebFilter.java:82)
    |_             checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
    |_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
    |_             Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
    |_                        ⇢ at org.springframework.web.server.handler.FilteringWebHandler.handle(FilteringWebHandler.java:59)
    |_                        ⇢ at org.springframework.web.server.handler.WebHandlerDecorator.handle(WebHandlerDecorator.java:56)
    |_             Mono.error ⇢ at org.springframework.web.server.handler.ExceptionHandlingWebHandler$CheckpointInsertingHandler.handle(ExceptionHandlingWebHandler.java:98)
    |_             checkpoint ⇢ HTTP GET "/subjects/me/services/health" [ExceptionHandlingWebHandler]
    |_                        ⇢ at org.springframework.web.server.handler.ExceptionHandlingWebHandler.lambda$handle$0(ExceptionHandlingWebHandler.java:77)
    |_     Mono.onErrorResume ⇢ at org.springframework.web.server.handler.ExceptionHandlingWebHandler.handle(ExceptionHandlingWebHandler.java:77)
Stack trace:
        at java.base/java.io.RandomAccessFile.readBytes(RandomAccessFile.java)
        at java.base/java.io.RandomAccessFile.read(RandomAccessFile.java:404)
        at java.base/java.io.RandomAccessFile.readFully(RandomAccessFile.java:468)
        at java.base/java.util.zip.ZipFile$Source.readFullyAt(ZipFile.java:1314)
        at java.base/java.util.zip.ZipFile$ZipFileInputStream.initDataOffset(ZipFile.java:913)
        at java.base/java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:929)
        at java.base/java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:446)
        at java.base/java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
        at java.base/java.io.InputStream.readNBytes(InputStream.java:506)
        at java.base/java.util.jar.JarFile.getBytes(JarFile.java:813)
        at java.base/java.util.jar.JarFile.checkForSpecialAttributes(JarFile.java:1003)
        at java.base/java.util.jar.JarFile.isMultiRelease(JarFile.java:390)
        at java.base/java.util.jar.JarFile.getEntry(JarFile.java:512)
        at java.base/sun.net.www.protocol.jar.URLJarFile.getEntry(URLJarFile.java:131)
        at java.base/sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:137)
        at java.base/sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:155)
        at java.base/java.util.ResourceBundle$Control$2.run(ResourceBundle.java:3227)
        at java.base/java.util.ResourceBundle$Control$2.run(ResourceBundle.java:3216)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:554)
        at java.base/java.util.ResourceBundle$Control.newBundle(ResourceBundle.java:3215)
        at java.base/java.util.ResourceBundle.loadBundle(ResourceBundle.java:1987)
        at java.base/java.util.ResourceBundle.findBundle(ResourceBundle.java:1769)
        at java.base/java.util.ResourceBundle.findBundle(ResourceBundle.java:1721)
        at java.base/java.util.ResourceBundle.findBundle(ResourceBundle.java:1721)
        at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1655)
        at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1586)
        at java.base/java.util.ResourceBundle.getBundle(ResourceBundle.java:1278)
        at org.hibernate.validator.resourceloading.PlatformResourceBundleLocator.loadBundle(PlatformResourceBundleLocator.java:234)
        at org.hibernate.validator.resourceloading.PlatformResourceBundleLocator.doGetResourceBundle(PlatformResourceBundleLocator.java:199)
        at org.hibernate.validator.resourceloading.PlatformResourceBundleLocator.getResourceBundle(PlatformResourceBundleLocator.java:183)
        at org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator.resolveMessage(AbstractMessageInterpolator.java:455)
        at org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator.lambda$interpolateMessage$0(AbstractMessageInterpolator.java:399)
        at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330)
        at org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator.interpolateMessage(AbstractMessageInterpolator.java:399)
        at org.hibernate.validator.messageinterpolation.AbstractMessageInterpolator.interpolate(AbstractMessageInterpolator.java:355)
        at org.springframework.validation.beanvalidation.LocaleContextMessageInterpolator.interpolate(LocaleContextMessageInterpolator.java:51)
        at org.hibernate.validator.internal.engine.validationcontext.AbstractValidationContext.interpolate(AbstractValidationContext.java:322)
        at org.hibernate.validator.internal.engine.validationcontext.AbstractValidationContext.addConstraintFailure(AbstractValidationContext.java:231)
        at org.hibernate.validator.internal.engine.validationcontext.ParameterExecutableValidationContext.addConstraintFailure(ParameterExecutableValidationContext.java:38)
        at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:79)
        at org.hibernate.validator.internal.metadata.core.MetaConstraint.doValidateConstraint(MetaConstraint.java:130)
        at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:123)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:555)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraints(ValidatorImpl.java:537)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateParametersForSingleGroup(ValidatorImpl.java:991)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateParametersForGroup(ValidatorImpl.java:932)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateParametersInContext(ValidatorImpl.java:863)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateParameters(ValidatorImpl.java:283)
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateParameters(ValidatorImpl.java:235)
        at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:110)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)
        at services.vivy.integrations.api.ServicesApi$$EnhancerBySpringCGLIB$$60998295.getServiceIntegrations(<generated>)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$invoke$0(InvocableHandlerMethod.java:146)
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:125)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815)
        at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:251)
        at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:336)
        at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815)
        at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onComplete(FluxDefaultIfEmpty.java:108)
        at reactor.core.publisher.Operators.complete(Operators.java:136)
        at reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:45)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4150)
        at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:128)
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)

I also have a blockhound configuration class:

    @Override
public void applyTo(BlockHound.Builder builder) {
    builder
            .allowBlockingCallsInside(
                    UUID.class.getName(),
                    "randomUUID"
            )
            .allowBlockingCallsInside(
                    "software.amazon.awssdk.http.nio.netty.internal.BetterSimpleChannelPool",
                    "close"
            )
            .allowBlockingCallsInside(
                    "org.springframework.validation.beanvalidation.MethodValidationInterceptor",
                    "invoke"
            )
    ;
}

Please is there something I need to do differently to make this work? I have gone through the stack trace, but I don't have much understanding of what the issue could be. I tried allowing calls from beanVaildation in blockhound like so:

.allowBlockingCallsInside(
                        "org.springframework.validation.beanvalidation.MethodValidationInterceptor",
                        "invoke"
                )

But the issue still persists.

  • As stacktrace shows, you have Hibernate trying to replace a message placesholder with data in classpath, and to do so it needs an IO operation, which is blocking – Igor Artamonov Aug 25 '23 at 12:01
  • Can you share with us, please, your `ServicesApi.getServiceIntegrations()` which is marked with `@Validated`? – Artem Bilan Aug 28 '23 at 14:47

0 Answers0