自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

朝花夕拾

不要以今天的回避来逃脱明天的责任。

  • 博客(112)
  • 资源 (3)
  • 收藏
  • 关注

原创 ShardingSphere-JDBC SPI扩展点-SQLRewriteContextDecorator

通过ShardingSphere自带的Token接口OptionalSQLTokenGenerator实现自定义Token生成器,由于在插入语句和查询语句中插入字段的方式是不一样的(插入语句字段之前用逗号分隔,查询语句where条件后用and分隔),所以即使插入一个字段也需要实现多个Token生成器,下面以简单的查询语句类型为例。

2023-02-26 23:16:41 634

原创 ShardingSphere-JDBC SPI扩展点-RouteDecorator

装饰器扩展点org.apache.shardingsphere.underlying.route.decorator.RouteDecoratororg.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContextDecoratororg.apache.shardingsphere.underlying.merge.engine.decorator.ResultDecoratorEngineorg.apache.shardin

2021-09-21 23:31:41 537

原创 ShardingSphere-JDBC SPI扩展点-Hook

钩子类扩展点介绍包括以下四个Hook接口org.apache.shardingsphere.underlying.common.hook.RootInvokeHookorg.apache.shardingsphere.sql.parser.hook.ParsingHookorg.apache.shardingsphere.underlying.route.hook.RoutingHookorg.apache.shardingsphere.underlying.executor.hook.SQLE

2021-09-21 22:04:37 572

原创 ShardingSphere-JDBC SPI扩展点介绍

基于 SpringBoot2.4.1 快速搭建一个 Demo,主要 jar 包依赖版本分别是:org.apache.shardingsphere.sharding-jdbc-spring-boot-starter:4.1.1org.mybatis.spring.boot.mybatis-spring-boot-starter:2.1.4在最新的ShardingSphere发行版中,提供了大量的SPI扩展点,开发可以利用SPI扩展点满足各式各样的业务场景。但在官方文档里并未找到对扩展点的详细介绍,

2021-08-01 12:30:15 528 1

原创 Sharding-JDBC 源码之结果集归并

Sharding-JDBC 系列第一篇 Sharding-JDBC 源码之启动流程分析第二篇 Sharding-JDBC 源码之 SQL 解析第三篇 Sharding-JDBC 源码之 SQL 路由第四篇 Sharding-JDBC 源码之 SQL 改写第五篇 Sharding-JDBC 源码之 SQL 执行第六篇 Sharding-JDBC 源码之结果集归并(本文)将从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户端,称为结果归并。由于从数据库中返回的结果集

2021-01-02 16:09:47 1609

原创 Sharding-JDBC 源码之 SQL 执行

Sharding-JDBC 系列第一篇 Sharding-JDBC 源码之启动流程分析第二篇 Sharding-JDBC 源码之 SQL 解析第三篇 Sharding-JDBC 源码之 SQL 路由第四篇 Sharding-JDBC 源码之 SQL 改写第五篇 Sharding-JDBC 源码之 SQL 执行(本文)Sharding-JDBC 使用执行引擎将路由和改写完成之后的真实SQL安全且高效发送到底层数据源执行。 它不是简单地将SQL通过JDBC直接发送至数据源执行;也并非直接将执

2020-12-27 23:07:40 858

原创 Sharding-JDBC 源码之 SQL 改写

Sharding-JDBC 系列第一篇 Sharding-JDBC 源码之启动流程分析第二篇 Sharding-JDBC 源码之 SQL 解析第三篇 Sharding-JDBC 源码之 SQL 路由第三篇 Sharding-JDBC 源码之 SQL 改写在完成 SQL 路由后,我们就会拿到实际要查询的数据源名称及实际表节点。这时候就需要对原逻辑 SQL 进行改写,将逻辑表名替换为真实表名,这一步 Sharding-JDBC 是由改写引擎 SQLRewriteEngine 来完成的。目录

2020-12-27 14:52:34 1940 5

原创 Sharding-JDBC 源码之 SQL 路由

