自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(385)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 2、Nacos 配置中心源码解析之 集成 Spring Cloud

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。1、基本架构及概念Nacos 支持服务发现与服务的配置管理,这里我们只是来讨论 Nacos 作为配置中心。命名空间用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或

2021-07-05 22:39:29 347

原创 让定时任务 xxl job 里面的任务灵活起来

在项目当中使用定时任务进行业务补偿是一种很常见的需求。对于一个任务,我们常常把开始时间或者结束时间固定在代码里面。如果出现了定时任务漏掉了数据。比如:定时任务:查询 1 天前到当前系统时间遗漏的数据:在 3 天前有一些数据还没有执行完成如果你没有把开始时间设置成动态变量这个问题就无法解决。你可以通过把开始时间配置在注册中心当中,查询时间就是:3天前 ~ 系统当前时间。这个 SQL 的查询系统就比较低下了。还有一种方式就是开始时间与结束时间都设置成变量配置在注册中心当中,这样就可以动态定制你的任务

2021-06-30 21:11:15 1753

原创 Spring Boot 项目通过 Maven profiles 使用 -P 支持项目多环境配置打包

在我们进行项目开发的时候,都会把一些固定的值添加到配置文件当中进行集中管理。如果更近一步就是通过配置中心进行管理,但是配置中心的地址也是需要配置在项目中的配置文件当中的。一般在项目当中分为不同的环境,比如:local 环境:本地环境,一般是开发人员在本地进行开发测试的环境dev 环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。test 环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定。uat 环境:User Acceptance Test 用户验收测试,一般用于商

2021-05-09 19:53:11 1503

转载 二维码扫码登录是什么原理

转载地址:二维码扫码登录是什么原理前几天看了 极客时间一个二维码的视频,写的不错,这里总结下:在日常生活中,二维码出现在很多场景,比如超市支付、系统登录、应用下载等等。了解二维码的原理,可以为技术人员在技术选型时提供新的思路。对于非技术人员呢,除了解惑,还可以引导他更好地辨别生活中遇到的各种二维码,防止上当受骗。二维码,大家再熟悉不过了购物扫个码,吃饭扫个码,坐公交也扫个码在扫码的过程中,大家可能会有疑问:这二维码安全吗?会不会泄漏我的个人信息?更深度的用户还会考虑:我的系统是不是也可以搞一个

2021-05-08 22:49:05 521

转载 记一次性能优化,单台4核8G机器支撑5万QPS

1、前言这篇文章的主题是记录一次Python程序的性能优化,在优化的过程中遇到的问题,以及如何去解决的。为大家提供一个优化的思路,首先要声明的一点是,我的方式不是唯一的,大家在性能优化之路上遇到的问题都绝对不止一个解决方案。2、如何优化首先大家要明确的一点是,脱离需求谈优化都是耍流氓,所以有谁跟你说在xx机器上实现了百万并发,基本上可以认为是不懂装懂了,单纯的并发数完全是无意义的。其次,我们优化之前必须要有一个目标,需要优化到什么程度,没有明确目标的优化是不可控的。再然后,我们必须明确的找出性能瓶颈在

2021-04-27 07:00:27 679

原创 Java 图形处理框架 Thumbnailator

Thumbnailator 是一个用于 Java 的缩略图生成库。支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。1、为什么使用 Thumbnailator用Java制作高质量的缩略图是一项相当困难的任务。学习如何使用图像I/O API, Java 2D API,图像处理,图像缩放技术,…但是不要害怕!Thumbnailator会为你照顾所有这些事情!Thumbnailator是一个单独的JAR文件,不依赖于外部库,这使得开发和部署变得简单和容易。它也可以在Maven中央存储库中获得,以.

2021-04-23 07:32:42 2003 1

原创 Spring Boot WebFlux 整合 Thymeleaf 示例

大型系统一般都是进行前后端分享,但是我对于系统刚刚从零开始或者一些项目、内部项目都没有进行前后端分离。使用的都是模板技术,今天就来分享一下 Spring Boot WebFlux 整合模板引擎 Thymeleaf 的例子。

2021-03-09 20:52:33 720

原创 06、Sentinel 源码分析 之 受规则保护的资源运行

在之前的文章当中我们通过 json 文件定义规则并且读取这个规则文件通过流量规则管理器 FlowRuleManager把定义的规则加载到 FlowRuleManager 的属性 flowRules 并发安全类 AtomicReference 当中。并且通过 SentinelResourceAspect 这个切面类让类或者方法这些资源上定义了 @SentinelResource 注解具有规则保护的功能。下面我们来看一下,当我们的资源通过 SphU#entry 与 entry#exit 包裹 Sentinel

