SpringBoot复习:SpringBoot启动失败问题之DataSource问题

时间:2025-04-22 07:11:18

1.声明

当前问题主要用于本人复习和理解SpringBoot的内容,主要用于错误再现。

2.问题描述

  1. Error creating bean with name '$JdbcTemplateConfiguration': Injection of autowired dependencies failed;
  2. nested exception is : Could not autowire field: private $;
  3. nested exception is : Error creating bean with name 'dataSource' defined in class path resource[org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$]: Bean instantiation via factory method failed;
  4. nested exception is : Failed to instantiate []: Factory method 'dataSource' threw exception;
  5. nested exception is : Cannot determine embedded database driver class for database type NONE.
  6. If you want an embedded database please put a supported one on the classpath.

这是一个最基本的数据源没有问题,其根本就是引入了MyBatis或者Hibernate这些访问数据库的框架,导致SpringBoot触发了DataSource的自动配置

3.解决办法

1. 如果项目中不采用访问数据库的框架直接去掉:如果在pom文件中引用那么去除即可

<!-- 导入mybatis的依赖 
<dependency>
	<groupId></groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.1.1</version>
</dependency>-->

例如本案例中就是导入了mybatis-spring-boot-starter,但是却没有配置数据源导致的

2.关闭当前的数据源自动配置:这个类,不让其加载即可,主要在@SpringBootApplication中添加exclude属性

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) 

3.配置数据源:DataSource

  1. 采用配置类中添加DataSource的@Bean即可
@Configuration
@PropertySource(value = { "classpath:" })
public class AppConfig {

	@Autowired
	Environment env;

	@Primary
	@Bean(name = "dataSource")
	public DataSource setDataSource() {
		BasicDataSource dataSource = new BasicDataSource();
		dataSource.setUrl(env.getProperty(""));
		dataSource.setUsername(env.getProperty(""));
		dataSource.setPassword(env.getProperty(""));
		return dataSource;
	}
}

上面未手动创建的dataSource

其中的在resources文件中

  1. 在当前的中配置数据源属性即可
=jdbc:mysql://localhost:3306/test?useSSL=false
=root
=root
-class-name=

这里为tomcat中的数据源