系列文章目录第一篇 Sharding-JDBC 源码之启动流程分析第二篇 Sharding-JDBC 源码之 SQL 解析第三篇 Sharding-JDBC 源码之 SQL 路由接上文,在完成 SQL 解析之后,也就意味着我们拿到了逻辑 SQL 的抽象语法树及解析结果,例如,以下SQL:select goods_name from t_goods where goods_id=1 and type=0解析之后的为抽象语法树见下图:接下来,我们将继续学习SQL 路由过程。目录系列文

2020-12-26 23:20:54 1188

原创 Sharding-JDBC 源码之 SQL 解析

基于 SpringBoot2.4 快速搭建一个 Demo,主要 jar 包依赖版本分别是:io.shardingsphere.sharding-jdbc-spring-boot-starter:3.0.0.M1com.alibaba.druid-spring-boot-starter:1.1.17org.mybatis.spring.boot.mybatis-spring-boot-starter:2.1.4在执行 SQL 时,Sharding-JDBC 需要根据启动时获取到的数据源、路由等配置

2020-12-24 22:55:22 1869

原创 Sharding-JDBC 源码之启动流程分析

Sharding-JDBC 是 ShardingSphere 开源的分布式数据库中间件产品之一,提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。Sharding-JDBC 在 Java 的 JDBC 层提供额外服务,它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架接下来,让我们由简入繁,逐渐拉来 Sharding-JDBC 的序幕。首先基于 Sprin.

2020-12-20 21:48:41 1842

原创 Java线程池是如何保证核心线程不被销毁的

对于Java中 Thread 对象,同一个线程对象调用 start 方法后,会在执行完run 后走向终止(TERMINATED)状态,也就是说一个线程对象是不可以通过多次调用 start 方法重复执行 run 方法内容的。详情可通过该链接了解:Java同一个线程对象能否多次调用start方法问题:那 Java 线程池中是如何保证核心线程不会终止的呢?接下来将通过源码分析线程池是如何保...

2020-04-02 00:44:04 13372 15

原创 Java同一个线程对象能否多次调用start方法

同一个线程对象能否多次调用start方法,搞清楚这个问题,首先需要了解线程的生命周期一、线程生命周期更多线程状态细节描述可查看Thread内部枚举类:State从上图线程状态转换图可以看出:新建(NEW)状态是无法通过其他状态转换而来的;终止(TERMINATED)状态无法转为其他状态。为何新建状态和终止状态不可逆转,接下来将通过Thread源码来分析二、先通过一个正常程序...

2020-03-31 22:24:12 7470 4

原创 spring启动一直Pre-instantiating singletons原因及解决方案

今天帮同事排查一个问题,他开发完并未经过本地测试,便提交代码,发布到预生产测试环境,启动 server 过程中一直卡在 Pre-instantiating singletons 无法成功启动项目,我在本地调试后发现并成功定位此问题。项目环境:spring 3.xmybatis 3.xlogback问题:应用服务器(tomcat、jetty、jboss等)启动项目一直卡在 Pre-ins...

2020-01-13 16:57:26 3433 1

原创 Mybatis通过MapperScannerConfigurer扫描basePackage源码分析

mybatis 版本:3.4.6mybatis-spring 版本:1.3.2首先需要Spring配置文件中添加以下配置:<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="org.mybatis.spring.sample...

2019-10-28 22:51:04 9813 1

原创 Mybaits事务管理的实现原理源码分析

Mybatis版本:3.2.8Mysql 驱动包版本:5.1.29Mybatis自己封装了两种事务实现方式:JDBC:就是按照 jdbc 的方式来控制事务的提交、回滚和关闭等操作,Mybatis 对其进行了一下封装,底层调用的还是jdbc的具体实现。以 Mysql 为例,如果Mybatis设置了事务管理器为 JDBC,那么在执行事务操作 commit、rollback 方法时,实际调用的是...

2019-10-19 02:16:14 889

原创 Mybatis数据源类型和连接池实现原理源码分析

