`
文章列表
redis是一个高性能的key-value数据库,支持消息提送功能,可以当做一个轻量级的队列服务器使用。 redis只是提供一个高性能的、原子操作内存键值队,具有高速访问能力,虽然可以做消息队列的存储,但不具备消息队列的任何功能和逻辑。 redis2.0开始支持发布/订阅指令,发布者调用redis的pushlish方法往特定的channel发送消息,订阅者在初始化的时候订阅该channel,有消息就会立即接收。 redis消息推送多用于实时性较高的消息推送,并不保证可靠。MQ保证可靠但有一些延迟。 redis发布订阅除了表示不同的topic外,并不支持分组。MQ发布消息,多个订阅者可 ...
1.使用HashTable Map<String,Object> hashtable=new HashTable<>(); HashTable底层是数组和链表的形式,方法都是用synchronized修饰的,因此是线程安全的,但执行效率比较低。 2.使用java.util.concurrent.concurrentHashMap Map<String,Object> concurrentHashMap=new ConcurrentHashMap<>(); concurrentHashMap结构图:   concurrentHa ...
1.继承Thread类 public class Demo extends Thread {   public void run() {     try {       System.out.println("thread");     } catch(Exception e) {       e.printStackTrace();     }   } } public static void main(String[] a ...

Java 动态代理

    博客分类:
  • java
动态代理指为一个目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。使用代理对象,是为了在不修改目标对象的基础上,增强目标对象的业务逻辑。通过动态代理可以无侵入的为代码进行增强。 动态代理应用非常广泛,比如spring中的aop使用动态代理增加,动态代理主要有JDK和CGLIB两种。 JDK实现动态代理由两个重要部分组成,分别是Proxy、InvocationHandler。 Proxy是所有动态代理的父类,提供了静态方法来创建动态代理的class对象和实例。 InvocationHandler,每个动态代理实例都有一个关联的InvocationHandler,在代理实例上调 ...

Java线程池

线程池的有点1.降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2.提高响应速度,任务可以不需要等线程创建就能立即执行。3.提高线程可管理性,防止无限制创建导致的消耗系统资源、降低系统稳定性。使用线程池可以进行统一的分配、调优和监控。4.使用线程池可以有效控制最大并发线程数,提高资源利用率,避免过多资源竞争,避免阻塞。5.线程池可以提供定时执行、单线程执行、并发控制等,操作线程方便。6.new Thread不能重复使用,new 相当于在内存中单独开辟一个内存让线程运行,需要释放线程和新建线程,性能差。使用线程池,可以减少对象的创建、消亡的开销。   线程池简介 Jav ...
设置: ${test.resolve(execution,"张三,李四")}     需要提供java方法: @Component public class Test { /** * 会签时,动态获取审批人 * @param execution * @return */ public List<String> resolve(DelegateExecution execution, String value) { System.out.println(val ...
现象:delete子查询非常慢,但select非常快,如下: select * from test1 where uid in (select uid from test2)-- 非常快 delete from test1 where uid in (select uid from test2)--非常慢   改成join表就很快了 delete t1 from test1 t1 inner join test2 t2 on t1.uid=t2.uid
超时,默认1秒; 修改请求超时时长: application.yml: hystrix:    command:      default:        execution:          isolation:            thread:              timeoutInMilliseconds: 3000
1.集群定义:集群是指用一组服务器运行一到多个应用程序。 集群可以简单到只有两台服务器,在他们之间配置故障切换,如果一台服务器失效,由另一台服务器接管应用程序的处理。集群也可以用来运行复杂的分布式系统:应用程序将数据分割成多个可管理的部分,每个部分都可以独立进行处理。如果一台服务器失效,其他服务器不会受影响,失效节点的进程被重新分配到集群中的其他节点。   2.集群的分类 故障切换集群、分布式数据库系统故障切换集群又可以分为两类:(主动/被动集群、主动/主动集群) 主动/被动集群:任何时候都只有一台服务器拥有负载,辅助服务器以被动模式运行,时刻等待着主动服务器停机进而接管主服务器,它 ...

java数据流

    博客分类:
  • java
Java数据流分为两种:字节流(Byte)和字符流(Character)。 字节流:以8位为单位对二进制数据进行操作,这些类都是InputStream和OutputStream的子类。 InputStream 所有字节输入流的父类,定义了基础的读取方法。 OutputStream 所有字节 ...
业务场景:项目拆分微服务,恰巧鄙人负责几个基础的服务,各种对接其他服务。到后期运维,接各种锅:我调用你接口了,你那数据不对。我传递是这个参数,你那处理的有问题......。只好加上日志记录,业务场景就是:防止背锅!  1.定义注解 package com.haier.hwork.qwrgqk.business.annotation; import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @int ...

MQ概念

    博客分类:
  • MQ
MQ 1.消息队列可以简单理解为:把要传输的数据放在队列中。用来降低Web服务器因发送消息而导致的负载和延时问题。 2.为什么用MQ(MQ优点):解耦、异步、削峰/限流、高可用、防数据丢失。 1)解耦举例:订单系统下单,需要 ...
pom: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> yml: spring: rabbitmq: host: ip port: 5672 virtual-host: / username: 账号 password: 密码   ...
  Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2020-08-27 11:37:10.017 ERROR 22436 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.context.ApplicationContextExceptio ...
springboot项目,上传文件,报错:the temporary upload location [/tmp/tomcat.4519862041770988807.8082/work/Tomcat/localhost/ROOT] is not valid 原因:springboot上传文件,或默认创建/tmp/tomcat.*文件夹,上传要先转换成临时文件写入这个文件夹下,这个文件夹如果长时间没有访问会被系统自动删除,大概10天。 如果长时间没有上传文件,那超过10天上传,可能会找不到这个文件夹。 解决: 1.重启项目,会重新创建文件夹。 2.yml中添加配置,指定路径,serv ...
Global site tag (gtag.js) - Google Analytics