springboot创建persistenceExceptionTranslationPostProcessor的bean时出错

我有一个 Spring Boot 项目,代码在 intellij IDEA 中运行时运行良好,但是打包后不管是在本地还是服务器都启不起来

部分报错信息如下:

Exclusions:
-----------

    org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration


Unconditional classes:
----------------------

    org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration

    com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration

    org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration

    org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration

    org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration

    org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration



11:26:54 [main] ERROR o.s.boot.SpringApplication - Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'persistenceExceptionTranslationPostProcessor' defined in class path resource [org/springframework/boot/autoconfigure/dao/PersistenceExceptionTranslationAutoConfiguration.class]: Unsatisfied dependency expressed through method 'persistenceExceptionTranslationPostProcessor' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'monitoringInformationMapper' defined in URL [jar:file:/D:/hlj/hlj-newwlw/wlw-jar/new-wlw-20230327.jar!/BOOT-INF/classes!/com/framework/BussinessModule/MonitoringInformation/mapper/MonitoringInformationMapper.class]: Unsatisfied dependency expressed through constructor parameter 0: Could not convert argument value of type [java.lang.String] to required type [java.lang.Class]: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Class'; nested exception is java.lang.IllegalArgumentException: Could not find class [com.framework.BussinessModule.MonitoringInformation.Mapper.MonitoringInformationMapper]
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:539)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
        at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:229)
        at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:722)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:535)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
        at com.framework.BaseFrameworkApplication.main(BaseFrameworkApplication.java:25)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:109)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'monitoringInformationMapper' defined in URL [jar:file:/D:/hlj/hlj-newwlw/wlw-jar/new-wlw-20230327.jar!/BOOT-INF/classes!/com/framework/BussinessModule/MonitoringInformation/mapper/MonitoringInformationMapper.class]: Unsatisfied dependency expressed through constructor parameter 0: Could not convert argument value of type [java.lang.String] to required type [java.lang.Class]: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Class'; nested exception is java.lang.IllegalArgumentException: Could not find class [com.framework.BussinessModule.MonitoringInformation.Mapper.MonitoringInformationMapper]
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:766)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:228)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1358)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:1008)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:885)
        at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:613)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:539)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:497)
        at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:265)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1472)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1269)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1226)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:885)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789)
        ... 28 common frames omitted

原因:

之前新写的一个模块,这个Mapper文件夹估计是自己手动新建的,M是大写的

在这里插入图片描述

然后类是用MybatisCodeGenerator自动生成的
在这里插入图片描述

就导致mapper接口导包导入的文件夹大小写对不上

在这里插入图片描述

但是这个报错在IDEA里正常看不到,要点到这个mapper接口里才能看到

解决办法

把导包的路径更正即可

在这里插入图片描述

总结

不知道为什么,包导错了在IDEA里debug,服务可以正常使用,没有任何问题,并且也没有任何报错。只有打包运行才会暴露问题,具体什么原因没有深究,可能是因为IDEA的编译器比较强大帮我纠错了吧。