Mybatis中的dataSource使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源,有三种内建的数据源类型:UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。 不同的数据库在性能方面的表现也是不一样的,对于某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。...

2019-10-14 23:37:55 502

原创 Mybatis启动初始化过程源码分析

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。Mybatis 是我们 Web 项目中最常...

2019-10-14 00:31:19 562

原创 scala 编译完生成两个class文件有何不同

首先编写一个 HelloWorld.scala 文件object HelloWorld { def main(args: Array[String]) { println("Hello World") }}命令行使用scalac HelloWorld.scala编译后产生两个文件分别为HelloWorld.class和HelloWorld$.class 备注:类似于 J...

2018-06-13 23:45:29 6193

翻译 Scala之旅 - 命名参数(NAMED ARGUMENTS)和包和导入(PACKAGES AND IMPORTS)

命名参数(NAMED ARGUMENTS)当调用方法时,你可以使用它们的参数名称标记参数:def printName(first: String, last: String): Unit = { println(first + &quot; &quot; + last)}printName(&quot;John&quot;, &quot;Smith&quot;) // Prints &quot;John Smith&qu

2018-05-17 02:17:17 469

翻译 Scala之旅-注解(ANNOTATIONS)和默认参数值(DEFAULT PARAMETER VALUES)

注解(ANNOTATIONS)注解将元信息(meta-information)与定义相关联。例如:方法前的注解 @deprecated 会造成编译器在该方法被调用时打印警告信息。object DeprecationDemo extends App { @deprecated def hello = "hola" hello }这个程序可以编译但是编译器会打印一句警告:...

2018-05-17 01:59:06 4780

翻译 Scala之旅-操作符(OPERATORS)和 by-name 参数(BY-NAME PARAMETERS)

操作符(OPERATORS)在 Scala 中,操作符也是方法。任何具有单个参数的方法都可以被作为中缀运算符(infix operator)。例如, + 可以用点表示法调用。10.+(1)但是,作为中缀运算符(infix operator)读起来更容易:10 + 1定义和使用操作符你可以使用任何合法的标识符作为操作符。这包括类似的名称 add 或符号 +。cas...

2018-05-17 01:29:47 501

翻译 Scala之旅-多态方法(POLYMORPHIC METHODS)和类型推断(TYPE INFERENCE)

