通过上篇文章《Mybatis 框架日志相关源码分析(二)》了解了 Mybatis 通过工厂模式创建 Log 接口的实现类,那么拿到实现类之后, Mybatis 是如何输出日志的呢?本文将分析 Mybatis 框架的日志相关源码,了解 Mybatis 使用 JDBC 时,是通过何种方式输出日志。Mybatis 执行过程也可使用 JDBC 差不多,首先是要获取 Connection 对象。而获取此对象是通过 BaseExecutor#getConnection() 方法。protected Connection getConnection(Log statementLog) throws SQLException { Connection connection = transaction.getConnection(); if (statementLog.isDebugEnabled()) { return ConnectionLogger.newInstance(connection, statementLog, queryStack); } return con
通过上篇文章《Mybatis 框架日志相关源码分析(一)》了解了 Mybatis 框架通过适配器模式,来整合其它日志框架。而我们都知道要想使用 Log 接口,就需要有具体的实现类对象,那么 Mybatis 是如何创建具体的实现类对象呢?本文将分析 Mybatis 框架的日志相关源码,了解 Mybatis 如何创建日志实现类对象。Mybatis 在解析到配置中的具体日志 Value 内容时,不仅保存了对应的 Class<? extends Log> 属性,还有一行代码:LogFactory.useCustomLogging(this.logImpl):public void setLogImpl(Class<? extends Log> logImpl) { if (logImpl != null) { this.logImpl = logImpl; LogFactory.useCustomLogging(this.logImpl); } }LogFactory 这个类可谓是见名知意,Log 工厂,在设计模式中,这明显就是工厂模式。继续深入
日志是框架必不可少的一个部分,它有助于开发人员排除和发现问题。在 Mybatis 框架中,通过内置的日志工厂提供日志功能。内置日志工厂将会把日志工作委托给下面的实现之一:SLF4JApache Commons LoggingLog4j 2Log4j (3.5.9 起废弃)JDK logging本文将分析 Mybatis 框架的日志相关源码,了解适配器模式在日志源码中的应用。先从配置说起,配置 Mybatis 日志,是通过在 mybatis-config.xml 文件里面添加一项 setting 来使用:<configuration> <settings> ... <setting name="logImpl" value="LOG4J"/> ... </settings> </configuration>上面所示的 value 值为:LOG4J ,这是 Mybatis 可选的几个值之一,通过源码 Configuration#205 可知所有 value 可
原文:《Reactive programming 一种技术 各自表述》前言作为一名 Java 开发人员,尤其是 Java 服务端工程师,对于 Reactive Programming 的概念似乎相对陌生。随着 Java 9 以及 Spring Framework 5 的相继发布,Reactive 技术逐渐开始被广大从业人员所注意,笔者作为其中一员,更渴望如何理解 Reactive Programming,以及它所带来的哪些显著的编程变化,更为重要的是,怎么将其用于实际生产环境,解决当前面临的问题。然而,随着时间的推移和了解的深入,笔者对 Reactive Programming 的热情逐渐被浇息,对它的未来保持谨慎乐观的态度。本文从理解 Reactive Programming 的角度出发,尽可能地保持理性和中立的态度,讨论 Reactive Programming 的实质。初识 Reactive笔者第一次接触 Reactive 技术的时间还要回溯到 2015年末,当时部分应用正使用 Hystrix 实现服务熔断,而 Hystrix 底层依赖是 RxJava 1.x,RxJava 是
原文:http://www.liaocp.cn/archives/67.html常见的 Java 源代码,首先通过 javac 编译成字节码(bytecode),然后字节码通过 JVM 解释为机器码执行。此时 JVM 可以理解为解释执行模式。这也是常见的说法:Java 是解释执行的语言。但是在常见的 JVM 中,例如 Oracle JDK 的 Hotspot JVM ,里面提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行。解释执行使用 -Xint 参数,可以指定 JVM 只通过解释执行,不对代码进行编译。这种模式会降低运行速度,因为它抛弃了 JIT 的性能优势。java -Xint -version java version "1.8.0_71" Java(TM) SE Runtime Environment (build 1.8.0_71-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.71
Feign是声明式的 Web Service客户端,它让微服务之间的调用变得更简单了,类似 Controller 调用 Service。Spring Cloud 集成了 Ribbon 和 Eureka ,可在使用 Feign 时提供负载均衡的 HTTP 客户端。使用方法添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 编写接口@FeignClient("userservice") public interface UserClient { @GetMapping("/user/{id}") User findById(@PathVariable("id") Long id); } 调用接口@Autowired private Us
新增配置 DataID:需要唯一不重复,建议使用 微服务名称 + 环境名 + 后缀名(yaml等) 启动流程 项目启动 读取 Nacos 配置文件,通过 bootstrap.yml 文件 读取本地配置文件 application.yml 创建 Spring 容器 加载 bean …… 读取配置 引入客户端依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 在项目的 resource 目录新增 bootstrap.yml 文件,此文件是引导文件,优先级高于 application.yml spring: application: name: userservic
角色注册中心一般有三种角色: 服务提供者:启动时,向 Nacos 注册服务信息。 服务消费者:定时(间隔30s)拉取服务(pull),将拉取的信息缓存在服务列表中。同时 Nacos 发现服务信息变更,会主动推送变更消息 (push)。 注册中心:Nacos 。 实例Nacos 会将服务提供者划分为 临时实例 和 非临时实例 ,Nacos 对这两种实例的健康监测是不一样的。默认情况下:所有的实例都是临时实例。推荐临时实例,非临时实例对服务器压力大。 临时实例:采用心跳监测。如果服务不存在,从列表中删除。 非临时实例:Nacos 发起请求检测。如果服务不存在,并不会从列表中删除,而是标记不健康,等待恢复健康。 配置非临时实例,通过更改项目配置spring: cloud: nacos: server-addr: localhost:8848 discovery: cluster-name: GZ namespace: 62c75d23-5839
Eureka 是 Netflix 开发的服务发现框架,本身是一个基于 REST 的服务,主要用于定位运行在 AWS 域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。 Spring Cloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 Spring Cloud 的服务发现功能。Eureka 角色在 Eureka 架构中,微服务角色有两类:Eureka Server:服务端,注册中心 记录服务信息 心跳监控 Eureka Client:客户端 Provider:服务提供者 注册自己的信息到 Eureka Server 每隔 30 秒向 Eureka Server 发送心跳 Consumer:服务消费者 根据服务名称从 Eureka Server 拉取服务列表 基于服务列表做负责均衡,选中一个微服务后发起远程调用 搭建 Eureka Server 创建项目,引入下面依赖 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spr
此间少年
QQ群:539165194