Micronaut 4升级后JDBC访问SQL Server遇TransactionOperations缺失错误求助
解决Micronaut 4升级后TransactionOperations缺失问题
问题场景
将应用升级至Micronaut 4,已按官方指南完成修改,应用可正常启动,但从SQL Server获取数据时抛出如下错误:
Exception in thread "DefaultDispatcher-worker-1" io.micronaut.context.exceptions.ConfigurationException: No backing TransactionOperations configured. Check your configuration and try again Caused by: io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [io.micronaut.transaction.TransactionOperations] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor). at io.micronaut.context.DefaultBeanContext.newNoSuchBeanException(DefaultBeanContext.java:2773) at io.micronaut.context.DefaultApplicationContext.newNoSuchBeanException(DefaultApplicationContext.java:304) at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2735) at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1729) at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:856) at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:841) at io.micronaut.transaction.support.DefaultTransactionOperationsRegistry.provideSynchronous(DefaultTransactionOperationsRegistry.java:49)
触发问题的方法代码:
@jakarta.transaction.Transactional fun loadIndex(index: String) = runBlocking { logger.info { "Starting load..." } loadRepository.pullLoadRecords() }
已正常配置application.yaml数据源,升级前运行无异常,推测为Micronaut 4升级疏漏导致。
解决方案建议
补充事务相关依赖
Micronaut 4对事务模块做了拆分,需确保引入JDBC事务依赖:
Gradle(Kotlin DSL)配置:implementation("io.micronaut.sql:micronaut-jdbc-tx") implementation("io.micronaut.data:micronaut-data-jdbc") // 若使用Micronaut DataMaven配置:
<dependency> <groupId>io.micronaut.sql</groupId> <artifactId>micronaut-jdbc-tx</artifactId> </dependency> <dependency> <groupId>io.micronaut.data</groupId> <artifactId>micronaut-data-jdbc</artifactId> </dependency>确认注解处理器配置
Kotlin项目需确保注解处理器正确配置,Gradle中添加:annotationProcessor("io.micronaut.data:micronaut-data-processor") kapt("io.micronaut.inject:micronaut-inject-kotlin")确保这些依赖版本与Micronaut 4核心版本一致。
验证事务注解兼容性
尝试将@jakarta.transaction.Transactional替换为Micronaut自带的@io.micronaut.transaction.annotation.Transactional注解,部分场景下该注解的自动代理逻辑更适配Micronaut 4的事务体系。检查数据源配置细节
确认application.yaml中数据源配置完整,需包含方言配置以适配SQL Server:datasources: default: url: jdbc:sqlserver://localhost:1433;databaseName=your_db driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver username: sa password: your_password dialect: SQL_SERVER若存在多数据源,需指定默认事务管理器:
micronaut: transaction: default: default
内容的提问来源于stack exchange,提问作者Bart Romano
相关产品推荐
相关产品推荐

