
Java
文章平均质量分 88
haiqiang0225
1
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【微服务】SpringCloud(SpringCloud Alibaba)微服务秒杀项目-05:OpenFeign服务接口调用
文章目录SpringCloud-05: OpenFeign服务接口调用微服务服务接口调用Feign与OpenFeign集成OpenFeignOpenFeign超时控制OpenFeign日志增强SpringCloud-05: OpenFeign服务接口调用项目Github地址Spring Cloud OpenFeign 官方文档微服务服务接口调用之前的调用方式restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, Result原创 2022-04-13 14:08:44 · 333 阅读 · 0 评论 -
【微服务】SpringCloud(SpringCloud Alibaba)微服务秒杀项目-04:实现客户端负载均衡
SpringCloud-04: 实现客户端负载均衡项目Github地址负载均衡概念负载+均衡,就是字面意思:将负载均衡到所有的服务器上,让总的压力平均到每个服务器上,防止某个服务器承受不住压力直接挂掉了。实现客户端负载均衡客户端知道每个后端,发送请求时尽量均衡的去发送。服务端负载均衡最常见的就是Nginx负载均衡,客户端是不知道服务端具体是谁的,它只知道Nginx,因此它将自己的请求交给Nginx让Nginx转发请求到真正的服务端,这也是Nginx反向代理的实现方式。因为N原创 2022-04-12 21:00:16 · 2406 阅读 · 0 评论 -
【微服务】SpringCloud(SpringCloud Alibaba)微服务秒杀项目-03:Eureka服务注册与发现
文章目录SpringCloud-03:Eureka服务注册与发现服务注册中心Eureka组件Eureka ServerEureka ClientEureka单机部署创建Eureka子项目修改`provider-payment`模块,让它注册为服务提供者修改`consumer-order`模块Eureka集群部署工作原理集群部署修改每个子模块,向集群中所有的注册中心注册cloud-provider-payment8001模块服务提供者配置集群修改服务消费者,走注册中心修改Eureka服务实例名服务发现Eure原创 2022-04-12 20:57:19 · 886 阅读 · 0 评论 -
【微服务】SpringCloud(SpringCloud Alibaba)微服务秒杀项目-02:子项目搭建
文章目录SpringCloud-02:创建消费者模块创建cloud-consumer-order模块重构:提取公共模块SpringCloud-02:创建消费者模块项目Github地址创建cloud-consumer-order模块新建子项目我这边创建过了,所以报红没啥毛病。修改pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0原创 2022-04-12 20:53:47 · 585 阅读 · 0 评论 -
【微服务】SpringCloud(SpringCloud Alibaba)微服务秒杀项目-01:项目搭建
文章目录SpringCloud微服务01父项目搭建子项目搭建创建第一个模块`cloud-provider-payment8001`创建启动类创建dao接口,这里为了开发快捷使用的是MyBatis-Plus,因为我们的重点是学习相关知识而不是去写增删查改创建`service`接口以及对应的实现类,因为我们暂时没有业务代码放到这里,所以这里就只是简单的调用`dao`接口编写`Controller`使用jasypt对配置文件加密在子项目下引入jasypt包添加工具类修改`application.yml`配置环境变原创 2022-04-11 15:37:39 · 862 阅读 · 0 评论 -
[Java多线程] ThreadLocal分析
文章目录ThreadLocalThreadLocal介绍ThreadLocal使用ThreadLocal源码get()方法源码set(T)方法源码remove()方法ThreadLocalMap内部类Entry以及内部属性和部分方法Entry为什么要继承WeakReference以及ThreadLocal内存泄漏remove()方法expungeStaleEntry(int staleSlot):清除陈旧的EntryThreadLocal本文源码基于JDK8。因为本人水平有限,错误和不足之处在所难免,原创 2021-03-20 15:49:39 · 392 阅读 · 1 评论 -
Java-juc(7) StampedLock 源码分析
文章目录StampedLockStampedLock介绍StampedLock使用StampedLock源码分析内部重要属性写锁源码获取写锁源码释放写锁源码悲观读锁源码获取锁源码释放锁源码乐观读锁源码内部CLH队列结构StampedLockStampedLock介绍StampedLock是JDK1.8中新增的同步工具,通过它的名字我们可能想到它和“戳”有关,这个后面再说。跟ReentrantReadWriteLock作用相似,适用于读多写少的场景。与ReentrantReadWriteLock的不同之原创 2021-03-17 10:18:01 · 573 阅读 · 0 评论 -
Java-juc(6) ReentrantReadWriteLock 源码分析
文章目录ReentrantReadWriteLock分析ReentrantReadWriteLock介绍ReentrantReadWriteLock使用为什么不允许锁升级锁降级的作用ReentrantReadWriteLock源码分析Sync源码分析tryAcquire方法:tryRelease:tryAcquireShared:tryReleaseShared:ReentrantReadWriteLock分析本文源码基于JDK8。因为本人水平有限,错误和不足之处在所难免,欢迎指出错误和不足之处,一起原创 2021-03-12 21:34:06 · 214 阅读 · 0 评论 -
Java移位运算符:<<,>>,>>>
Java移位运算符:<<,>>,>>>最近在看jdk的源码,里面还是有很多地方用到了移位操作的,但是本人因为不怎么使用移位操作,基本是看了过一段时间就忘了,忘了用到的时候再看… …所以在这里写下这篇博客,以后如果再忘记了直接翻回来看。Java中有三种移位运算符,分别是左移运算符(<<),有符号右移(>>),无符号右移(>>>),作用分别如下:左移运算符(<<):将数值的所有二进制位左移给定的位数,高原创 2021-03-09 20:15:28 · 368 阅读 · 0 评论 -
Java-juc(5) CyclicBarrier 源码分析
文章目录CyclicBarrier分析CyclicBarrier介绍CyclicBarrier使用CyclicBarrier源码分析CyclicBarrier分析本文源码基于JDK8。因为本人水平有限,错误和不足之处在所难免,欢迎指出错误和不足之处,一起进步。阅读这篇文章最好对AQS有一定的了解。CyclicBarrier介绍CyclicBarrier和juc中另一个同步工具CountDownLatch非常像,使用CyclicBarrier可以使多个线程阻塞等待,等到所有线程都准备完毕了以后再原创 2021-03-06 21:38:21 · 171 阅读 · 0 评论 -
Java-juc(4) CountDownLatch 源码分析
文章目录CountDownLatch源码分析1.CountDownLatch介绍2.CountDownLatch使用3.CountDownLatch源码3.1内部类SyncCountDownLatch源码分析本文源码基于JDK8。因为本人水平有限,错误和不足之处在所难免,欢迎指出错误和不足之处,一起进步。阅读这篇文章最好对AQS有一定的了解。1.CountDownLatch介绍CountDownLatch是juc中提供的同步工具。CountDownLatch就像是一扇门,在门没有打开之前所有线原创 2021-02-27 21:19:26 · 201 阅读 · 2 评论 -
Java-juc(3) Semaphore 源码分析
文章目录Semaphore源码分析1.Semaphore介绍2.Semaphore的简单使用3.Semaphore源码分析3.1Sync源码3.2NonfairSync源码3.3FairSync源码3.4Semaphore的其他api的实现Semaphore源码分析本文源码基于JDK8。因为本人水平有限,错误和不足之处在所难免,欢迎指出错误和不足之处,一起进步。阅读这篇文章最好对AQS有一定的了解。1.Semaphore介绍Semaphore是juc中的同步工具,使用Semaphore可以控制原创 2021-02-25 19:30:11 · 323 阅读 · 2 评论 -
Java-juc(2) ReentrantLock 源码分析
文章目录ReentrantLock 可重入锁分析1.synchronized关键字简析1.1synchronized关键字的使用2.ReentrantLock分析2.1ReentrantLock使用2.2```Sync```源码分析2.3```NonfairSync```源码分析2.4```FairSync```源码分析2.5其他api以及实现ReentrantLock 可重入锁分析本文源码基于JDK8。因为本人水平有限,错误和不足之处在所难免,欢迎指出错误和不足之处,一起进步。阅读这篇文章需要对A原创 2021-02-23 23:39:10 · 417 阅读 · 2 评论 -
Java-juc(1):AQS(AbstractQuenedSynchronizer)源码分析
文章目录1.AQS简介1.1内部类Node1.2内部类ConditionObject2.AQS的使用2.1使用AQS构建互斥锁(mutex)3.AQS源码3.1acquire3.2release和releaseShared3.3acquireShared1.AQS简介本文源码基于JDK8。因为本人水平有限,错误和不足之处在所难免,欢迎指出错误和不足之处,一起进步。这篇文章比较长,涉及到AQS的都放在这篇博客里了,暂时不打算看的部分可以直接跳过。首先从大局上介绍一下AQS和一些相关的知识,这部分对原创 2021-02-20 20:23:38 · 405 阅读 · 0 评论 -
IntelliJ IDEA/Eclipse 使用JUnit单元测试如何只运行其中一个@Test方法
IntelliJ IDEA使用JUnit单元测试如何只运行其中一个@Test方法在某一个方法上点击右键然后run就会只执行单个测试方法。 ### 在类或者空白处点击右键则会执行所有的@Test方法。public class JUnitTest extends BaseTest { @Test public void test1(){} @Test ...原创 2019-03-17 19:54:23 · 22058 阅读 · 0 评论 -
Mybatis 参数 useGeneratedKeys ,keyColumn,keyProperty作用和用法
参考:深入浅出mybatis之useGeneratedKeys参数用法Mybatis 配置文件 useGeneratedKeys 参数在使用mybatis时,有些情况下需要在插入后获得刚才数据库为我们生成的那条记录的主键,但是如果我们不告诉数据库:“我插入这条信息后你把刚才插入的那条记录的主键告诉我,我有用!”,那么数据库是不会给我们返回的。有的人可能说,我可以一会再把它查出来啊~,这样确实...原创 2019-03-17 21:28:21 · 12675 阅读 · 12 评论 -
JDK8改进的类型推断
改进的类型推断什么是类型推断类型推断就像它的字面意思一样,编译器根据你显示声明的已知的信息 推断出你没有显示声明的类型,这就是类型推断。看过《Java编程思想 第四版》的朋友可能还记得里面讲解泛型一章的时候,里面很多例子是下面这样的: Map&lt;String, Object&gt; map = new Map&lt;String, Object&gt;();而我们平常写的都是这样...原创 2019-03-13 19:59:00 · 612 阅读 · 0 评论 -
JDK8-通过反射获得方法的参数信息
通过反射获得方法的参数信息JDK8之前 .class文件是不会存储方法参数信息的,因此也就无法通过反射获取该信息(想想反射获取类信息的入口是什么?当然就是Class类了)。即是是在JDK11里也不会默认生成这些信息,可以通过在javac加上-parameters参数来让javac生成这些信息(javac就是java编译器,可以把java文件编译成.class文件)。生成额外的信息(运行时非必...原创 2019-03-13 19:59:46 · 1440 阅读 · 0 评论 -
JUnit单元测试中多线程的坑
JUnit单元测试中多线程的坑在JUnit的@Test方法中启用多线程,新启动的线程会随着@Test主线程的死亡而死亡!导致没有任何输出解决方法1. 在@Test方法中每创建一个线程,就join一下,这样我们新建的线程不死亡,Test主线程也不会死亡。2. 让主线程睡眠一会,等待其它线程结束后本线程在结束3. 使用CountLatch等同步器同步一下,让主线程等其它线程结束后在结束...原创 2019-04-05 20:45:44 · 2564 阅读 · 0 评论