多态方法(POLYMORPHIC METHODS)Scala 中的方法可以通过类型和值进行参数化。语法和泛型类类似。类型参数用方括号[]括起来,而值参数用圆括号()括起来。看下面例子:def listOfDuplicates[A](x: A, length: Int): List[A] = { if (length &amp;amp;lt; 1) Nil else x ::...

2018-05-17 01:05:20 991

翻译 Scala之旅-隐式参数(IMPLICIT PARAMETERS)和隐式转换(IMPLICIT CONVERSIONS)

隐式参数(IMPLICIT PARAMETERS)方法可以有一个隐式参数列表,在参数列表的开头用 implicit 关键字标记。如果参数列表中的参数没有像往常那样传递,Scala 将会查看它是否可以获取一个正确类型的隐式值,如果可以,则自动的传递它。Scala 将寻找参数的位置分为两类:在带有隐式参数块的方法被调用时,Scala 首先会查找可以被直接获取(没有前缀)的隐式定义和隐式参...

2018-05-17 00:45:17 1795

翻译 Scala之旅-内部类(INNER CLASSES)和复合类型(COMPOUND TYPES)

Scala 中的类可以把其它类作为自己的成员。与内部类是封闭类(enclosing class)成员的 Java 语言相反,Scala 中的内部类被绑定在外部对象上。假设我们希望编译器在编译时能阻止我们,混合哪些节点属于哪个图。路径依赖类型(Path-dependent types)为此提供了一个解决办法。 为了说明这个差异,我们快速书写出图形数据类型的实现:class Graph { ...

2018-05-16 23:50:18 527

翻译 Scala之旅-上边界(UPPER TYPE BOUNDS)和下边界(LOWER TYPE BOUNDS)

上边界在 Scala 中,类型参数和抽象类型可能受到类型界限的约束。这样的类型边界限制了类型变量的具体值并可能揭示此类类型成员的更多信息。上界 T &amp;lt;: A 声明变量类型 T 是 A 类型的子类型。 这里有个例子演示了 PetContainer 类型参数的上边界。abstract class Animal { def name: String}abstract class ...

2018-05-16 23:10:02 1873 4

翻译 Scala之旅-变化(VARIANCES)

变化(Variance)是复杂类型的子类型关系与组件类型的子类型关系之间的相关性。Scala 支持泛型类的参数类型的变化注解(variance annotations),如果没有使用注解,则允许它们是协变的(covariant),逆变的(contravariant)或不可变的(invariant)。在类型系统中使用变化(variance)允许我们在复杂类型之间做出直观的连接,而缺少变化( va...

2018-05-16 23:09:42 876

翻译 Scala之旅-解析(FOR COMPREHENSIONS)和泛型类(GENERIC CLASSES)

Scala 为表达序列解析提供了轻量级的符号。 解析器具有 for (enumerators) yield e 形式,其中 enumerators 是一个以分号分隔的枚举器列表。一个 枚举器要么是一个引入新变量的生成器,要么是一个过滤器。解析器对枚举器生成的每一个绑定的主体 e 进行评估计算,并返回这些值的序列。 看下面这个例子:case class User(val name: Strin...

2018-05-16 16:07:40 363

翻译 Scala之旅-正则表达式模式和提取器对象(EXTRACTOR OBJECTS)

正则表达式模式 正则表达式是用于查找数据中模式的字符串。任何字符串都可以使用 .r 方法转换为正则表达式。import scala.util.matching.Regexval numberPattern: Regex = &amp;amp;quot;[0-9]&amp;amp;quot;.rnumberPattern.findFirstMatchIn(&amp;amp;quot;awesomepassword&amp;amp;quot;) match

2018-05-16 16:03:37 4553

翻译 Scala之旅-单例对象(SINGLETON OBJECTS)

对象是一个只有一个实例的类。当它被引用的时候,它被懒惰地创建,就像一个懒惰的 val 一样。 作为顶级的值,对象是一个单例。 作为封闭类成员或本地值,它的行为表现的完全像是一个懒惰的 val。定义单例对象一个对象是一个值。对象的定义看起来像是一个类,但是使用的是关键字 object:object Box下面是一个带方法对象的例子 新建 Logger.scala...

2018-05-16 13:34:54 1371

翻译 Scala之旅- Case 类(CASE CLASSES)和模式匹配(PATTERN MATCHING)

Case 类(CASE CLASSES) Case 类就像普通类一样,不过和普通类存在几个关键的区别,接下来我们将介绍一下。Case 类有助于对不可变的数据建模。后面也会介绍 Case 类在模式匹配中的应用。定义 case 类一个最简单的 case 类需要关键字 case class,名称标识符和参数列表(参数列可以为空):case class Book(isbn: St...

2018-05-16 13:34:38 4925

翻译 Scala之旅-嵌套方法(NESTED METHODS)和多参数列表(Currying)

嵌套方法(NESTED METHODS)在 Scala 中可以定义嵌套方法。以下提供了 factorial 方法用于计算给定数字的阶乘。 def factorial(x: Int): Int = { def fact(x: Int, accumulator: Int): Int = { if (x &lt;= 1) accumulator else fact...

2018-05-16 01:25:45 791

翻译 Scala之旅-高阶函数(HIGHER-ORDER FUNCTIONS)

高阶函数是把其它函数当作参数或者返回一个函数作为结果。这是可能的,因为在 Scala 中函数是最优先的值。在这点上,术语可能会令人困惑,我们使用术语”高阶函数“来表示那些把函数作为参数或函数作为返回结果的方法和函数。 其中最常见的例子之一,就是 Scala 中可用于集合的高阶函数 map。val salaries = Seq(20000, 70000, 40000)val double...

2018-05-16 00:50:08 689

翻译 Scala之旅-混合组成的类(CLASS COMPOSITION WITH MIXINS)

Mixins 就是用于组成类的 traits。abstract class A { val message: String}class B extends A { val message = &quot;I'm an instance of class B&quot;}trait C extends A { def loudMessage = message.toUpperCase()}c...

2018-05-16 00:45:50 217

翻译 Scala之旅-类(CLASSES)

Scala 中的类是创建对象的蓝图。类中可以包含方法,值,变量,类型,对象,traits(特征)和成员类。类型,对象和traits(特征)将在后面介绍。定义类最简单的类定义就是使用关键字 class 和标识符。类名应该使用大写。class Userval user = new User 使用关键字 new 去创建一个类的实例对象。因为User没有自定义的构造器,所以Scal...

2018-05-02 23:13:54 286

翻译 Scala之旅-统一类型(UNIFIED TYPES)

在 Scala 中,所以的值都有类型,包括数值和函数。下图说明了类型层次结构的子集。 Scala类型层次结构Any 是所有类型的父类型,也叫顶层类型。它里面定义了几个确定的方法,例如equals,hashcode和toString。Any 有两个直接的子类 AnyVal 和 AnyRef。 AnyVal 代表值类型,有9种预定义的值类型并且它们都不能为空:Double,Float,Lo...

2018-05-02 23:12:57 408

翻译 Scala之旅-基础(BASICS)

在这篇文章中,我们将介绍 Scala 的基础知识。在浏览器中试用Scala。 你可以在你的浏览器中使用 ScalaFiddle 来运行 Scala 程序。跳转到https://scalafiddle.io。 在左边输入println("Hello World")。点击“Run”按钮,在右边页面将会显示输出结果。 表达式表达式是可计算的语句。 1 + 1 你可以使...

2018-04-29 01:29:50 369

翻译 Scala之旅-介绍(INTRODUCTION)

欢迎光临这趟旅行包含了对 scala 最常用功能精炼的介绍。它是为新入行的新手准备的。这只是个简单的介绍,而不是全面的语言教程。如果你想全面了解 scala,你可以考虑买本书或者查询一下其他资源。scala是什么scala是一种现代的多范式的编程语言,它被设计用来以简洁、优雅和类型安全的方式来表达常见的编程模式。它平滑的结合了面向对象和面向函数语言的特征。Scala是面向对...

2018-04-29 01:28:50 233

原创 ubuntu16.04搭建Scala运行环境

安装JDK由于Scala运行在Java虚拟机上,所以在安装Scala之间检查一下是否已经安装了JDK。在终端输入:java -version如果出现版本号则表示安装成功。如果显示未找到命令,请按照下面链接先安装JDK。ubuntu16.04搭建jdk1.8运行环境安装Scala下载scala下载地址为:http://www.scala-lang.org/download/ 本例以scala-...

2018-04-27 23:49:55 3524

原创 ubuntu16.04搭建jdk1.8运行环境

搭建环境:Ubuntu 16.04×64JDK :jdk-8u171-linux-x64.tar.gz首先下载linux对应的安装包下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html(随着jdk更新,版本会有变化)下载完成后,Linux默认下载位置在...

2018-04-24 00:01:46 104549 25

原创 ubuntu中环境变量文件/etc/profile、.profile、.bashrc、/etc/bash.bashrc之间的区别和联系

写在前面:不同的发行版里面文件的命名可能有所不同,如有的发行版etc目录下有bashrc,有的发行版下面是bash.bashrc。这个根据每个人不同的发行版注意下具体的文件名称。/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.所以如果你有对/etc/profile有修改的话必须得重...

2018-04-23 23:51:27 28792 10

sharding-JDBC启动流程分析

sharding-JDBC启动流程分析

2020-12-20

Quartz-2.2.1 jar包

包含定时任务的所有jar包以及c3p0数据库连接池jar包等

2016-09-08

SpringMVC3.0jar包

支持搭建springmvc所需的jar包

2016-07-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除