随笔分类 - Java
摘要:目录堆栈默认垃圾回收策略垃圾回收参数G1 垃圾回收查看内存的命令 堆栈 堆:存储对象和数组,堆大小动态分配 (-Xms、-Xmx),线程共享,垃圾回收 栈:存储局部变量、方法参数、方法栈,相对较小 (-Xss),方法完成时释放,线程私有 堆栈大小配置 -Xmx:设置 JVM 最大可用内存,默认系统内
阅读全文
摘要:###多线程操作同一个变量的问题 Java 的变量默认是所有线程共享的,存在共享内存中 线程从共享内存读取变量到自己的工作内存,执行后再写回共享内存,什么时候读,什么时候写,由系统决定,是不确定的 这样会导致变量值的不确定性 比如 T1 和 T2 两个线程 假设有下面步骤 T1 读取 counter
阅读全文
摘要:###简介 JRE:Java Runtime Environment JDK:Java Development Kit JDK 是开发环境 JRE 是运行环境 JDK 包含了JRE JRE 中包含虚拟机JVM 如果只需要运行Java 程序,那么可以只安装JRE HotSpot VM 是 JDK 默认
阅读全文
摘要:依赖 <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> </dependency> <dependency> <groupId>com.github.ben-
阅读全文
摘要:@Inject 注解的变量会自动调用构造函数初始化 如果希望不止是调用默认构造函数,可以使用 @Produces 动态生成 先定义一个 MyConnection 这是我们要用 @Inject 注解的变量的类型 package com.example.demo.entity; import com.e
阅读全文
摘要:@JsonInclude(JsonInclude.Include.NON_EMPTY) 作用在类或变量,指定序列化时,如何处理类的变量 Include.ALWAYS 默认值,所有变量都会序列化 Include.NON_NULL 不为 null 时才序列化 Include.NON_ABSENT 不存在
阅读全文
摘要:@InjectMocks 模拟一个对象,该对象内部的其他对象可以被 @Mock 注入,没有被注入的对象被设置为 null @Mock 模拟一个对象,该对象内部的其他对象被设置为 null @MockBean 这个是 SpringBoot 的注解,和 @Mock 类似,但会替代 SpringBoot
阅读全文
摘要:###HTTP 和 RPC 在微服务体系结构中,独立部署在各个机器或容器上的服务之间,如何进行有效的通信,是一个很重要的问题,现在常用的主要是 RESTful HTTP 和 RPC HTTP 的优点 通用性强,基本上所有框架,所有语言都支持 HTTP 可读性高,URL 对资源的定义,Action 对
阅读全文
摘要:随着微服务的增多,一个请求可能会涉及到很多个微服务,如何追踪跨多个服务的请求,就成了一个需要解决的问题 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案 它的做法是在日志里面添加 Trace Id 和 Span Id,其中 Trace Id 在所有 service
阅读全文
摘要:在微服务架构中,不同服务有不同的地址,客户端需要和多个服务交互,这会带来一些问题 客户端需要多次请求不同的微服务,增加复杂性 存在跨域请求 每个微服务都有独立认证 微服务重构时,客户端也要跟着改 API 网关就是客户端和服务端的中间层,所有请求都会先经过 API 网关,再由 API 网关发给后端的微
阅读全文
摘要:调用 Rest 接口可以使用 RestTemplate 比如 @Autowired private RestTemplate restTemplate; @RequestMapping("/query/{id}") public String qurey(@PathVariable Long id)
阅读全文
摘要:如果希望不使用 pom.xml 文件,直接下载某个 jar 及其依赖 mvn -DgroupId=com.microsoft.azure -DartifactId=azure-eventhubs-spark_2.11 -Dversion=2.3.18 -Dtransitive=true depend
阅读全文
摘要:Hystrix 是 Netflix 开发的用于容错处理的库,不过 2018 年后就不在开发了,只进入维护模式,官方推荐新项目使用 resilience4j(resilience4j 的开发是受 Hystrix 启发,但为 Java 8 和函数式编程设计,并且没有过多依赖) 分布式系统中,组件之间的调
阅读全文
摘要:Robbin 是 Netflix 开发的实现客户端负载均衡的组件,通常和 Eureka 一起使用,前面的例子中 Eureka Consumer 已经使用了负载均衡 在前面的 Eureka 服务发现的基础上做一些修改 因为 Eureka 依赖已经包含了 Robbin,所以无需导入 Robbin <de
阅读全文
摘要:SpringBoot 默认支持 properties 和 YAML 两种格式的配置文件,并且有 bootstrap 和 application 两种配置文件 两者的区别 bootstrap 配置文件先于 application 配置文件被加载,会先创建初始化 Bootstrap Context,再创
阅读全文
摘要:Spring Boot 的配置文件一般是放在 application.properties 或 application.yml,修改配置需要重启程序,而且每个程序管理自己的配置文件,实际应用不大方便 配置中心的好处 统一管理所有程序的配置 多环境,比如开发环境,生产环境,可以为不同环境维护不同的配置
阅读全文
摘要:###Eureka Netflix 开发的组件,使用 Eureka 可以配合其他 Netflix 的组件比如 API 网关 ZUUL 2.0 起不再开发维护了 https://github.com/Netflix/eureka/wiki The existing open source work o
阅读全文
摘要:Spring Boot 是一个快速开发框架,整合协调了包括 HTTP 服务器在内的许多三方框架,采用注解化的方式简化配置,其目的就是简化单个 Java 程序的开发和配置,使 Java 程序的开发更快速简便 Spring Cloud 更像是一个工具箱,提供了很多工具,帮助构建分布式系统,实现微服务,这
阅读全文
摘要:目录 文件结构 pom.xml 主程序 Controller Service 异常处理 配置 自定义注解以及 AOP 拦截器 ApplicationRunner 定时调度 logback-spring.xml 配置日志 Actuator Prometheus 文件结构 pom.xml <?xml v
阅读全文
摘要:###通过 spring initializr 创建 Spring Boot 项目 打开网站 https://start.spring.io/ 填写项目名称,spring boot 版本,编程语言,Dependency 等信息 然后可以生成包含代码和配置的 zip 包,可以导入 IDE ###通过
阅读全文