springboot引入mybatis的那些坑,你也会遇到
lipiwang 2024-10-22 15:45 7 浏览 0 评论
前边分享了springboot项目的创建及springboot项目的默认配置文件等,想温习的小伙伴可移步至文章末尾阅读,感谢。今天来分享下springboot引入mybatis框架的步骤,有小伙伴会说很简单,引入依赖,加上配置就完事了,话是没有错的,但是你知道每一步都在做什么吗,本着知其然知其所以然的态度,一步一步实现mybatis框架的引入。会有很多意想不到的精彩,继续下去吧。
一、引入mybatis的依赖
??在springboot中要使用mybatis的,必然要引入mybatis的依赖,使用过spring的小伙伴都知道要在spring项目中使用mybatis,除了要引入mybatis的依赖外,还要引入spring和mybatis结合的依赖,名字是mybatis-spring.XXX.jar。springboot摒弃了先引入mybaits,再引入mybatis-spring的不便,开发了下面的依赖
<!--mybatis的依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
??可以看到这是一个“starter”,要说明的是springboot开发了很多这样的“starter”,提供springboot和其他中间件的集成。先看下“mybatis-spring-boot-starter”这样一个starter都包含哪些依赖,
??在“mybatis-spring-boot-starter”的依赖中有“mybatis.3.5.7”和“mybatis-spring.2.0.6”,还有“spring-boot-starter-jdbc”和“mybaits-spring-boot-autoconfigure”两个依赖,说明“mybatis-spring-boot-starter”不光引入了mybatis相关的依赖还有其他的。现在来尝试下启动程序看看是什么情况,
可以看到程序自动退出了,很神奇什么错误也没打印自动退出了,为了把异常打印出来在启动类的代码中加入try catch,如下
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是什么,你想过吗,下期更精彩!
推荐阅读
原来经常使用的application.properties文件的加载优先级是最低的
你会使用springboot的自定义配置文件吗?原来这么简单
欢迎关注、转发,谢谢!
相关推荐
- ubuntu单机安装open-falcon极度详细操作
-
备注:以下操作均由本人实际操作并得到验证,喜欢的同学可尝试操作安装。步骤一1.1环境准备(使用系统:ubuntu18.04)1.1.1安装redisubuntu下安装(参考借鉴:https://...
- Linux搭建promtail、loki、grafana轻量日志监控系统
-
一:简介日志监控告警系统,较为主流的是ELK(Elasticsearch、Logstash和Kibana核心套件构成),虽然优点是功能丰富,允许复杂的操作。但是,这些方案往往规模复杂,资源占用高,...
- 一文搞懂,WAF阻止恶意攻击的8种方法
-
WAF(Web应用程序防火墙)是应用程序和互联网流量之间的第一道防线,它监视和过滤Internet流量以阻止不良流量和恶意请求,WAF是确保Web服务的可用性和完整性的重要安全解决方案。它...
- 14配置appvolume(ios14.6配置文件)
-
使用AppVolumes应用程序功能,您可以管理应用程序的整个生命周期,包括打包、更新和停用应用程序。您还可以自定义应用程序分配,以向最终用户提供应用程序的特定版本14.1安装appvolume...
- 目前流行的缺陷管理工具(缺陷管理方式存在的优缺点)
-
摘自:https://blog.csdn.net/jasonteststudy/article/details/7090127?utm_medium=distribute.pc_relevant.no...
- 开源数字货币交易所开发学习笔记(2)——SpringCloud
-
前言码云(Gitee)上开源数字货币交易所源码CoinExchange的整体架构用了SpringCloud,对于经验丰富的Java程序员来说,可能很简单,但是对于我这种入门级程序员,还是有学习的必要的...
- 开发JAX-RPC Web Services for WebSphere(下)
-
在开发JAX-RPCWebServicesforWebSphere(上)一文中,小编为大家介绍了如何创建一个Web服务项目、如何创建一个服务类和Web服务,以及部署项目等内容。接下来小编将为大...
- CXF学习笔记1(cxf client)
-
webservice是发布服务的简单并实用的一种技术了,个人学习了CXF这个框架,也比较简单,发布了一些笔记,希望对笔友收藏并有些作用哦1.什么是webServicewebService让一个程序可...
- 分布式RPC最全详解(图文全面总结)
-
分布式通信RPC是非常重要的分布式系统组件,大厂经常考察的Dubbo等RPC框架,下面我就全面来详解分布式通信RPC@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》...
- Oracle WebLogic远程命令执行0day漏洞(CVE-2019-2725补丁绕过)预警
-
概述近日,奇安信天眼与安服团队通过数据监控发现,野外出现OracleWebLogic远程命令执行漏洞最新利用代码,此攻击利用绕过了厂商今年4月底所发布的最新安全补丁(CVE-2019-2725)。由...
- Spring IoC Container 原理解析(spring中ioc三种实现原理)
-
IoC、DI基础概念关于IoC和DI大家都不陌生,我们直接上martinfowler的原文,里面已经有DI的例子和spring的使用示例《InversionofControlContainer...
- Arthas线上服务器问题排查(arthas部署)
-
1Arthas(阿尔萨斯)能为你做什么?这个类从哪个jar包加载的?为什么会报各种类相关的Exception?我改的代码为什么没有执行到?难道是我没commit?分支搞错了?遇到问题无法在...
- 工具篇之IDEA功能插件HTTP_CLENT(idea2021插件)
-
工具描述:Java开发人员通用的开发者工具IDEA集成了HTTPClient功能,之后可以无需单独安装使用PostMan用来模拟http请求。创建方式:1)简易模式Tools->HTTPCl...
- RPC、Web Service等几种远程监控通信方式对比
-
几种远程监控通信方式的介绍一.RPCRPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.meth...
- 《github精选系列》——SpringBoot 全家桶
-
1简单总结1SpringBoot全家桶简介2项目简介3子项目列表4环境5运行6后续计划7问题反馈gitee地址:https://gitee.com/yidao620/springbo...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)