Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关闭simple Micronaut CLI数据应用程序时出错_Java_Micronaut_Dbcp - Fatal编程技术网

Java 关闭simple Micronaut CLI数据应用程序时出错

Java 关闭simple Micronaut CLI数据应用程序时出错,java,micronaut,dbcp,Java,Micronaut,Dbcp,我刚刚开发了一个小型micronaut CLI应用程序,用于探索micronaut jdbc和sql特性。以下是依赖项: dependencies { annotationProcessor("info.picocli:picocli-codegen:4.2.0") annotationProcessor("io.micronaut.data:micronaut-data-processor") implementation(&qu

我刚刚开发了一个小型micronaut CLI应用程序,用于探索micronaut jdbc和sql特性。以下是依赖项:

dependencies {
    annotationProcessor("info.picocli:picocli-codegen:4.2.0")
    annotationProcessor("io.micronaut.data:micronaut-data-processor")
    implementation("io.micronaut:micronaut-validation")
    implementation("io.micronaut:micronaut-runtime")
    implementation("info.picocli:picocli")
    implementation("io.micronaut.picocli:micronaut-picocli")
    implementation("javax.annotation:javax.annotation-api")
    implementation("io.micronaut.sql:micronaut-jdbc-dbcp")
    implementation("io.micronaut.data:micronaut-data-jdbc")
    runtimeOnly("ch.qos.logback:logback-classic")
    runtimeOnly("com.microsoft.sqlserver:mssql-jdbc")
    testImplementation("io.micronaut:micronaut-http-client")
    testImplementation(platform("org.testcontainers:testcontainers-bom:1.14.3"))
    testRuntimeOnly("org.testcontainers:mssqlserver")
}
应用程序运行正常,但退出时失败,出现以下错误:

    java.lang.ClassCastException: class io.micronaut.transaction.jdbc.TransactionAwareDataSource$DataSourceProxy cannot be cast to class io.micronaut.configuration.jdbc.dbcp.DatasourceConfiguration (io.micronaut.transaction.jdbc.TransactionAwareDataSource$DataSourceProxy and io.micronaut.configuration.jdbc.dbcp.DatasourceConfiguration are in unnamed module of loader 'app')
            at io.micronaut.configuration.jdbc.dbcp.$DatasourceConfigurationDefinition.dispose(Unknown Source)
            at io.micronaut.context.BeanDefinitionDelegate$ProxyDisposableBeanDefinition.dispose(BeanDefinitionDelegate.java:257)
            at io.micronaut.inject.DisposableBeanDefinition.dispose(DisposableBeanDefinition.java:41)
            at io.micronaut.context.DefaultBeanContext.stop(DefaultBeanContext.java:290)
            at io.micronaut.context.DefaultApplicationContext.stop(DefaultApplicationContext.java:171)
            at io.micronaut.context.DefaultApplicationContext.stop(DefaultApplicationContext.java:49)
            at io.micronaut.context.LifeCycle.close(LifeCycle.java:61)
            at io.micronaut.configuration.picocli.PicocliRunner.run(PicocliRunner.java:115)
            at mnsdb.MnsdbCommand.main(MnsdbCommand.java:21)
我试图在
$DatasourceConfigurationDefinition
并发现在dispose方法中有一条checkcast指令(检查第1行)

因此,显然micronaut正在用
TransactionWareDataSource$DataSourceProxy
替换
io.micronaut.configuration.jdbc.dbcp.DatasourceConfiguration
的实例,但在初始化上下文的同时处理bean。。它失败,因为无法将代理强制转换为它已包装的实例

这看起来像是一个非常简单的错误(micronaut的自动化测试套件可能捕捉到了这个错误),所以我觉得这一定是由于依赖项中的一些错误配置造成的


非常感谢您的帮助。

当我使用Hikari(jdbc Hikari)时,问题消失了,而不是dbcp

看来jdbc dbcp数据源实现存在一些问题

  public java.lang.Object dispose(io.micronaut.context.BeanResolutionContext arg0, io.micronaut.context.BeanContext arg1, java.lang.Object arg2);
     0  aload_3 [arg2]
     1  checkcast io.micronaut.configuration.jdbc.dbcp.DatasourceConfiguration [9]
     4  astore 4
     6  aload_0 [this]
     7  aload_1 [arg0]
     8  aload_2 [arg1]
     9  checkcast io.micronaut.context.DefaultBeanContext [593]
    12  aload_3 [arg2]
    13  invokespecial io.micronaut.context.AbstractParametrizedBeanDefinition.preDestroy(io.micronaut.context.BeanResolutionContext, io.micronaut.context.BeanContext, java.lang.Object) : java.lang.Object [612]
    16  aload 4
    18  invokevirtual io.micronaut.configuration.jdbc.dbcp.DatasourceConfiguration.preDestroy() : void [618]
    21  aload 4
    23  areturn