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踏坑过程实录系列(一)的更多相关文章

  1. DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许进制转载  吐槽之后应该有所改了,该方式可以作为一种过渡方式 ...

  2. DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许禁止转载    系列目录连接 DB数据源之Spr ...

  3. DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果

    DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果 liuyuhang原创,未经允许禁止转载  系列目录连接 DB数据源之SpringBoot+Mybatis踏坑过程实 ...

  4. DB数据源之SpringBoot+MyBatis踏坑过程(五)手动使用Hikari连接池

    DB数据源之SpringBoot+MyBatis踏坑过程(五)手动使用Hikari连接池 liuyuhang原创,未经允许禁止转载  系列目录连接 DB数据源之SpringBoot+Mybatis踏坑 ...

  5. DB数据源之SpringBoot+MyBatis踏坑过程(七)手动使用Tomcat连接池

    DB数据源之SpringBoot+MyBatis踏坑过程(七)手动使用Tomcat连接池 liuyuhang原创,未经允许禁止转载  系列目录连接 DB数据源之SpringBoot+Mybatis踏坑 ...

  6. DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量

    DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybati ...

  7. shardingsphere多数据源(springboot + mybatis+shardingsphere+druid)

    org.springframeword.boot:spring-boot-starer-web: 2.0.4release io.shardingsphere:sharding-jdbc-spring ...

  8. Springboot+mybatis中整合过程访问Mysql数据库时报错

    报错原因如下:com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone.. 产生这个 ...

  9. DB数据源配置之抽象(〇)

    DB数据源配置之抽象(〇) liuyuhang原创,未经允许禁止转载 DB数据源之SpringBoot+Mybatis踏坑过程实录(一) DB数据源之SpringBoot+MyBatis踏坑过程(二) ...

随机推荐

  1. Activiti 数据库表自动生成策略

    Activiti 引擎启动时默认会检测数据库版本与程序版本是否相符,不相符就会抛出异常停止引擎的初始化. 这一策略可以通过引擎的初始化配置参数databaseSchemaUpdate来控制, 如下图的 ...

  2. Java设计模式—组合模式

    组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系. 个人理解:组合模式就是将部分组装成整体. 定义如下: 将对象组合成树形结构以表 ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境

    1.前言 2015年1月15日,发布ArcGIS Runtime SDK for Android v10.2.5版本.从该版本开始默认支持android studio开发环境,示例代码的默认开发环境也 ...

  4. d3js data joins深入理解

    Data joins 给定一个数据数组和一个 D3 selection  我们就可以attach或者说是'join'数组中的每个数据到selection中的每个元素上. 这将使得我们的数据和可视化元素 ...

  5. 为什么懂云的IT高手能过得比你好

    盼望着,盼望着,一年一度的国庆7天长假还有不到24小时就到来了.各个部门的同事都已准备好满世界旅行去了. IT 部门各位同事的心还是悬着,信息系统还要持续的运转,对外的网站不能停,假期的线上促销也不能 ...

  6. SQL Server ->> 高可用与灾难恢复(HADR)技术之 -- Transaction Replication(事务复制)

    复制类型: 1)事务型复制:通过复制事务日志到订阅点重做的方式,属于增量型复制: 2)合并型复制:通过触发器和元数据表追踪表数据改变,同样属于增量型复制: 3)快照型复制:通过创建数据库快照,并把快照 ...

  7. sequelize 学习之路

    如果你觉得Sequelize的文档有点多.杂,不方便看,可以看看这篇. 在使用NodeJS来关系型操作数据库时,为了方便,通常都会选择一个合适的ORM(Object Relationship Mode ...

  8. CentOS7.x使用yum安装Mysql5.6

    先检查是否存在已安装的MySQL # yum list installed | grep mysql 若存在删除: yum remove 软件名称 CentOS 7的yum源中没有正常安装mysql时 ...

  9. 计算机用CMD命令关机建立文件夹 梁华杰

    1:进入CMD BJ 2:关机并取消 3:进入D盘 文件管理 创件文件并删除

  10. Linux下的MBR分区

    MBR分区 下面讲一讲如何给一块新添加入服务器的硬盘做MBR分区,那么为什么叫做MBR分区呢?后面会讲 做MBR分区,使用系统自带的fdisk工具.先看一看什么是fdisk,在命令行输入“fdisk” ...