DB数据源之SpringBoot+Mybatis踏坑过程实录系列(一)
DB数据源之SpringBoot+MyBatis踏坑过程(一)
liuyuhang原创,未经允许进制转载
系列目录
DB数据源之SpringBoot+Mybatis踏坑过程实录(一)
DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描
DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描
DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果
DB数据源之SpringBoot+MyBatis踏坑过程(五)手动使用Hikari连接池
DB数据源之SpringBoot+MyBatis踏坑过程(七)手动使用Tomcat连接池
mysql连接查看
DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量
1.体验SpringBoot
笔者最近新入手的项目,正在使用Springboot,以前一直使用自己构建的架构,
但是感觉SpringBoot的火爆程度,不得不去学习,毕竟后边还有分布式SpringCloud
即使是注册中心闭源了(还有更多的解决方案不是么)
入手以后,最开始觉得是十分方便的,在网上随便找一篇入门的文章,半小时不到
就搭建起来了,来个Controller的HelloWorld,轻松完成。
感觉SpringBoot好简单的
第二天就打脸,那些宣传SpringBoot配置简单的出来压马路的时候想啥呢都。。。
2.SpringBoot打脸
列举一些遇到的问题概述
2.1.首先,SpringBoot是使用maven构建的,而我接手别人的电脑
根本没找到maven配置path,也没上网查,直接:
cmd maven -v,maven - v,maven -version ,maven - version四个命令下去,都是错
(原谅我以前没有怎么动过maven)
问题不在于是否学过maven,是有太多问题没有考虑过。
①myeclipse不同版本对于maven配置的隶属关系是不同的,有些在maven主选项内
有些则是在MyEclipse下的Maven4MyEclipse内
②用maven竟然是好使的,我以为本机安装并配置好了maven,然而MyEclipse自带maven插件
③自带插件的maven目录竟然非常的深,搜maven竟然没有,原来在系统盘用户目录下的 .m2下
注意,这里有个英文的句号
④MyEclipse创建Maven项目的时候,会有选择Catalogs的选项,版本众多不说,没有哪个文章
仔细说明这个选择的到底是什么,原来只是项目的构建模式而已,比如曾经有过的:
将project转为webProject,还有将webProject转为Hibernate项目这种
⑤MyEcplise创建Maven项目的时候,会有选择Catalogs的选项,而该选项会有假死情况,一直
去下载更新Catalogs,而由于网络或者节点或者未知的原因,一直更新,一直更新失败,
导致MyEclipse(Eclipse也试过)出现严重的内存泄漏(java8的更严重),然后就down了
⑥Maven的mirror问题。。。。不是阿里的库能下到所有的东西,公司里有个旧项目有mail的包,
阿里的库就是下不成功,最后换成了默认的库才成功
2.2.SpringBoot的加载依靠的是注解,和曾经的xml配置不同,这里出现了好多个坑
①xml配置是要读取该文件的,而是否读取成功,有没有读取都有个报错提示
②SpringBoot的默认注解配置,是否读取我们并不知道,有些注解是否工作我们也不知道
③版本不同,注解内容不同,本质上走的还是相同的东西,有些注解甚至取消了,或者一个拆成俩
④习惯优于配置,那习惯上为啥parent中没有各种starter,没有mybatis
⑤pom引入的版本,既然不在parent中,引入的其他东西要考虑版本,版本确实是个闹心的东西
⑥pom中的build resource是否成功了,application.properties中的配置是否正确读取了,一概不知
(当然并不是没有办法验证以上问题,只是曾经不曾想需要去验证,一般性的忽略掉了)
还有一些其他的小问题,如springboot中集成的是tomcat8,而建立maven项目中jsp为何报错
为此额外引入了tomcat7,包冲突报错。。。
java8和java7用的parent版本不同,版本不同注解配置不同,好伤心。。。
2.3.Mabatis的坑也不少,网上的大家的编码方式和我平时的编码方式都是完全不同的
①别人的工作模式
给定架构以后要写的代码如下:
获取sessionFactory
获取session
获取mapper接口
使用接口(或注解,或使用mapper.xml中的配置)
②我的工作模式
给定架构以后要写的代码如下:
从缓存中获取单例sessionFactory的session(多线程情况下调用多例的)
调用session原生api,传mapper.xml的命名空间+id+参数
小项目,用不上事务,也不用mapper接口,也不用接口实现类,方便和代码行数少,文件数少
但是没有我这么配置的啊(大家为何如此趋同),以前用spring。xml配置的时候指定mapper扫描的包即可了
而用注解进行配置扫描,都是扫描mapper接口的,在application.properties中可以配置xml的location
但是让我十分失望(上述原因,我根本不知道配置的location是否正确,还是properties文件是否正确加载)
于是产生了以下几个结果(不贴代码,不贴报错内容,免得别人喜欢抄袭)
①Mapped Statements collection does not contain value
这让我作何感想,是mapper的引用命名空间错了,还是传递参数错了,还是mapper.xml压根没扫,
还是sessionfactory没有扫描mapper,还是application.properties中location配置有错,还是配置文件没加载
最后的结果竟然是application.properties本身并没有加载成功,于是网上找该文件加载,提供了三种方式:
一曰@value,二曰eviourment,三曰从SpringApplication的入口main函数中获取context对象
三种都试了,三种都无法加载,同名文章看了几十个,看的我吐血
②null of url
从application.properties中获取的url竟然没有?当然我是从某次数据源加载中出现这个错误判断出来的
那个注解上的perfix干啥去了,springboot启动日志中写对了为配置的包,然而说
“No MyBatis mapper was found in '[com.mapper]' package.”几个意思?
为了获得这个错误,我将mybatis的mapper.xml扫描写到了java代码中,宁可进行全手写配置了,
这样才得出这个结论来。
说到底,因为什么,说不清。
当然还有很多其他结果,就不远程公司电脑去截图了,麻烦,也非重点
数据源的获取蛮简单个事情,为了修改可以从缓存,从网上,从集群中获取数据源,也可以写死,也可以
写到配置文件,写到xml文件中
在此建议,如果springboot数据源上有坑的朋友们,
先写死数据源,写死mybatis配置,能让项目继续进行下去,再考虑springboot的优化配置模式
(我认为没啥用,只是大家都这么用,作为结果并无不同,领导永远看不见你做的工作,又不是界面)
因为,项目给的时间还是有限的,先进行下去,不是每个项目都有集群,都有分布式,领导要你解释代码
所以,先搭好架构,不影响团队继续项目放第一位才对。
说到底,虽然吐槽了很多,肯定有我做的不对的地方,版本不熟悉,配置有错误的地方肯定有
只是,处理这些问题竟然让我用掉了接近六个小时,有点闹心啊!
3.还是明天更吧,睡好觉才不会死
明天继续更,
①对于Springboot下用一个靠谱的方式获得application.properties配置文件,或其他配置文件的内容
这个应该是个很有用的内容
②对于Springboot下用一个靠谱的方式加载数据源,要事务管理的,绕道吧,我不想写的那么麻烦
(数据库本身有事务管理,并不是所有业务都是互联网业务,也不是所有业务都是大型集群数据库操作)
所以,在目的上,任务的甘特图应该是这样的(图难看对付看吧),我也在小公司哈,别吐槽。
|| -------到这里的时候先让架构能用,哪怕都写死,接口和使用方式不变即可
|| -------从此开始做后续优化和更改,不影响其他人工作才对
我(处理springboot架构与工具封装) || =====================================
A(处理web业务) ||===============================
C(处理DB业务) ||===============================
D(处理非web非DB架构) || =====================================
以上!休息!
DB数据源之SpringBoot+Mybatis踏坑过程实录系列(一)的更多相关文章
- DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描
DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许进制转载 吐槽之后应该有所改了,该方式可以作为一种过渡方式 ...
- DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描
DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之Spr ...
- DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果
DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybatis踏坑过程实 ...
- DB数据源之SpringBoot+MyBatis踏坑过程(五)手动使用Hikari连接池
DB数据源之SpringBoot+MyBatis踏坑过程(五)手动使用Hikari连接池 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybatis踏坑 ...
- DB数据源之SpringBoot+MyBatis踏坑过程(七)手动使用Tomcat连接池
DB数据源之SpringBoot+MyBatis踏坑过程(七)手动使用Tomcat连接池 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybatis踏坑 ...
- DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量
DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybati ...
- shardingsphere多数据源(springboot + mybatis+shardingsphere+druid)
org.springframeword.boot:spring-boot-starer-web: 2.0.4release io.shardingsphere:sharding-jdbc-spring ...
- Springboot+mybatis中整合过程访问Mysql数据库时报错
报错原因如下:com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone.. 产生这个 ...
- DB数据源配置之抽象(〇)
DB数据源配置之抽象(〇) liuyuhang原创,未经允许禁止转载 DB数据源之SpringBoot+Mybatis踏坑过程实录(一) DB数据源之SpringBoot+MyBatis踏坑过程(二) ...
随机推荐
- Activiti 数据库表自动生成策略
Activiti 引擎启动时默认会检测数据库版本与程序版本是否相符,不相符就会抛出异常停止引擎的初始化. 这一策略可以通过引擎的初始化配置参数databaseSchemaUpdate来控制, 如下图的 ...
- Java设计模式—组合模式
组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系. 个人理解:组合模式就是将部分组装成整体. 定义如下: 将对象组合成树形结构以表 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境
1.前言 2015年1月15日,发布ArcGIS Runtime SDK for Android v10.2.5版本.从该版本开始默认支持android studio开发环境,示例代码的默认开发环境也 ...
- d3js data joins深入理解
Data joins 给定一个数据数组和一个 D3 selection 我们就可以attach或者说是'join'数组中的每个数据到selection中的每个元素上. 这将使得我们的数据和可视化元素 ...
- 为什么懂云的IT高手能过得比你好
盼望着,盼望着,一年一度的国庆7天长假还有不到24小时就到来了.各个部门的同事都已准备好满世界旅行去了. IT 部门各位同事的心还是悬着,信息系统还要持续的运转,对外的网站不能停,假期的线上促销也不能 ...
- SQL Server ->> 高可用与灾难恢复(HADR)技术之 -- Transaction Replication(事务复制)
复制类型: 1)事务型复制:通过复制事务日志到订阅点重做的方式,属于增量型复制: 2)合并型复制:通过触发器和元数据表追踪表数据改变,同样属于增量型复制: 3)快照型复制:通过创建数据库快照,并把快照 ...
- sequelize 学习之路
如果你觉得Sequelize的文档有点多.杂,不方便看,可以看看这篇. 在使用NodeJS来关系型操作数据库时,为了方便,通常都会选择一个合适的ORM(Object Relationship Mode ...
- CentOS7.x使用yum安装Mysql5.6
先检查是否存在已安装的MySQL # yum list installed | grep mysql 若存在删除: yum remove 软件名称 CentOS 7的yum源中没有正常安装mysql时 ...
- 计算机用CMD命令关机建立文件夹 梁华杰
1:进入CMD BJ 2:关机并取消 3:进入D盘 文件管理 创件文件并删除
- Linux下的MBR分区
MBR分区 下面讲一讲如何给一块新添加入服务器的硬盘做MBR分区,那么为什么叫做MBR分区呢?后面会讲 做MBR分区,使用系统自带的fdisk工具.先看一看什么是fdisk,在命令行输入“fdisk” ...