1.声明
当前问题主要用于本人复习和理解SpringBoot的内容,主要用于错误再现。
2.问题描述
- Error creating bean with name
'$JdbcTemplateConfiguration': Injection of autowired dependencies failed;
- nested exception is :
Could not autowire field: private $;
- 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;
- nested exception is :
Failed to instantiate []: Factory method 'dataSource' threw exception;
- nested exception is :
Cannot determine embedded database driver class for database type NONE.
- 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
- 采用配置类中添加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文件中
- 在当前的中配置数据源属性即可
=jdbc:mysql://localhost:3306/test?useSSL=false
=root
=root
-class-name=
这里为tomcat中的数据源