升级Micronaut到4.3.1启动报错:SessionFactory Bean加载失败
问题
将项目升级至Micronaut 4.3.1后,启动服务器时出现如下错误:
ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [org.hibernate.SessionFactory] could not be loaded: Error instantiating bean of type [io.micronaut.configuration.hibernate.jpa.conf.sessionfactory.configure.internal.ValidatorFactoryConfigurer] Message: Multiple possible bean candidates found: [DefaultConstraintValidatorFactory, DefaultInternalConstraintValidatorFactory] Path Taken: SessionFactoryPerDataSourceFactory.buildHibernateSessionFactoryBuilder(SessionFactoryBuilder sessionFactoryBuilder) --> new SessionFactoryPerDataSourceFactory(Environment environment,[List configures],StandardServiceRegistryBuilderCreator serviceRegistryBuilderSupplier,List standardServiceRegistryBuilderConfigurers,JpaConfiguration jpaConfiguration,ApplicationContext applicationContext,Integrator integrator) --> new ValidatorFactoryConfigurer([ValidatorFactory validatorFactory]) io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [org.hibernate.SessionFactory] could not be loaded: Error instantiating bean of type [io.micronaut.configuration.hibernate.jpa.conf.sessionfactory.configure.internal.ValidatorFactoryConfigurer]
使用Micronaut Data Hibernate JPA,原本预期应用能像4.2.X版本一样正常运行,这似乎是Hibernate配置问题。
解决方案
- 给其中一个
ValidatorFactory实现类添加@Primary注解,让Micronaut容器明确优先选择该Bean,示例代码:@Bean @Primary public ValidatorFactory defaultValidatorFactory() { return Validation.byDefaultProvider().configure().buildValidatorFactory(); } - 检查项目依赖,排除重复引入的Hibernate Validator相关模块。比如Maven环境下,在
micronaut-data-hibernate-jpa依赖中做排除:<dependency> <groupId>io.micronaut.data</groupId> <artifactId>micronaut-data-hibernate-jpa</artifactId> <exclusions> <exclusion> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </exclusion> </exclusions> </dependency> - 自定义
ValidatorFactoryConfigurerBean,手动注入指定的ValidatorFactory,绕开自动注入的候选冲突:@Bean public ValidatorFactoryConfigurer customValidatorFactoryConfigurer(ValidatorFactory validatorFactory) { return new ValidatorFactoryConfigurer(validatorFactory); } - 若上述方法暂不生效,可临时回退到Micronaut 4.2.X版本,等待官方发布该兼容性问题的修复补丁。
内容的提问来源于stack exchange,提问作者Kareem Elzayat
相关产品推荐
相关产品推荐

