package com.my.template;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
* 启动类
* @date 2022/6/3 21:32
@SpringBootApplication
public class BootServer {
public static void main(String[] args) {
try {
SpringApplication.run(BootServer.class);
}catch (Exception e){
e.printStackTrace();
再看下启动日志,
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]:
Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException:
Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception;
nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException:
Failed to determine a suitable driver class
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:635)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
从日志中大体可以看处在创建“dataSource”这个bean的时候报错了,并且有这样一个异常“org.springfraemwork.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException”,为什么有这样一个异常,而且没有有引入有关“autoconfigure.jdbc”的包啊,还记得前边在引入“mybatis-spring-boot-starter”的时候,其依赖了该包,所以抛该异常也不足为奇。另外上面还有“Failed to instantiate [com.zaxxer.hikari.HikariDataSource]”这样一句,也是由于在“spring-boot-starter-jdbc”包中引入了相关依赖,
好了,上边分析了,日志中的异常情况。回到问题的开始点,为什么会创建“dataSource”这样一个bean,这是因为在springboot启动的时候会默认创建一个名为“dataSource”的bean,放到spring的环境中。是如何创建的呐?是因为springboot有自动配置的功能,也就springboot启动的时候会默认加载“spring-boot-autoconfigure”下的spring.factories文件中的类,
在“spring.factories”文件中有这样一个类“org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration”,该类是DataSouce的自动配置类,
另外,重要的一点是,springboot在不配置数据源的时候默认使用的是“HikariDataSource”,这也是为什么在依赖中会出现“com.zaxxer.HikarCP”依赖的原因,
要创建HikariDataSource,比然要创建数据库连接,那么就需要数据库的驱动,由于没有在application.properties文件中配置,那么代码肯定会走到下面的地方,
也就会出现启动过程中下面的错误,
分析到这里,问题就很明显了,springboot在默认情况下要创建HikariDataSource的数据源,最终其实是要创建数据库连接,创建数据库连接就需要数据库启动程序,这里没有数据库驱动所以报错了。
我这里要连接mysql数据库,这里把mysql的数据库驱动依赖再加上,
<!--mysql的驱动程序-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
重要的一点在application.properites中配置,
server.port=9099
#数据库驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
#连接地址
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
注意,在配置的时候不要配置”spring.datasource.hikari“开头的属性,笔者开始的时候,想着这里使用的是”hikariDataSource“,那么我配置”spring.datasouce.hikari“前缀的属性即可,结果老是不对,这里一定要配置的是”spring.datasource“开头的属性。
配置以后,再启动服务,如下
可以看到这里已经正常启动了,俗话说没有报错就是最好的,并且在上图也提示,”No MyBatis mapper war found in [com.my.template] package“,也就是说springboot默认会扫描mapper文件。
二、HikariDataSource是什么
上面提到springboot默认的数据源是HikariDataSource,那么HikariDataSource是什么?HikariDataSource是一个数据库连接池,其github地址为:https://github.com/brettwooldridge/HikariCP,和平时使用的c3p0、dbcp2、druid是一样的,前面说到HikariDataSource是sprinboot默认的数据库连接池,只要引入了”spring-boot-starter-jdbc“,那么HikariDataSource会默认引入,而且在application.properties中无需指定数据源的类型,
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
如果想使用其他的也可以,需要引入相应的依赖,然后在application.properties中进行配置,以Druid为例,
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
后面,会对常用的数据库连接池做一个汇总,敬请关注。
本文主要分享了在springboot中使用mybatis的一些问题,
1、springboot默认的数据源为HikariDataSource,可以通过spring.datasource.type来修改;
2、配置HikariDataSource的时候,注意配置”spring.datasource“前缀的属性;
3、springboot中使用mybatis,直接引入”mybatis-spring-boot-starter“更方便,不过要注意版本;
4、除了引入mybatis的相关依赖,不要忘了引入相关的数据库驱动jar;
最后,遗留一个小问题,mybatis-spring-boot-starter是什么,你想过吗,下期更精彩!
5分钟快速搭建一个springboot的项目
springboot竟然有5种默认的加载路径,你未必都知道
springboot如何使用自定义配置文件
springboot多环境下如何进行动态配置
感谢分享、关注、收藏。公众号:【良工说技术】