SpringBoot运行时dataSource创建失败的解决办法

本文解决了一个Spring Boot项目中使用阿里Druid数据源时出现的配置异常问题,通过排除自动配置类避免了NoClassDefFoundError错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先贴错误信息:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/boot/bind/RelaxedDataBinder
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:590) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1247) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1135) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:818) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:724) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    ... 56 common frames omitted

 

解决办法:

网上给出的很多是提示添加

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})   

但是笔者在实际操作的时候还是出现相同的问题,遂思考发觉,笔者使用的是不自带的DataSource

而是使用的阿里的Durid连接池,使用更改了一下注释为:

@EnableAutoConfiguration(exclude={DruidDataSourceAutoConfigure.class})

即解决问题,所以不可盲目按网上的进行更改,需先观察思考一二,再进行操作

### 可能的原因分析 当遇到Spring Boot项目无法运行的情况,可能涉及多个方面的问题。以下是几个常见的原因及其解决方案: #### 1. **根应用上下文创建失败** 如果项目的错误堆栈显示`createRootApplicationContext`方法出现问题,则可能是由于配置文件中的某些设置不正确或者依赖项缺失引起的[^1]。 - 检查`application.properties`或`application.yml`文件是否存在语法错误。 - 确认所需的外部资源(如数据库连接池、缓存服务等)是否已正确定义并可用。 ```yaml spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password ``` #### 2. **Spring Security复杂度引发问题** 有开发者可能会因为引入了复杂的框架组件而导致启动异常。例如,Spring Security虽然功能强大,但如果未按需启用特性,可能导致不必要的复杂性和潜在冲突[^2]。 建议仅加载当前场景所需的安全模块,并通过Spring Boot自动装配简化配置过程。可以尝试禁用默认安全机制来测试基本功能是否正常工作: ```java @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/").permitAll(); } } ``` #### 3. **Akka集成相关问题** 对于那些集成了分布式计算库(比如Akka)的应用程序来说,构建环境准备不足也可能阻碍其顺利执行[^3]。按照官方文档指示完成初始化步骤至关重要——包括克隆仓库到本地机器上、导入IDE作为Maven工程以及清理安装单元测试案例均应逐一验证无误后再继续开发流程。 #### 4. **多数据源管理不当** 另一个常见问题是处理跨模式或多租户架构下的持久层操作失误。假如系统试图访问第二个方案里的表单却找不到它们的话,那很可能是事务边界划分不清或者是实体映射关系定义模糊所致[^4]。 确保每一个独立的数据存储区域都有对应的JPA Repository接口声明并与之匹配的Entity类关联起来;另外还要注意调整Hibernate扫描路径参数以覆盖全部必要的包名空间范围。 ```properties spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext ``` --- ### 总结 综上所述,针对不同类型的故障现象采取相应的排查措施能够有效提升解决问题效率。具体实施过程中还需结合实际业务需求灵活运用各种工具和技术手段加以辅助判断。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值