这个问题浪费了半天时间。。各种百度也没找到有人和我发生相同问题的,最后挨个检查代码发现的。特此记录一下。一般出现这种问题多看看mapper、配置文件、启动类、@Service注解、Controller注解,接口请求映射路径有没有重名呀。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spring Boot提供了多种方式来动态创建Bean,以下是其中几种常见的方式: 1. 使用@Bean注解动态创建Bean 在Spring Boot中,我们可以使用@Bean注解来创建Bean,只需要在方法上添加@Bean注解,并返回需要创建Bean对象即可。例如: ``` @Configuration public class MyConfig { @Bean public MyBean myBean() { return new MyBean(); } } ``` 2. 使用@Import注解动态创建Bean @Import注解可以用来导入其他配置类,从而实现动态创建Bean的目的。例如: ``` @Configuration @Import(MyBeanConfig.class) public class MyConfig { } ``` 其中,MyBeanConfig是一个配置类,用来创建MyBean对象。 3. 使用FactoryBean动态创建Bean FactoryBean是一个接口,可以用来创建复杂的Bean对象。我们可以实现FactoryBean接口,并在实现类中实现创建Bean的逻辑。例如: ``` public class MyBeanFactory implements FactoryBean<MyBean> { @Override public MyBean getObject() throws Exception { return new MyBean(); } @Override public Class<?> getObjectType() { return MyBean.class; } @Override public boolean isSingleton() { return true; } } ``` 然后,在配置类中使用@Bean注解将MyBeanFactory对象注入到Spring容器中: ``` @Configuration public class MyConfig { @Bean public MyBeanFactory myBeanFactory() { return new MyBeanFactory(); } } ``` 这样,当我们需要获取MyBean对象,只需要从Spring容器中获取MyBeanFactory对象,并调用getObject()方法即可。 以上是几种常见的动态创建Bean的方式,具体使用哪种方式,需要根据具体的业务场景来选择。 ### 回答2: 随着软件开发的不断发展,我们的应用程序越来越复杂,我们需要越来越多的 bean 来管理它们的生命周期。在 Spring 框架的帮助下,我们可以使用依赖注入来管理这些 bean。Spring BootSpring 框架的一个子项目,提供了很多便捷的工具来简化 Spring 的配置,并且可以通过自动配置来减少开发人员的工作负担。本文将会详细介绍 Spring Boot 动态创建 bean 这个重要的功能。 动态创建 bean 通常意味着我们需要在程序运行根据一些条件来创建实例,而不是在应用程序启动预先定义 bean。Spring Boot 提供了两种主要的方式来实现动态创建 bean: 一、使用@Bean注解 我们可以使用 Spring Boot 中的 @Bean 注解来动态创建 bean。@Bean 注解在方法上使用,可以指示 Spring 容器在每次调用返回该 bean 实例。当我们使用 @Bean 注解Spring Boot 将会自动检测程序中任何具有 @Configuration 注解的类,并注册其中声明的 @Bean 方法。 例如下面代码: ``` @Configuation public class MyConfiguration { @Bean public MyBean myBean() { return new MyBean(); } } ``` 在这个示例中,我们创建了一个 @Configuation 类 MyConfiguration,并使用 @Bean 注解依赖注入 MyBean。每次调用 myBean() 方法Spring Boot 都会返回一个新的 MyBean 实例。 二、使用@Autowired 注解 另外一种方法是在运行使用 @Autowired 注解来注入 bean。通过创建一个类并注入一个 bean 后,我们可以创建一个新的 bean。例如: ``` @Service public class MyService { @Autowired private ApplicationContext applicationContext; public void dynamicCreateBean() { Object bean = new Object(); // 这里可以根据业务需求创建对象 ((ConfigurableApplicationContext) applicationContext).getBeanFactory().registerSingleton("myBean", bean); } } ``` 在这个示例中,我们创建了一个 @Service 类 MyService,并使用 @Autowired 注解依赖注入 ApplicationContext。在方法 dynamicCreateBean() 中,我们创建了一个新的对象并将其注册到 Spring 容器中使用。我们可以使用任何条件来创建对象并将其注册到 Spring 容器中。 总结 本文介绍了 Spring Boot 动态创建 bean 的方法,这对于在运行根据动态条件创建 bean 的程序非常有用。使用 @Bean 注解或 @Autowired 注解,我们可以在容器启动创建对象并将其注册到 Spring 容器中。动态创建 bean 为我们带来了更强大的编程能力,使我们的应用程序变得更加灵活。 ### 回答3: Spring Boot是一种快捷开发框架,支持动态创建Bean,便于应用系统的管理和维护。 在Spring Boot中,可以通过注解和反射机制动态创建Bean。下面介绍两种动态创建Bean的方式: 1. 使用@Component注解 @Component注解是Spring框架提供的一个基本注解,用于声明一个Bean。通过在类上添加@Component注解,可以实现动态创建Bean。首先需要在配置类中添加@ComponentScan注解,该注解可以扫描指定包下所有的类,并将所有添加了@Component注解的类自动注册为Bean。例如: @Configuration @ComponentScan("com.example.service") public class AppConfig { } 下面我们来看一个具体的例子: @Component public class UserService { // ... } AppConfig中通过@ComponentScan注解扫描到UserService类,并将其注册为Bean。 2. 使用@Bean注解 @Bean注解是Spring框架提供的另一个注解,用于声明Bean的创建方法。与@Component注解不同的是,@Bean注解需要在配置类中手动声明Bean的创建方法。例如: @Configuration public class AppConfig { @Bean public UserService userService() { return new UserService(); } } 上述代码中,userService()方法返回一个新的UserService实例,并将其注册为Bean。 总之,在Spring Boot中动态创建Bean的方式非常灵活多样,可以根据应用需要灵活使用不同的方式。同,动态创建Bean的使用也需要注意一些问题,如Bean的依赖关系、Bean的作用域等问题,以保证应用系统的稳定性和可维护性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值