随笔分类 - Java
大叔也学学java,跟跟风...
摘要:springboot开发微服务框架一般使用springcloud全家桶,而整个项目都是容器化的,通过k8s进行编排,而k8s自己也有服务发现机制,所以我们也可以抛弃springcloud里的eureka,而直接使用k8s自己的服务。 添加组件 注意点 1. application.name与k8s的
阅读全文
摘要:config server用来搭建配置中心,而配置信息一般使用gitlab仓库来存储,这样在你的配置发生改变时,不需要从新打包,而如果使用 的试,则需要从新打一个config server的jar包。 配置的热更新 当你的服务的配置信息发生改变时,一般来说需要从新重启你的服务,配置信息才能生效,这对
阅读全文
摘要:统一设计 maven很好的把项目整合在一起,在部署时,每个项目可以有自己的Dockerfile,在构建后把对应的jar包复制到Dockerfile的同级目录,使用使用统一的打包镜像和容器启动方法去执行就可以了。 需要大maven根项目添加插件 Dockerfile的统一内容 在src/main/do
阅读全文
摘要:# logback日志文件位置动态指定 > 参考:https://stackoverflow.com/questions/19518843/logback-configuration-via-jvm-argument logback相关配置,其中${LOG_HOME}表示为环境变量,在java启动应
阅读全文
摘要:高并发下的耗时操作 官方文档中说DeferredResult和Callable都是为了异步生成返回值提供基本的支持。简单来说就是一个请求进来,如果你使用了DeferredResult或者Callable,在没有得到返回数据之前,DispatcherServlet和所有Filter就会退出Servle
阅读全文
摘要:责任链,我感觉对就根据需求动态的组织一些工作流程,比如完成一件事有5个步骤,而第1步,第2步,第3步它们的顺序可以在某些时候是不固定的,而这就符合责任链的范畴,我们根据需求去设计我们的这些链条,去自己指定它们的执行顺序,下面看我的一个例子。 出现的对象 抽象责任 具体责任 抽象链条 具体链条 对象的
阅读全文
摘要:装饰器,顾名思义,就是把一个对象的功能进行扩展,添加新的装饰,让它具有新的特性和功能,在实现生活中,有很多装饰器实现的例子,比如人类可以跑,但有一个超人它不仅可以跑,而且还可以飞,这时在不改变原对象基础上,需要为超人添加飞的动作,就可以使用装饰模式。 抽象组件 具体组件 抽象装饰器 超人的装饰器 让
阅读全文
摘要:设计模式可以使用我们在软件开发过程中更加灵活,软件的扩展更容易,软件的耦合度更低,设计模式不是在开发中刻意去用的,而是到了什么时候用什么模式的,不能强迫的使用它,应该是自然而然的想到它。 单例模式 在23种设计模式中,单例最为简单和纯粹,也是最容易理解的,即它在软件生命周期里,只有一个实例,就是说你
阅读全文
摘要:在进行项目开发过程中,项目接口文档是很重要的一块内容,在java项目中我们可以用swagger,asciidoc,javadoc等方式来生产文档,而其中最基本的文档生成方式就是javadoc,它一般用在离线文档的生成上,我们需要按排它的规定来书写注释,从而最终生成文档。 # 标准化注释 1. @li
阅读全文
摘要:枚举实现单例 线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用 静态内部类实现单例 线程安全,调用效率高,可以延时加载, 使用内部类的好处是,静态内部类不会在单例加载时就加载,而是在调用getInstance()方法时才进行加载,达到了类似懒汉模式的效果,而这种方法又是线程安全的
阅读全文
摘要:限流一般可以根据客户端IP,请求的URL,用户登陆信息进行限制,每秒钟限制多次数,这从别一方面也提升了系统的性能,无用的并发没那么多了。 依赖包 zuul的配置 ratelimit限制配置 这样,服务a的限流就做好了!
阅读全文
摘要:之前写了关于读取自定义配置的文章 "springboot~yml里的自定义配置" ,而今天主要说一下对复杂配置信息的读取方法,我们简单的配置用@Value注解就可以了,而结构复杂的一般使用@ConfigurationProperties来实现,下面说一下。 配置信息 开启ConfigurationP
阅读全文
摘要:springboot里连接elk里的logstash,然后写指定index索引的日志,而之后使用kibana去查询和分析日志,使用elasticsearch去保存日志。 添加引用 添加配置 指定配置 logstash配置索引 kibana里建立索引 通过kiban菜单去建立索引:Management
阅读全文
摘要:在mybatis和mybatis plus里,如果你的实体字段是一个枚举类型,而在数据表里是整型,这时在存储时需要进行处理,默认情况下,会把枚举的元素名称拼接到SQL语句里,而由于数据表是int类型,所以在插入等操作时,就会出现异常! 添加枚举处理器 MappedTypes(value = {Yes
阅读全文
摘要:jvm虚拟机栈的作用 jvm虚拟机栈栈帧的组成 jvm虚拟机栈,也叫java栈,它由一个个的栈帧组成,而栈帖由以下几个部分组成 局部变量表 存储方法参数,内部使用的变量 操作数栈 在变量进行存储时,需要进行入栈和出栈 动态连接 引用类型的指针 方法出口 方法的返回 一段原程序代码 一 生成字节码文件
阅读全文
摘要:概念 LRU(Least Recently Used)最近最少使用算法是众多置换算法中的一种。 maxmemory Redis中有一个maxmemory概念,主要是为了将使用的内存限定在一个固定的大小。Redis用到的LRU 算法,是一种近似的LRU算法。 设置maxmemory 注意,在64bit
阅读全文
摘要:aop是面向切面编程的意思,它可以需要先选择一些切入点,然后对这些切入点进行拦截,注入统一的代码逻辑,这也是解耦的一种方式,也是为了避免重复的代码,让开发人员把关注点放在业务上。 引用包 添加切入点 测试 当我们访问controller下的接口下,在控制台中将输出方法执行前和执行后的结果 感想 事实
阅读全文
摘要:部署服务 docker run启动elastic服务 docker compose.yml的方式部署 elastic常用命令 查看集群是否健康 获取集群的节点列表 列出所有索引 建立名为customer的索引 向索引customer,类型为external,添加数据 获取数据 获取customer索
阅读全文
摘要:一次编译,到处运行 java一直宣传的口号是:一次编译,到处运行。那么它如何实现的呢?我们看下图: java程序经过一次编译之后,将java代码编译为字节码也就是 文件,然后在不同的操作系统上依靠不同的 进行解释,最后再转换为不同平台的机器码,最终得到执行。这样我们是不是可以推演,如果要在mac系统
阅读全文
摘要:当我们在JVM中运行一段程序代码,JVM初始运行的时候都会分配好 ,而JVM每遇到一个线程,就为其分配一个Program Counter Register(程序计数器), VM Stack(虚拟机栈)和Native Method Stack (本地方法栈),当线程终止时,三者(虚拟机栈,本地方法栈和
阅读全文