java
文章平均质量分 78
yonggang7
hello world !
展开
-
源码解析(三):MyBatis如何选择数据源
MyBatis如何选择数据源简介Mybatis调用数据源时序图主流程SimpleExecutorSpringManagedTransactionDataSourceUtils简介当我们自定义数据源 DynamicDataSource, 时, MyBatis是如何使用这个数据源, 并且建立连接的Mybatis调用数据源时序图绿色部分为我们业务实现代码。主流程在执行器 Executor中生成 Statement, 首先建立连接, 事务管理器中生成连接, 通过事务管理器检查是否为事务,Simple原创 2022-01-18 15:14:00 · 2652 阅读 · 0 评论 -
源码解析(二):多数据源的实现
多数据源实现继承实现 AbstractRoutingDataSource 类线程本地变量 DataSourceHolder数据源配置类数据源的设置与使用继承实现 AbstractRoutingDataSource 类AbstractRoutingDataSource类介绍见前一篇创建 DynamicDataSource 类,继承 AbstractRoutingDataSource , 实现了 determineCurrentLookupKey() 方法, 返回当前数据源的key/** * Dyna原创 2022-01-18 15:08:23 · 829 阅读 · 0 评论 -
源码解析(一):Spring JDBC如何实现多数据源
Spring JDBC如何实现多数据源背景类介绍bean初始化设置属性(1)AbstractRoutingDataSource 属性(2)初始化设置设置当前lookupKey(1)获取 lookupKey(2) 找到目标数据源获取连接背景为了实现多数据源需求, 每个用户连接不同的数据源,需要按照用户信息,动态切换数据源, 同一套代码,不同的线程执行,使用不同的数据源使用 spring jdbc中 AbstractRoutingDataSource 来实现类介绍AbstractDataSource原创 2022-01-18 15:01:00 · 1447 阅读 · 0 评论 -
Java日志框架(八):Springboot中日志
Springboot日志简介Maven依赖依赖图日志实现使用Maven依赖代码配置修改默认配置指定配置文件使用SpringBoot解析日志配置日志切换到log4j2简介Springboot中默认使用slf4j日志门面+logback日志实现Maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star原创 2020-11-24 01:09:49 · 224 阅读 · 0 评论 -
Java日志框架(七):log4j2
log4j2简介官网地址使用Maven代码slf4j + log4j2配置文件log4j2异步日志AsyncLogger性能无垃圾模式log4j2.5log4j2.6简介Apache Log4j 2是对Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:异常处理,在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。性能提升, log4j2相较于log4j 和logback都具有很明显原创 2020-11-22 23:14:40 · 325 阅读 · 0 评论 -
Java日志框架(六):logback
logback简介官网地址手册地址模块使用Maven依赖代码配置文件配置文件加载顺序配置文件log4j.properties转换成logback.xml简介Logback是由log4j创始人设计的另一个开源日志组件, 性能好于log4j官网地址http://logback.qos.ch/手册地址http://logback.qos.ch/manual/index.html模块Logback主要分为三个模块:logback-core:其它两个模块的基础模块logback-classic:原创 2020-11-22 20:02:57 · 218 阅读 · 0 评论 -
Java日志框架(五):SLF4J
SLF4J简介官方网址手册地址slf4j使用Maven依赖Java代码日志绑定使用slf4j的日志绑定流程引入Maven依赖绑定桥接旧的日志框架官网介绍桥接问题迁移方式注意事项slf4j原理解析简介简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Java日志访问提供一套标准、规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如log4j和logback等。当然slf4j自己也提供了功能较为简单的实现,但是一般很少用到。对于一原创 2020-11-22 16:48:58 · 381 阅读 · 0 评论 -
Java日志框架(四):日志门面
日志门面简介常用门面框架常用日志实现日志门面和日志实现的关系日志框架出现时间顺序推荐使用简介门面模式(Facade Pattern),也称之为外观模式,其核心为:外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。就像前面介绍的几种日志框架一样,每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性。为了解决这个问题,就是在日志框架和应用程序之间架设一个沟通的桥梁,对于应用程序来说,无论底层的日志框架如何变,原创 2020-11-22 10:58:47 · 584 阅读 · 1 评论 -
Java日志框架(三):JCL
JCL简介官方网址手册地址使用maven依赖java使用原理Log类的实现实现流程LogFactory简介JCL(Jakarta Commons Logging)是Apache提供的一个通用日志API。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具: Log4j, Jdk自带的日志(JUL)官方网址http://commons.apache.org/proper/commons-logging/index.html手册地址http://com原创 2020-11-21 17:32:28 · 297 阅读 · 0 评论 -
Java日志框架(二):log4j
log4j简介官方网址手册地址使用maven依赖Java使用代码log4j日志级别打开日志调试信息log4j组件LoggersAppendersLayouts配置文件文件目录Layout的格式Appender的输出自定义Logger简介Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能原创 2020-11-21 13:15:40 · 158 阅读 · 0 评论 -
Java日志(一):JUL
JULJava日志框架日志框架需要解决的问题:现有日志框架日志门面日志实现JUL简介JUL使用日志框架原理JUL配置自定义日志级别Logger之间的父子关系日志配置文件Java日志框架日志框架需要解决的问题:控制日志输出的内容和格式控制日志输出的位置日志优化:异步日志,日志文件的归档和压缩日志系统的维护面向接口开发 – 日志的门面现有日志框架JUL(java util logging)、logback、log4j、log4j2JCL(Jakarta Commons Logging)、原创 2020-11-17 00:37:55 · 387 阅读 · 0 评论 -
Java泛型
Java泛型泛型集合菱形语法泛型接口、类派生子类静态变量类型通配符类型通配符上限类型形参上限泛型方法泛型方法和通配符泛型构造器泛型泛型,Generic。允许在定义类,接口,方法时使用类型形参。这个类型形参在声明变量,创建对象,调用方法时动态指定,传入类型实参。集合集合框架中接口和类增加了泛型支持。Java集合对元素类型没有限制,在编译时不检查类型。 对象加入后,取出会变成 Object...原创 2019-02-24 20:53:32 · 134 阅读 · 0 评论 -
Java NIO.2
Java NIO.2NIO.2Path, Paths, FilesFileVisitorWatchService文件属性NIO.2Java7 对NIO进行了改进:新增java.nio.file 包,提供全面的文件IO和文件系统访问;基于异步Channel的IO,在java.nio.channels下增加 Asynchronous开头的Channel接口和类。Path, Paths, ...原创 2019-02-24 11:12:01 · 604 阅读 · 0 评论 -
Java NIO
Java NIOJava NIOBufferChannelCharset文件锁Java NIOJava 新IO New IO, 简称NIO。NIO和传统IO都用于进行输入/输出。NIO采用内存映射文件的方式处理IO,面向缓冲区的。将文件或文件的一段区域映射到内存中,像访问内存一样访问文件。传统IO是面向流的处理, NIO是面向块的处理。NIO相关包:java.nio : 与 Bu...原创 2019-02-23 23:45:03 · 154 阅读 · 0 评论 -
Java对象序列化
对象序列化对象序列化使用对象流实现序列化对象引用的序列化自定义序列化transient自定义控制各实例对象替换readResolve()Externalizable版本对象序列化Java的对象序列化是将Java对象转换成字节序列,二进制流。这些字节序列可以保存在磁盘,或通过网络传输。并且可以将这种二进制流恢复成原来的Java对象。对象的序列化(Serialize)是将JAVA对象写入IO流...原创 2019-02-17 15:43:48 · 682 阅读 · 0 评论 -
Java内部类
将一个类放在另一个类内部,这个在其他类内部的类称为内部类, 或嵌套类。包含内部类的类称为外部类,或宿主类。成员内部类分为两种:静态内部类非静态内部类使用 `static` 修饰的内部类为 静态内部类。一个Java源文件中定义多个类,不属于内部类。外部类有默认和 public两种权限:默认为包, public为任何位置内部类由4个访问权限: private : 同一个类 默认: 同一个包 protected : 父子类 public类: 任何位置原创 2019-01-30 22:55:04 · 234 阅读 · 0 评论 -
Java线程池
线程池线程池ExecutorsFolkJoinPoolThreadLocal类线程池系统启动一个线程的成本是比较高的,涉及与操作系统的交互。使用线程池可以很好的提高性能。线程池在系统启动时创建大量空闲线程,程序将Runnable或Callable对象传给线程池,线程池会启动一个线程执行他们的run()或call() 方法, 执行结束后,线程不会死亡, 而是回到线程池中进入空闲状态。使用线程...原创 2019-04-21 21:19:28 · 219 阅读 · 0 评论 -
Java RandomAccessFile
RandomAccessFileRandomAccessFile方法RandomAccessFileRandomAccessFile 类是JAVA IO流体系中功能最丰富的文件内容访问类。可以读取文件内容,也可以写入,支持随机访问, 跳转到任意位置读写数据。与 OutputStream , Writer 输出流不通,允许自由定位文件记录指针。RandomAccessFile 只能读写文件...原创 2019-02-08 22:08:58 · 1191 阅读 · 0 评论 -
Java异常处理Exception
Java ExceptionJava 异常机制异常类Exception捕获多异常访问异常信息finallytry关闭资源Checked 和 Runtime 异常throwsthrow自定义异常类Java 异常机制Java异常机制主要依赖 try, catch, finally, throw, throws 五个关键字。使用 try catch捕获异常。try块中业务代码出现异常, 系统自动...原创 2019-03-03 21:02:15 · 310 阅读 · 0 评论 -
Java注解Annotation
注解Java注解基本Annotation@Override@Deprecated@SuppressWarnings@SafeVarargs@FunctionalInterface元Annotation@Retention@Target@Documented@Inherited@Repeatable自定义注解提取Annotation信息APTJava注解Java注解(Annotation)提供了...原创 2019-03-10 21:49:09 · 475 阅读 · 0 评论 -
Java多线程
多线程进程与线程线程的创建与启动继承Thread类创建线程类使用 RunnableCallable 和 Future三种方式对比进程与线程当一个程序进入内存运行时,变成一个进程(Process)。进程的特征:独立性: 进程是系统中独立存在的实体,拥有独立的资源,每一个进程都拥有自己私有的地址空间。在没有进程本身允许下,一个用户进程不可用直接访问其他进程的地址空间。动态性: 程序是静态的...原创 2019-04-07 11:54:21 · 179 阅读 · 0 评论 -
Java线程控制
线程控制线程的生命周期新建和就绪运行和阻塞状态线程死亡控制线程join线程后台线程sleep()yield()线程的生命周期线程的生命周期:新建(NEW),就绪(Runnable),运行(Running),阻塞(Blocked),死亡(Dead)5种状态。新建和就绪当使用 new关键字创建一个线程时,线程处于新建状态。Java虚拟机为其分配内存。并初始化其成员变量的值。当线程对象调用 s...原创 2019-04-07 16:55:03 · 151 阅读 · 0 评论 -
Java线程同步
线程同步线程同步同步代码块同步方法释放同步监视器的锁定同步锁Lock死锁线程通信wait(), notify()使用Condition控制线程BlockingQueue线程同步多个线程操作一个资源的情况下,导致资源数据前后不一致。这样就需要协调线程的调度,即线程同步。 解决多个线程使用共通资源的方法是:线程操作资源时独占资源,其他线程不能访问资源。使用锁可以保证在某一代码段上只有一条线程访问共...原创 2019-04-21 14:09:35 · 161 阅读 · 0 评论 -
Java网络支持
网络支持网络支持使用 InetAddressURLEncoderURL网络支持Java为网络支持提供了 java.net 包。包括 URL和 URLConnection等类。使用 InetAddressInetAddress类代表 IP 地址, 包含2个子类:Inet4Address : 代表 IPv4, Internet Protocol version 4Inet6Address...原创 2019-05-02 21:56:42 · 356 阅读 · 0 评论 -
基于TCP协议的网络编程
TCP网络编程TCP/IP协议使用Socket通信服务端客户端多线程聊天半关闭Socket使用NIO实现非阻塞式通信使用AIOTCP/IP协议TCP/IP 协议是一种可靠的网络协议, 它在通信的两端各建立一个Socket,从而在通信的两端形成网络虚拟链路。从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。IP互联网协议(英语:Internet Pro...原创 2019-05-03 17:55:38 · 1174 阅读 · 0 评论 -
基于UDP协议的网络编程
UDP协议网络编程UDP协议DatagramSocketMulticastSocketUDP协议UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP协议是面向非连接的协议,没有建立连接的过程, 因...原创 2019-05-03 20:31:32 · 489 阅读 · 0 评论 -
Maven进行测试Test
Maven测试maven测试为 default 生命周期中的test阶段。 test阶段与 maven-surefire-plugin 的test目标相绑定了, 这是一个内置的绑定。 Maven通过插件来执行 JUnit 和 TestNG 的测试用例。maven-surefire-plugin 的test目标会自动执行测试源码路径下符合命名模式的测试类。 默认测试源代码路径: src...原创 2018-04-01 18:57:09 · 54496 阅读 · 4 评论 -
Java重定向标准输入/输出
重定向IO重定向IO读取其他进程的数据重定向IOJava标准输入是 System.in, 代表键盘标准输出是 System.out, 代表显示器。System类提供下面重定向标准IO。setErr(PrintStream err): 重定向标准错误setIn(InputStream in): 重定向标准输入setOut(PrintStream out): 重定向标准输出下面将...原创 2019-02-08 21:00:30 · 1275 阅读 · 0 评论 -
Java IO流
IO流IO流流的分类输入输出流字节流和字符流节点流和处理流InputStream和ReaderOutputStream 和 Writer处理流用法IO流转换流推回输入流IO流Java IO流是实现输入/输出的基础。Java把不通的输入/输出源(键盘,文件,网络连接等)抽象为&quot;流&quot;,Stream。通过流的方式使用相同的方式来访问不同的输入/输出源。stream是从起源(source)到接收...原创 2019-02-08 19:40:28 · 225 阅读 · 0 评论 -
Java文件File类
File类是 java.io 包下代表与平台无关的文件和目录。不管是文件,还是目录都可以使用File来操作。可以用来新建,重命名,删除文件和目录。但是不能访问文件内容本身。访问文件本身需要输入/输出流。 - getName(): 返回文件名或路径名 - getPath(): 返回路径 - getAbsoluteFile(): 绝对路径 - getAbsolutePath(): 绝对路径名 - getParent(): 父目录名 - renameTo(): 重命名原创 2019-02-07 20:58:41 · 319 阅读 · 0 评论 -
Java类加载器
类加载器类加载器分类根类加载器类加载器分类类加载器负责加载所有的类。在Java中,一个类用全限定类名(包名 +类名)作为标识。在JVM中, 一个类用全限定类名和其类加载器作为标识。当JVM启动时,会形成由三个类加载器组成的初始类加载器:Bootstrap ClassLoader : 根类加载器Extension ClassLoader: 扩展类加载器System ClassLoad...原创 2018-12-22 22:43:14 · 177 阅读 · 0 评论 -
Java类加载机制
类的加载当第一次使用类时, 如果类还没有加载到内存中, 则通过 加载,连接,初始化 三步对类进行初始化。类的加载或类的初始化就是通过 JVM 完成 这三步骤: 加载, 连接,初始化。类的加载是将类的class文件读入内存,并为之创建一个 java.lang.Class 对象。类也是一种对象,系统中的类实际上也是一种对象, 他们都是java.lang.Class 的实例。类的加载由类加载器...原创 2018-12-22 20:21:06 · 189 阅读 · 0 评论 -
JAVA初始化块和静态初始化块
这里写自定义目录标题初始化块初始化块和成员变量初始化块和构造函数静态初始化块初始化块初始化块对Java对象进行初始化工作。一个类里可以有多个初始化块。按照定义的先后顺序执行。[修饰符]{ //初始化块代码 ...}初始化块的修饰符只能是 static。使用 static 修饰的称为 静态初始化块。初始化块和构造函数执行顺序:public class Person { ...原创 2018-12-22 11:36:02 · 1852 阅读 · 1 评论 -
Maven archetype生成项目框架
Archetype简介Archetype 用来生成Maven项目的骨架。 使用 maven-archetype-plugin 插件来实现。命令mvn archetype:generate 命令来生成项目的框架。 执行中需要输入项目的 groupId, artifactId, version, package 命名。批处理方式生成:使用 -B 参数 使用 -D 参数显式的指...原创 2018-04-14 21:59:01 · 798 阅读 · 0 评论 -
Sonatype Nexus搭建Maven私服
Nexus简介Nexus是当前流行的Maven仓库管理软件。安装Nexus当前最新版为 3.10.0 . 下载地址: https://help.sonatype.com/repomanager3/download 下载解压后有下面目录:nexus-3.10.0-01 该目录包含Nexus运行需要的文件,启动脚本,依赖jar包等。sonatype-work 包含Nex...原创 2018-04-14 17:56:01 · 836 阅读 · 0 评论 -
Maven聚合与继承
聚合Maven聚合为了一次构建多个项目, 将项目的子模块一次性构建。 使用<modules> 节点。 例如已经有两个模块,分别为account-email,account-persist,我们需要创建一个额外的模块, 假设名字为account-aggregator,然后通过该模块,来构建整个项目的所有模块,accout-aggregator本身作为一个Maven项目,它必须有自...原创 2018-03-31 14:42:02 · 308 阅读 · 0 评论 -
Maven生命周期和插件
Maven生命周期Maven拥有三套相互独立的声明周期。clean defaultsiteclean生命周期用于清理项目, 包含三个阶段: 1. pre-clean 执行清理前需要完成工作 2. clean 清理上一次构建生成的文件 3. post-clean 执行清理后需要完成的工作 简介default生命周期定义了真正构建时所需要执行的...原创 2018-03-18 22:39:38 · 1009 阅读 · 0 评论 -
Maven仓库
Maven仓库Maven在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是Maven仓库。 仓库路径为 groupId/artifactId/version/artifactId-version.packaging groupId 中的 . 转换为 /仓库分类Maven仓库分为本地仓库和远程仓库。 远程仓库分为:中央仓库, 私服, 其他公共库。当Maven...原创 2018-03-18 19:30:39 · 328 阅读 · 0 评论 -
Maven依赖
Maven依赖的配置依赖声明包含以下元素:<project>... <dependencies> <dependency> <groupId></groupId> <artifactId></artifactId> <versi原创 2018-03-17 20:00:31 · 383 阅读 · 0 评论 -
Maven坐标
Maven坐标Maven的世界中拥有数量巨大的构件,也就是平时用的一些jar, war等文件。 每一个构件都可以使用Maven坐标唯一标识。 一组Maven坐标是通过这些元素定义的: groupId, artifactId, version, packaging, classifier。<groupId>org.sonatype.nexus</groupId>...原创 2018-03-17 11:55:45 · 399 阅读 · 0 评论