转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/78132097,建议读者阅读原文,确保获得完整的信息
1.背景
Pandora Boot启动过程中报出以下异常,此异常属于Spring Boot的异常。
2.异常
异常描述:Cannot determine embedded database driver class for database type NONE.
异常详细:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘dataSource’ defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration Tomcat.class]:Beaninstantiationviafactorymethodfailed;nestedexceptionisorg.springframework.beans.BeanInstantiationException:Failedtoinstantiate[org.apache.tomcat.jdbc.pool.DataSource]:Factorymethod′dataSource′threwexception;nestedexceptionisorg.springframework.boot.autoconfigure.jdbc.DataSourceProperties DataSourceBeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active).
3.分析
工程依赖pom如下:
<dependency>
<groupId>com.taobao.tddl</groupId>
<artifactId>tddl-client</artifactId>
<version>5.2.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
beans.xml文件如下:
<bean id="dataSource" class="com.taobao.tddl.client.jdbc.TDataSource" init-method="init">
<property name="appName" value="XXXXX" />
<property name="sharding" value="false" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="resources/com/XXXXX/middleware/hsf/dao/impl/mapper/*.xml" />
<property name="typeAliasesPackage" value="com.XXXXX.middleware.domain" />
</bean>
<bean id="pandoraDemoMapperDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.XXXXX.middleware.hsf.dao.impl.mapper.UserMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
网络上有部分文件指出的解法,即新增EnableAutoConfiguration注解,但是测试无效。
@SpringBootApplication(scanBasePackages = {"com.xxxxx.middleware"})
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
PandoraBootstrap.run(args);
SpringApplication.run(Application.class, args);
PandoraBootstrap.markStartupAndWait();
}
}
需要找其他解决方法,该异常是 [org.apache.tomcat.jdbc.pool.DataSource]实例初始化失败,没有指定数据源。但比较奇怪,工程中没有用到apache.tomcat包下的数据源,而是用的[com.taobao.tddl.client.jdbc.TDataSource]包提供的数据源。
猜想:应该是工程中某个依赖包,触发了[org.apache.tomcat.jdbc.pool.DataSource]实例初始化。
检查下依赖包,spring-boot-starter-jdbc这个依赖是问题所在,注释掉这个依赖,重启工程,问题排除!