2021-02-14 10:39:42 299 1

原创 05、Sentinel 源码分析 之 SPI 机制

我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。java spi 就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要

2021-02-13 11:12:06 914

原创 04、Sentinel 源码分析 之 规则加载

从上面的一篇文章中 – 03、Sentinel 源码分析 之 Hello World 我们知道了如何简单的使用 Sentinel 进行限流工作。如果你想知道更加详细的使用方式可以查询 Sentinel 的官方文档。我们首先来回顾一下之前的简单操作,然后就来从源码级别来分析一下这个框架是如何实现的。1、Sentinel 简单操作下面就是使用 Sentinel 框架进行资源限流的简单步骤。public static void main(String[] args) { // 配置规则. i

2021-02-11 10:44:31 579

原创 Java 8 Distinct 去重及自定义元素去重过滤规则

在这一页我们将提供Java 8 Stream distinct() 的例子。distinct() 返回由该流中不同元素组成的流。distinct() 是流接口的方法。distinct() 使用 hashCode() 和 equals() 方法获取不同的元素。因此,我们的类必须实现 hashCode() 和 equals() 方法。如果 distinct() 在有序的流上工作,那么对于重复的元素,在相遇顺序中首先出现的元素将被保留,这样对 distinct 元素的选择是稳定的。在无序流的情况下,不同元素的选

2021-02-07 22:59:40 9947 1

原创 Spring Date MongoDB 查询返回指定字段

最近的工作内容是重构合同,什么是合同(电子合同)?作为第三方支付公司,合同其实就是我们写商户签订的合约。里面包含允许商户操作业务类型、支付方法各种手续费配置及商户结算相关的配置。由于需要考虑到扩展性,所以合同设计采用了三级结构的设计。合同只会保存当时有效的版本在数据库里面,但是产品需求是能够展示合同的的变通记录,也就是合同的版本的概念。1、系统引入 MongoDB由于合同是一种三级结构,其实这个时候可以把它看成一种树形结构。这个时候要动态的比对合同的变化情况,需要把合同的原合同信息与当前合同信息都保存起

2021-02-05 23:04:07 2185 1

原创 03、Sentinel 源码分析 之 Hello World

欢迎来到 Sentinel 的世界!这篇新手指南将指引您快速入门 Sentinel。Sentinel 的使用可以分为两个部分:核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持(见 主流框架适配)。控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。1、引入 Sentinel 依赖如果您的应用使用了 Maven,则在 pom.xml

2021-01-30 21:37:51 231

原创 Spring Cloud 官方介绍:包含 Spring Boot 与 Spring Cloud 对应关系

Spring Cloud为开发人员提供了工具来快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。分布式系统的协调导致了锅板模式,使用Spring Cloud开发人员可以快速建立实现这些模式的服务和应用程序。它们将在任何分布式环境下都能很好地工作,包括开发者自己的笔记本电脑、裸金属数据中心和云计算等托管平台。1、特性Spring Cloud着重于为典型用例提供良好的开箱即用体验,以及覆盖其他用例的扩展机制。

2021-01-30 19:10:04 569 1

原创 02、Sentinel 源码分析 之 Sentinel 简介

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。1、Sentinel 的历史2012 年,Sentinel 诞生,主要功能为入口流量控制。2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。2018 年,Sentinel 开源

2021-01-28 10:03:57 371

转载 01、Sentinel 源码分析 之 断路器实现原理

开始断路器相关内容的学习。1、断路器介绍断路器通过有限状态机实现,该有限状态机有三种正常状态: CLOSED(闭合) 、 OPEN(打开) 和 HALF_OPEN(半打开),以及两种特殊状态: DISABLED(禁用) 和 FORCED_OPEN(强制打开)。断路器使用滑动窗口存储和统计调用的结果。可以选择 基于计数的滑动窗口 和 基于时间的滑动窗口。基于计数的滑动窗口汇总统计最近N次调用的结果。基于时间的滑动窗口将统计最近N秒的调用结果。2、基于访问数量的滑动窗口基于计数的滑动窗口是

2021-01-27 22:28:51 666

原创 8、短路器 Netflix Hystrix 之 Plugins

1、Plugins你可以修改 Hystrix 的行为,或者通过实现插件给它添加额外的行为。你可以通过 HystrixPlugins 服务注册这些插件。然后,Hystrix 将把它们应用到所有 HystrixCommand、HystrixObservableCommand 和 HystrixCollapser 实现中,覆盖其他所有实现。2、Plugin Types以下是你可以实现的不同插件的介绍( Javadocs 包含更多的细节):2.1 事件通知在 HystrixCommand 和 Hystr

2021-01-24 12:29:34 269

原创 7、短路器 Netflix Hystrix 之 Metrics和监控

1、动机当HystrixCommand 和 HystrixObservableCommands 执行时,它们会生成执行结果和延迟的指标。这对系统的操作人员非常有用,因为他们可以深入了解系统是如何运行的。Hystrix 为每个命令键提供指标,并提供非常细的粒度(以秒为单位)。这些指标在单独和总体上都是有用的。获取在请求中执行的命令集以及结果和延迟信息通常有助于调试。聚合度量在理解整体系统级行为方面很有用,并且适合发出警报或报告。Hystrix Dashboard 就是这样一个消费者。下面是命令执行和编写

2021-01-24 12:12:17 875 1

原创 6、短路器 Netflix Hystrix 之 配置指南

1、说明Hystrix 使用 Archaius 作为配置属性的默认实现。下面的文档描述了默认的 HystrixPropertiesStrategy 实现,除非你使用插件覆盖它。每个属性有四个优先级:1.1 代码中的全局默认值如果以下3项都没有设置,则这是默认值。全局默认值在下面的表格中显示为“默认值”。1.2 动态全局默认属性您可以通过使用属性来更改全局默认值。全局默认属性名在下面的表格中显示为“默认属性”。1.3 实例默认代码您可以定义特定于实例的默认值。例子:HystrixCom

2021-01-23 21:04:21 476

原创 5、断路器 Netflix Hystrix 之 运维操作

Hystrix 不仅是一种弹性工程工具,也是一种操作工具。本页面试图分享每天使用 100 多个 Hystrix 命令类型、40 多个线程池、100 多个线程隔离命令和 2000 多个信号量隔离命令执行的系统的一些经验。本页上描述的截图和事件来自 Netflix API 系统,代表了真实的生产问题或对生产的 Latency Monkey 模拟。1、如何配置和调优调用部署新电路的典型方法是使用自由配置(超时/线程/信号量)将其发布到生产环境中,然后在看到它在峰值生产周期中运行后将其调优为更严格的配置。

2021-01-21 07:20:13 217

原创 4、断路器 Netflix Hystrix 之 操作指南

1、Hello World!以下是 HystrixCommand 的最简单的 “Hello World” 实现:public class CommandHelloWorld extends HystrixCommand<String> { private final String name; public CommandHelloWorld(String name) { super(HystrixCommandGroupKey.Factory.asKey(

2021-01-20 21:02:50 492

原创 3、断路器 Neflix Hystrix 之 工作原理

1、流程图下图显示了当你通过 Hystrix 向服务依赖请求时会发生什么:下面几节将更详细地解释这个流程:构造一个 HystrixCommand 或 HystrixObservableCcommand 对象执行这个 Command是否缓存了响应?短路是否打开?线程池/队列/信号量是否已满?HystrixObservableCommand.construct() 或 HystrixCommand.run ()计算短路器健康状态获取 Fallback返回成功的响应1.1 构造一个

2021-01-19 13:14:37 314

原创 2、熔断器 Netflix Hystrix 之 开始使用

1、添加依赖Maven、Ivy、Gradle和其他工具的二进制文件和依赖信息可以在 http://search.maven.org 上找到。Maven的例子:<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>x.y.z</version></

2021-01-18 07:54:24 264

原创 11、Eureka 源码解析 之 Eureka Server 覆盖状态

下面是官方提供的 Eureka 架构图:1、Eureka Server 覆盖状态概述在 InstanceInfo 服务应用信息对象里面不仅有状态status ,还有覆盖状态 overriddenStatus。InstanceInfopublic class InstanceInfo { // 服务应用信息状态 private volatile InstanceStatus status = InstanceStatus.UP; // 服务应用信息覆盖状态 private

2021-01-11 23:08:28 1013

原创 12、Eureka 源码解析 之 Eureka Client 增量拉取注册表

在之前的博客当中 6、Eureka 源码解析 之 Eureka Server 多级缓存 已经详细说明了在 Eureka Client 启动的时候会去 Eureka Server 里面全量的拉取一下注册到里面的服务信息列表。并且 Eureka Server 里面是使用了多级缓存来保存全量的注册信息列表。Eureka Client 在启动时获取 Eureka Server 中的注册信息,但是作为分布式环境服务随时时可进行上线、下线操作。所以作为注册中心它需要有服务自动上下线发现的功能。

2021-01-10 18:59:27 1035

原创 10、Eureka 源码解析 之 Eureka Server 自我保护机制

下面是官方提供的 Eureka 架构图:1、什么是自我保护机制默认情况下,如果Eureka Server在一定时间内(默认 90 秒,其实不止 90 秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,而微服务本身是正常运行的,此时不应该移除这个微服务,所以引入了自我保护机制。...

2021-01-07 22:20:41 1149 1

原创 9、Eureka 源码解析 之 Eureka Server 服务过期

下面是官方提供的 Eureka 架构图:1、Eureka Server 为什么要服务过期正常情况下,应用实例下线时候会主动向 Eureka-Server 发起下线请求,也就是我们之前分析的 – 8、Eureka 源码解析 之 Eureka Client 服务下线。但实际情况下,应用实例可能异常崩溃,又或者是网络异常等原因,导致下线请求无法被成功提交。这种情况之后,需要 Eureka Client 定时向 Eureka Server 发送续约配合 Eureka Client 通过定时任务清理超时的租约

2021-01-06 23:21:22 562

原创 8、Eureka 源码解析 之 Eureka Client 服务下线

下面是官方提供的 Eureka 架构图:1、Eureka Client 服务下线当 Eureka Client 服务关闭之前会调用 DiscoveryClient#shutdown 方法。因为这个方法上面标注了 @PreDestroy 在对象销毁之前这个方法就会被调用。 @PreDestroy @Override public synchronized void shutdown() { if (isShutdown.compareAndSet(false,

2021-01-06 12:59:29 617 1

原创 7、Eureka 源码解析 之 Eureka Client 续约

下面是官方提供的 Eureka 架构图:1、Eureka Client 续约机制在 Eureka Client 需要定时的向注册中心 Eureka Server 发送续约信息,告诉注册中心当前的微服务处于可用状态,这样注册中心在服务剔除的时候才不会把当前服务实例从注册表中删除。在 DiscoveryClient 进行初始化的时候,会调用 DiscoveryClient#initScheduledTasks 方法。在这个方向当中不仅会启动定时任务调用 CacheRefreshThread 线程定时从

2021-01-05 13:21:42 372

原创 6、Eureka 源码解析 之 Eureka Server 多级缓存

下面是官方提供的 Eureka 架构图:1、Eureka Client 全量拉取注册表在微服务中是嵌入了 Eureka Client 的,当服务启动的时候就会从 Eureka Server 中拉取注册的服务信息列表。在微服务中嵌入的 EurekaClient 的实现类 DiscoveryClient 在初始化的时候会通过调用 EurekaHttpClient 去 Eureka Server 拉取全量服务信息列表。在 DiscoveryClient#initScheduledTasks 会启动定

2021-01-04 22:14:56 660

原创 5、Eureka 源码解析 之 Eureka Client 服务注册流程

下面是官方提供的 Eureka 架构图:对于 Eureka 而言,微服务的提供者和消费者都是它的客户端,其中服务提供者关注服务注册、服务续约 和 服务下线等功能,而服务消费者关注于 服务信息的获取。下面我们来看一下 Eureka Client 的服务注册流程。1、Eureka Client 注册流程...

2020-12-30 13:20:41 621

原创 13、Nepxion Discovery 之 全链路调用链监控

在进行微服务调用的时候,为了系统的高可用性,不仅需要进行灰度发布验证服务的可用性。同时对于服务健康的监控也是很重要的一环。Nepxion Discovery 在这方面也有监控方面的集成,包含以下几个方面:蓝绿灰度埋点调用链监控全链路日志监控全链路指标监控1、蓝绿灰度埋点调用链监控1.1 蓝绿灰度埋点调用链监控关于 蓝绿灰度埋点调用链监控 官网描述得很清楚,它内置蓝绿灰度埋点,包括如下:1. n-d-service-group - 服务所属组或者应用2. n-d-service-type

2020-12-27 15:48:28 998

原创 4、Eureka 源码解析 之 Eureka Client 启动原理分析

在前面的一篇文章 3、Eureka 源码解析 之 Eureka Server 启动原理分析当中我们分析了一下 Eureka Server 的启动。在集群环境下 Eureka Server 相互之前需要同步注册表信息。所以不管是微服务当中还是 Eureka Server 当中都需要依赖 eureka-client 这个 Jar 包。它封装 Eureka Server 提供的 Restful 服务,依赖方可以以接口方法的方式方便的进行调用。下面是 Eureka 官网提供的系统架构图。在这个图中有以下几个角色

2020-12-27 12:09:32 539 1

原创 3、Eureka 源码解析 之 Eureka Server 启动原理分析

Eureka 是 Netflix 开源的一款注册中心,下面就是 eureka 的架构图。在这个图中有以下几个角色:Eureka Server:Eureka 服务器,它是注册中心提供接口给应用把服务实例的信息注册上来Eureka Client:Eureka 客户端,Eureka 包装好了微服务访问 Eureka 服务器的一系列接口。比如:注册,心跳,服务下线等。Application Server:微服务应用服务器,一个单体服务可以按照不同的领域拆分为多个微服务。微服务可以依赖 Eureka 客户

2020-12-24 23:02:19 485 1

原创 2、Eureka 源码解析 之 服务配置文件管理解析

Eureka 服务在进行配置管理的时候使用的是接口进行管理。对于 Eureka 服务它提供了很多自定义参数用于服务器上面的各种管理。其实对于 Eureka 来说:它即是一个服务器,因为它是一个注册中心,需要对外部微服务提供服务注册与服务发现;同时它又是一个 Client,因为对于分步式环境当中存在单点故障,为了解决这个功能 Eureka 提供了集群部署功能。那么不同的 Eureka 服务之间就面临微服务注册的注册表信息同步问题。所以 Eureka 也是一个 Eureka Client 它会拉取配置上面的其它

2020-12-22 23:08:00 507

原创 12、Nepxion Discovery 之 Discovery Agent 解决异步场景线程 ThreadLocal 上下文丢失问题

在进行微服务调用的时候,不管是服务之间(A 服务调用 B 服务)还是服务内部调用(服务 A 某个方法进行里有异步)都存在异步调用。但是 ``Nepxion Discovery`` 在进行参数传递的时候很多情况是使用的是基于 ``ThreadLocal``。

2020-12-21 00:28:19 1797 1

原创 11、Nepxion Discovery 之全链路界面操作蓝绿灰度发布

在之前的文章中讲过,用户可以通过 URL 请求以及配置中心进行灰度发布的操作,而且支持配置中心的灰度发布参数的动态变更。如果用户不希望使用上面的两种方式,Nepxion Discovery 框架还支持图形化进行灰度化配置。支持...

2020-12-18 22:45:22 1443

原创 1、Eureka 源码解析 之 调试环境搭建

Eureka ( 是一个基于 REST (Representational State Transfer)的服务,主要用于AWS云中定位服务,以实现中间层服务器的负载平衡和故障转移。在Netflix, Eureka 除了在中间层负载平衡中扮演关键角色外,还用于以下目的。帮助Netflix Asgard - 一个开源服务,使云部署更容易,在快速回滚版本,以防出现问题,避免重新启动100个实例,这可能会花费很长时间。在滚动推送中,为了避免在出现问题的情况下向所有情况传播新版本。对于我们的

2020-12-16 07:20:58 571

原创 10、Nepxion Discovery 之对网关和微服务三大模式的支持

``Nepxion Discovery`` 对于服务灰度发布参数支持:外置``Header``、 ``Parameter``、``Cookie``、``域名``规则策略驱动。并且还内置本地和远程、局部和全局规则策略驱动。并且还支持正则表达式以及通配表达式支持。并且``Nepxion Discovery``支持``Spring Cloud Gateway``、``Zuul网关``和``微服务``三大模式的灰度发布和路由等一系列功能。 所以``Nepxion Discovery`` 对于灰度发布的支持场景还是很

2020-12-13 13:40:18 1768

原创 9、Nepxion Discovery 之服务灰度发布参数的支持

``Nepxion Discovery`` 对于服务灰度发布参数支持:外置``Header``、 ``Parameter``、``Cookie``、``域名``规则策略驱动。并且还内置本地和远程、局部和全局规则策略驱动。并且还支持正则表达式以及通配表达式支持。并且``Nepxion Discovery``支持``Spring Cloud Gateway``、``Zuul网关``和``微服务``三大模式的灰度发布和路由等一系列功能。 所以``Nepxion Discovery`` 对于灰度发布的支持场景还是很

2020-12-10 23:47:56 1304 2

ibatis资源包

iBatis是一款使用方便的数据访问工具,也可作为数据持久层的框架。和ORM框架(如Hibernate)将数据库表直接映射为Java对象相比,iBatis是将SQL语句映射为Java对象。相对于全自动SQL的Hibernate,iBatis允许你对SQL有完全控制权,可以视为半自动的数据访问工具。

2014-05-28

mysql连接数据库驱动

mySql的连接数据库的驱动Jar包。mysql-connector-java-5.1.7-bin.jar

2014-05-28

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

TA关注的人

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