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

1.声明

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

2.问题描述

  1. Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$JdbcTemplateConfiguration': Injection of autowired dependencies failed;
  2. nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$JdbcTemplateConfiguration.dataSource;
  3. nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource[org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Bean instantiation via factory method failed;
  4. nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception;
  5. nested exception is org.springframework.beans.factory.BeanCreationException: 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>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.1.1</version>
</dependency>-->

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

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

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) 

3.配置数据源:DataSource

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

	@Autowired
	Environment env;

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

上面未手动创建的dataSource

其中的db.properties在resources文件中

  1. 在当前的application.properties中配置数据源属性即可
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

这里为tomcat中的数据源

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/113842511