跳至主要內容
SpringBoot实现策略模式

相信我们对策略模式都有耳闻,但是可能不知道它在项目中具体能有什么作用,我们需要在什么场景下才能去尽可能得去使用策略模式。

这里我简单的列出一个我之前在公司做的一个需求:跟第三方oa系统对接接口,对方需要回调我们当前系统,但是是不同的业务接口回调,我们系统可以根据一个字段来区分需要走哪个业务分支,可能初级程序员刚接触这个需求的时候想法是,多个接口回调,那就写多个接口罢了,强调接口隔离;或者直接一个接口也行,if...else if 也很不错,这里呢,为了彰显我们开发人员的逼格,我们可以基于一个接口外加设计模式之策略模式+简单工厂模式。 下面是一个简单的实现demo:


xlc520JavaJava大约 3 分钟
Java性能优化的50个细节

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。

1. 尽量在合适的场合使用单例


xlc520JavaJava大约 17 分钟
SpringBoot 提升吞吐量

1、异步执行

实现方式二种:

  • 使用异步注解 @aysnc、启动类:添加 @EnableAsync 注解
  • JDK 8 本身有一个非常好用的 Future 类——CompletableFuture

xlc520JavaJava大约 5 分钟
MySQL调优总结

一. 表设计与数据类型

尽量遵循数据库设计三大范式,一些场景可适当建立冗余字段,减少连接查询,但这样这样会破坏第三范式,视情况而定。

尽量不要设置null类型字段,null类型需要额外的字段来存储,count不会统计,一些场景也会使索引失效。


xlc520JavaJava大约 4 分钟
Spring Event轻量级内部组件解耦

版本

  • • JDK 8
  • • Spring-boot 2.6.6

登录事件示例

  • • 下面是一个使用Spring事件处理用户登录的简单示例。在此示例中,我们将创建一个Spring Boot应用程序,演示如何使用Spring事件来处理用户登录事件。

xlc520JavaJava大约 7 分钟
Docker 搭建 Minio 容器以及代码

简介:

Minio 是一个基于Apache License v2.0开源协议的对象存储服务,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据。例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。最重要的是免费


xlc520JavaJava大约 8 分钟
vue3 使用 高德地图api

在我们使用高德地图的时候,官方给我们推荐了很多案例,demo,但是这些案例都是使用原生方法接入,并没有提供vue或者reactdemovue2的 接入网上也很多人都有写过,今天我们就来看看 vue3如何使用常用的高德地图api


xlc520JavaJava大约 11 分钟
SpringBoot 虚拟线程

首先,虚拟线程是 Project Loom 的一部分。

此外,Loom 不会加速内存计算,例如并行流,这不是 Loom 的目标。

我们正在研究如何使用可用的相同硬件来提高应用程序吞吐量,即充分利用 CPU 的潜力,为此我们花费了大量精力。截至目前,我们能够利用 2% 到 3% 的 CPU。我在这篇博客中详细讨论了这一点:


xlc520JavaJava大约 4 分钟
Spring Boot 中使用 Undertow 作为嵌入式服务器

Spring Boot 默认使用 Tomcat 作为嵌入式 Servlet 服务器,它是由 Apache 软件基金会下 Jakarta 项目开发的 Servlet 容器,被广泛用于部署和运行 Java Web 应用程序。特点是轻量级、易于安装和配置,并且具有良好的可扩展性和性能


xlc520JavaJava大约 5 分钟
从 Maven 构建到 Docker 部署的完整指南

1 使用Dockerfile部署

# 使用Java 8基础镜像
FROM java:8
LABEL authors="mabh"

# 设置时区为Asia/Shanghai,可以根据需要更改
ENV TIME_ZONE=Asia/Shanghai

# 更新时区
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone

# 设置容器内的工作目录
WORKDIR /app

# 将构建好的Spring Boot应用jar文件复制到镜像中
COPY ./${project.build.finalName}.jar /app/

COPY ./application.yml /app/
COPY ./application-${activatedProperties}.yml /app/

# 暴露端口
EXPOSE 8080


# 设置Java虚拟机初始内存和最大内存
#-server: 启用Java HotSpot虚拟机的服务器模式,该模式针对长时间运行的应用程序进行了优化以提高性能。
#-Xms512m: 设置Java堆的初始大小为512兆字节。
#-Xmx1024m: 设置Java堆的最大大小为1024兆字节。
#-XX:+UseG1GC: 启用G1垃圾收集器。G1(Garbage-First)是一种相对新的垃圾收集器,旨在提供更可预测的停顿时间和更好的性能。
#-XX:+HeapDumpOnOutOfMemoryError: 在发生内存溢出错误时生成堆转储文件。这对于分析内存问题非常有用。
#-XX:HeapDumpPath=/dumps/oom_dump.hprof: 指定内存转储文件。在这个例子中,堆转储文件将被写入 /dumps/oom_dump.hprof 目录文件中。
ENV JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dumps/oom_dump.hprof"

ENV APP_ENV="--spring.profiles.active=${activatedProperties}"
# 创建内存转储文件和日志文件存储目录
RUN mkdir /app/dumps
RUN mkdir /app/logs

# 设置容器启动时执行的命令
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dlogging.file=/app/logs/application.log -jar /app/${project.build.finalName}.jar $APP_ENV"]

xlc520JavaJava大约 7 分钟