- 博客(69)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 MySQL读写分离2 - SpringBoot 实现简易版
MySQL读写分离2 - SpringBoot 实现简易版1. 读写分离流程2. 简易版实现2.1 配置文件2.2 多数据源配置2.3 使用切面处理方法,定义注解定义切面使用方法1. 读写分离流程通常来讲,读写分离就是写主库读从库,从而用来减轻主库的负载压力。显然这里涉及到的是一个动态数据源切换的方案。简易版的流程如下:配置多个数据源,如一主多从将数据源加入到DataSource中动态选择DataSource,如insert/update操作使用主库,select操作使用从库2. 简易版实
2021-04-14 20:59:30
189
原创 MySQL读写分离1 - 主从模式搭建
MySQL读写分离1 - 主从模式搭建1. 在 Docker 中启动 Mysql1.1 docker-compose up -dmaster节点配置slave1节点配置slave2节点配置1.2 查看容器 docker ps1.3 进入容器1.4 查看mysql服务是否启动2. 修改节点信息2.1 master 节点2.2 slave 节点2.3 常见问题主从没有同步slave重新同步的方法3. MySQL console 常用语句3.1 查看binlog是否开启3.2 设置binlog格式3.3 是否半同
2021-04-14 18:57:48
229
原创 阿里云入门 - 开通ECS、安装Docker、Redis
由于个人开发需求,一些软件需要安装本地的方便使用,但是这些软件如果全安装在主力机笔记本上,会严重拖慢笔记本的速度。 思前想后还是在阿里云上买一台云服务器比较合适。怎么买的,直接上阿里云官网看看,选好配置,直接付款就行了。1. ECS 概览页面买到的机器这里可以显示出来:选中实例之后,需要修改密码,初始化时账号名称是root:使用Workbench登陆:登陆之后页面如下,查看版本号:只要知道IP和账号密码,用什么软件登录都是一样的,个人比较喜欢使用 IDEA 登陆,和开发工具结合在一起(
2021-04-11 11:47:09
278
原创 MyBatis运行原理解析
MyBatis原理解析1 回顾jdbc1.1 jdbc执行流程1.2 SqlSessionFactory & SqlSession1.2.1 获取SqlSession1.2.1.1 源码解析1.3 MapperProxy1.3.1 getMapper1.3.2 mapperRegistry1.3.3 mapperProxyFactory1.4 Excutor1.4.1 执行流程1.4.2 MapperProxy1 回顾jdbc1.1 jdbc执行流程创建连接 connection ->
2021-03-26 17:46:50
163
原创 spring boot 源码学习3 - SpringApplication#run environment
SpringApplication#run environment解析 environmentprepareEnvironment(1)getOrCreateEnvironment :(2)configureEnvironment:(3)ConfigurationPropertySources.attachconfigureIgnoreBeanInfo解析 environment ApplicationArguments applicationArguments = new DefaultApplica
2021-03-17 22:00:22
309
原创 spring boot 源码学习2 - SpringApplication#run
初始化SpringApplication之后,执行run方法,来创建和刷新一个ApplicationContext: public ConfigurableApplicationContext run(String... args) { //1、任务计时器,调用start开始计时 StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = n
2021-03-17 20:12:58
138
原创 spring boot 源码学习1 - SpringApplication初始化
常见spring boot 程序启动类中都是用@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}就是这么一句简单的代码,就构成了spring boot 的世界。我们从这一行开始学习。run方法传入类主类及参数: pu
2021-03-17 18:19:35
125
原创 spring boot 源码学习0 - 环境搭建
阅读和学习spring boot 源码时,一般有两种方式:下载spring boot 源码到本地进行编译在使用了spring boot 项目中,从启动类作为入口进入,并下载源码后进行调试和阅读个人比较偏向于使用第二种,比较方便,并且能满足大多数需求。即从启动类的main方法中的SpringApplication.run()进入,如下: public static void main(String[] args) { SpringApplication.run(XxxMai
2021-03-17 18:17:58
93
原创 MapStruct 入门使用
1. 概述MapStruct 可以将某几种类型的对象映射为另外一种类型,如将多个Domain 对象转换为 DTO,涉及到类似之间对象转换的都可以用它来完成。其主要作用就是:Java bean mappings详细信息可以参考最新版本的文档:MapStruct 1.3.0.Final Reference Guide本文的内容也是来源于官方文档,只是简单的做一个简单的说明,方便理解和快速的使用。...
2020-01-04 15:25:42
4530
原创 Swagger Codegen使用
一、Swagger Codegen简介Swagger Codegen是一个开源的代码生成器,根据Swagger定义的RESTful API可以自动建立服务端和客户端的连接。官方简介看这里:Swagger Codegen二、Swagger简单使用新建一个SpringBoot项目引入依赖 <dependency> <groupId>...
2019-12-29 12:40:11
2638
1
原创 MongoDB - Spring Data MongoTemplate使用
Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate类,方便我们通过java代码对MongoDB进行CRUD的操作。一、增加:save、insert<T> T save(T var1);<T> T save(T var1, String var2);1. 传入对象,不传集...
2019-09-25 23:19:24
944
原创 MongoDB - 入门使用
官方文档1. 查询 - find 操作1.1. finddb.getCollection("core-user").find({'account':'admin'},{'account':1,'password':1}) ;第一个{} 放where条件 第二个{} 指定那些列显示和不显示 (0表示不显示 1表示显示)where条件(第一个大括号中)等于:{‘name’ : ‘hurr...
2019-09-25 22:48:00
209
原创 Java并发工具类 - ThreadLocal
1. ThreadLocal概念ThreadLocal用于线程间的数据隔离。应用场合,最适合的是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到。ThreadLocal是一个本地线程副本变量工具类。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对...
2019-08-04 14:04:58
393
原创 Java并发基础 - CAS之AtomicStampedReference、AtomicMarkableReference
在前一篇文章Java并发基础 - CAS里提到了CAS的缺点中有一条是存在ABA问题,JUC中有类解决了此问题。如AtomicStampedReference、AtomicMarkableReference。此处重点看一下AtomicStampedReference的实现方式。1. ABA问题测试代码public class ABATest { private static Atomi...
2019-08-01 11:24:09
250
原创 IDEA中Thread.activeCount()的问题记录
之前在测试多线程程序时,使用了Thread.activeCount() > 1来判断当前线程组中的活跃线程,但是发现永远都是>1的,导致程序进入了死循环。于是猜测应该不止一个main线程。编写如下程序进行验证:public class ActiveCountTest { public static void main(String[] args) { Thr...
2019-07-31 19:12:11
646
原创 Java并发基础 - CAS(Compare and swap)
1. Java中的原子操作在java中,下列操作是原子操作:all assignments of primitive types except for long and double,除long和double的原始类型赋值all assignments of references,应用类型赋值all operations of java.concurrent.Atomic* classe...
2019-07-31 19:01:47
249
原创 Java并发基础 - AbstractQueuedSynchronizer
AbstractQueuedSynchronizer1. 什么是AQS?抽象的队列式的同步器,AQS定义了一套多线程访问 共享资源的同步器框架,许多同步类实现都依赖于它,如常用的 ReentrantLock/Semaphore/CountDownLatch。2. 此类的重要信息static final class Node Wait queue node class,即等待队列的节点类。...
2019-07-30 19:35:09
160
原创 Java并发工具类 - CountDownLatch、CyclicBarrier、Semaphore
1. CountDownLatch实现类似计数器的功能,将一个任务分为多个任务进行执行。public class MyCountDownLatch { //要处理的任务 -倒计时门栓,任务是独立的 class MyTask implements Callable<String> { @Setter private String na...
2019-07-30 18:51:41
200
原创 JDK和CGLIB动态代理
JDK动态代理定义接口:public interface HelloWorld { void sayHelloWorld();}实现代理类,继承自InvocationHandler:public class JdkProxyDemo implements InvocationHandler { //真实对象 private Object target = nul...
2019-07-22 22:34:12
126
原创 Dell XPS15 9570 拆机&升级内存
1. 购买理由:电子垃圾,小米笔记本Pro15.6,毁我青春、颓我精神、败我钱财…2. 新机如下:2.1 外形:金属外壳,颜值尚可,Dell的logo是银色的,并非图中拍下的黑色。2.2 重量实测,裸机重2259g,加上充电器重2794g。重量不算很轻,但也不重。2.3 乞丐版配置参数2.4 硬盘速度东芝的这块硬盘速度还算可以。3. 拆机加内存综合了网上的信息之后...
2019-07-20 21:05:38
41632
7
原创 JVM - 常量池理解
1. 字符串常量池Heap中,在编译阶段就把所有的字符串文字放进去是一个StringTable类,它是一个哈希表,里面存的是字面值(也就是我们常说的用双引号括起来的)的引用(而不是字面值实例本身)字符串常量池的位置在JDK6.0及之前版本,字符串常量池是放在Perm Gen区(也就是方法区)中在JDK7.0版本及之后,字符串常量池被移到了堆中1.1 String str = n...
2019-07-19 21:35:33
135
原创 JVM - 垃圾回收
1. 对象已死吗?引用计数算法:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时就减1。无法解决对象之间循环引用的问题。可达性分析算法:通过一系列的“GC Roots”的对象作为起始点,从这些起始点向下搜索,走过的路径称为引用链,当一个对象到GC Roots没有任何引用链时,则证明此对象是不可用的。可作为GC Roots的对象包括以下几种:虚拟机栈(栈...
2019-07-18 22:51:40
112
原创 Java Collection - HashMap
一、 Map<String, String> map = new HashMap<>(16)调用构造函数时,并没有初始化,设置参数:load_factor、容量等//有初始容量的构造函数public HashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR); ...
2019-07-18 20:45:45
103
原创 Mybatis与Spring集成:SqlSessionTemplate
Mybatis与Spring集成:SqlSessionTemplateSqlSessionTemplate构造方法 public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory, ExecutorType executorType, PersistenceExceptionTranslator exceptionTra...
2019-07-17 19:41:04
427
原创 Oracle开启远程访问
Oracle开启远程访问最近安装了Oracle11g以后,在另一台电脑上却无法连接上,一度造成了困扰,最后发现是设置错误导致的。在此记录一下。安装Oracle11g此处是直接安装的,没有做远程访问的配置,所以无法从另外的电脑连接。如果做了配置,可能是可以直接连接的,则不需要再做此配置。修改配置文件配置文件位于:安装目录\11.2.0\dbhome_1\NETWORK\ADMIN\...
2019-07-15 19:20:50
9485
1
原创 Java并发基础 - ReentrantLock
主要内容:ReentrantLock Demo示例公平锁和非公平锁的详细实现公平和非公平的定义ReentrantLock使用场景和synchronized的简单比较一、 ReentrantLock1. 先看Demo示例,再细细道来原理:@Slf4jpublic class LockDemo { //ReentrantLock无参构造方法,sync = new Nonf...
2019-07-10 21:44:51
207
原创 Java Collection - ArrayList & LinkedList
ArrayList基础属性:transient Object[] elementData; 存储数据的数组private static final int DEFAULT_CAPACITY = 10; 默认长度private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; default sized ...
2019-07-09 21:42:21
95
原创 Spring Boot - Bean的作用域
基础概念Spring提供了两种容器类型:BeanFactory和ApplicationContext。BeanFactory。基础类型IoC容器,提供完整的IoC服务支持。()Spring框架提倡使用POJO,那么把每个业务对象看作一个JavaBean对象,或许更容易理解为什么Spring的IoC基本容器会起这么一个名字。)ApplicationContext。ApplicationCon...
2019-07-08 22:05:30
620
原创 Docker学习笔记2:Docker Compose使用
Docker Compose是Docker官方的开源编排工具,它可以让用户通过编写一个简单的模板文件,快速的创建和管理基于Docker容器的应用集群。一、安装查看官网,有多种方式可以安装,此处使用比较简单的一种,直接使用命令行安装,并赋给执行权限:curl -L https://github.com/docker/compose/releases/download/1.25.0-rc1/do...
2019-07-06 10:31:54
212
原创 Dubbo入门使用
1. Dubbo简介Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案。Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。Dubbo框架使得使用者可以像调用本地方法一样调用远程方法,而这一切只需要简单的配置。Dubbo完全兼容Spring...
2019-07-04 21:16:19
358
1
原创 Kafka初识
1. Kafka概念kafka是一个分布式消息队列。具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。最大的特性就是可以实时的处理大量数据以满足各种需求场景1.1 重要术语Broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker(中间人,代理人)Topic...
2019-07-03 21:20:59
458
原创 SpringCloud初识
1. 服务注册中心 - eureka失效剔除对于已经异常下线的服务Eureka采用了定时清除:EurekaServer在启动的时候会创建一个定时任务,每隔60秒就去将当前服务提供者列表中超过90秒还没续约的服务剔除出去自我保护Eureka Server在运行期间会去统计心跳失败比例在15分钟之内是否低于85%,如果低于85%,Eureka Server会将这些实例保护起来,让这些实例不会...
2019-07-03 00:09:42
93
原创 Java常用集合类
1. Arrays2. HashMap3. ArrayList文章主要内容是从本人的OneNote笔记中复制过来的,部分图片来源于网络,侵删。
2019-06-30 23:49:23
93
原创 JVM - 内存区域与内存溢出异常
程序计数器:一块较小的内存空间,当前线程所执行的字节码的行号指示器。Java栈也称作虚拟机栈、栈内存,为JVM执行Java方法(也就是字节码)服务。 Ø 本地方法栈(native)。Java堆(Heap)。 方法区(Non-Heap)
2019-05-06 11:01:43
137
原创 Spring Boot - 自定义starter
关于Spring Boot的运行原理,还是要回归到@SpringBootApplication注解上来,此注解是一个组合注解。其核心@EnableAutoConfiguration借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器...
2019-04-29 22:56:31
141
原创 Java异常体系
检查异常-checked异常; 非检查异常-unchecked异常 (运行时异常)。一般来说,我们在方法体内出现异常,我们用throw 关键字将异常对象或异常对象的引用抛出,如果当前方法无法处理异常,那么必须在方法的参数列表后方法体前必须用throws 声明异常所属类,交给调用者去处理。RuntimeException是非常特殊的子类,可以不用throw和throws。当运行时异常发生,希望程序停止不往下运行,因为在运行时,出现了无法继续运算的情况,希望程序停止后由程序员对代码进行修正。
2019-04-28 23:40:23
112
原创 Java内存模型-synchronized、volatile
内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。 1. 主内存和工作内存: Java内存模型规定了所有的变量都存储在主内存中(此处的主内存仅是虚拟机内存的一部分,共享)每条线程还有自己的工作内存(可类比处理器的高速缓存)。。。。
2019-04-28 23:24:52
149
原创 IDEA源码编译Jmeter 5.1.1
1. 下载jmeter源码可以从Apache官网下载zip包后解压得到源码。源码的结构如图所示:2.修改文件名称打开命令行,切换到放置源码的地方,将下图中的两个文件名称修改一下,使其可以当做Eclipse工程导入IDEA。3. 导入项目......4. 安装依赖由于jmeter使用的是Ant来管理依赖的,我们需要安装Ant插件来安装依赖包。如下图所...
2019-04-12 00:11:58
2221
1
TA创建的收藏夹 TA关注的收藏夹
TA关注的人