开发者社区> 问答> 正文

Spring boot 打包成jar包无法加载DruidDataSourceAutoConfigur

18:23:04.707 [main] ERROR org.springframework.boot.SpringApplication - Application startup failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [cn.kelaile.mall.log.Application]; nested exception is java.lang.IllegalStateException: Unable to read meta-data for class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure at org.springframework.context.annotation.ConfigurationClassParser.processDeferredImportSelectors(ConfigurationClassParser.java:556) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:185) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:308) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:228) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:270) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) at cn.kelaile.mall.log.Application.main(Application.java:19) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) Caused by: java.lang.IllegalStateException: Unable to read meta-data for class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.getAnnotationMetadata(AutoConfigurationSorter.java:217) at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.getAnnotationValue(AutoConfigurationSorter.java:198) at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.readBefore(AutoConfigurationSorter.java:186) at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.(AutoConfigurationSorter.java:158) at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClasses.(AutoConfigurationSorter.java:115) at org.springframework.boot.autoconfigure.AutoConfigurationSorter.getInPriorityOrder(AutoConfigurationSorter.java:57) at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.sort(AutoConfigurationImportSelector.java:241) at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.selectImports(AutoConfigurationImportSelector.java:98) at org.springframework.context.annotation.ConfigurationClassParser.processDeferredImportSelectors(ConfigurationClassParser.java:547) ... 22 common frames omitted Caused by: java.io.FileNotFoundException: class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class] cannot be opened because it does not exist at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172) at org.springframework.core.type.classreading.SimpleMetadataReader.(SimpleMetadataReader.java:50) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:98) at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.createMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:89) at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.getMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:76) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:93) at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.getAnnotationMetadata(AutoConfigurationSorter.java:213) ... 30 common frames omitted

在eclipse里面运行正常,打成jar报运行则报此问题

1.1.3 . spring boot 用的是1.5.6

原提问者GitHub用户WangBuEr

展开
收起
山海行 2023-07-05 20:42:16 545 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    可能是因为编译时缺少Druid的相关依赖库或者Spring Boot版本不兼容造成的。

    以下是可能的解决方法:

    检查依赖库是否完整。如果在编译时缺少Druid的相关依赖库,可能会导致无法加载DruidDataSourceAutoConfiguration。解决方法是在pom.xml文件中添加如下依赖:

    Copy


    com.alibaba
    druid-spring-boot-starter
    1.2.4

    其中,druid-spring-boot-starter是Druid的Spring Boot Starter依赖库,可以自动配置DruidDataSourceAutoConfiguration。

    检查Spring Boot版本是否兼容。如果使用的Spring Boot版本过低,可能会导致无法加载DruidDataSourceAutoConfiguration。解决方法是升级到最新版本的Spring Boot,并确保与其他依赖库的版本兼容。

    检查代码是否正确。如果应用程序的代码中存在错误,例如配置文件格式不正确、注解使用错误等,也可能会导致无法加载DruidDataSourceAutoConfiguration。解决方法是检查应用程序的代码,并根据错误信息进行相应的调整和修正。

    2023-07-30 13:36:31
    赞同 展开评论 打赏
  • Spring Boot自动配置的一个类,它用于配置Druid数据库连接池。你需要确保你的jar文件中包含了这个类的元数据信息。
    在你的jar文件中,你需要确保你的DruidDataSourceAutoConfigure类所在的包路径是正确的

    2023-07-11 10:16:02
    赞同 展开评论 打赏
  • 用1.5.4试试,可能新版本不兼容。

    原回答者GitHub用户lihengming

    2023-07-06 11:45:41
    赞同 展开评论 打赏
  • 这个错误通常是由于缺少依赖或配置问题导致的。以下是一些可能的解决方案:

    1. 确保你的项目中包含了Druid的相关依赖。在你的pom.xml文件中添加以下依赖项:
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>最新版本号</version>
    </dependency>
    
    1. 如果已经添加了依赖并且问题仍然存在,请检查你的IDE是否正确地将这些依赖项打包到生成的JAR文件中。可以尝试使用Maven命令进行构建,确保依赖项已正确包含。

    2. 如果你使用的是Spring Boot 2.x版本,可能会遇到与Druid的自动配置不兼容的问题。你可以尝试在启动类上加上@EnableAutoConfiguration(exclude = DruidDataSourceAutoConfigure.class)注解来排除Druid的自动配置。

    3. 检查你的配置文件,确保Druid的相关配置正确。比如,检查application.propertiesapplication.yml文件中的Druid相关配置项。

    4. 如果你使用了多个数据源,并且没有明确指定默认数据源,可以尝试在你的配置类上添加@Primary注解,以确保Druid作为默认数据源被正确加载。

    如果仍然无法解决问题,请提供更多关于你的项目配置和依赖的信息,以便更好地帮助你解决问题。

    2023-07-05 20:47:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多