标签: 后端相关

孤音 | 19小时前 | 后端相关Spring 全家桶

炫技Groovy!SpringBoot中的动态编程实战

Groovy简介 Groovy 是增强 Java 平台的唯一的脚本语言。它提供了类似于 Java 的语法,内置映射(Map)、列表(List)、方法、类、闭包(closure)以及生成器。脚本语言不会替代系统编程语言,两者是相互补充的。 大名鼎鼎的 Gradle,背后是 Groovy。Spring 的未来越来越多的使用 Groovy,甚至在用 Jira 跟踪项目时,背后也有 Groovy。 实际上,就应用场景而言,Java 开发已经有越来越多的 Groovy 出现在后台了。而对于一般的应用开发,只要能用 Java 就都能用到 Groovy,唯一的难点只在于能不能招到足够的人员。 应用场景 连接已有的组件 处理经常变化的多种类型的实体 具有图形化用户界面 拥有快速变化的功能 “注:今天我们分享的就是利用Groovy脚本在SpringBoot项目中实现动态编程,使业务逻辑的动态化,极大地提升了开发效率和灵活性。 集成与使用 那么接下来介绍SpringBoot如何集成Groovy脚本,并应用到实际开发中。 第一步、与Sprin...

 13 |  0 |  0 后端相关Spring 全家桶

追风少年 | 1天前 | Java后端相关

常见 Java 代码缺陷及规避方式

问题列表 空指针异常 NPE 或许是编程语言中最常见的问题,被 Null 的发明者托尼·霍尔(Tony Hoare)称之为十亿美元的错误。在 Java 中并没有内置的处理 Null 值的语法,但仍然存在一些相对优雅的方式能够帮助我们的规避 NPE。 使用 JSR-305/jetbrain 等注解 1. NotNull 2. Nullable 通过在方法参数、返回值、字段等位置显式标记值是否可能为 Null,配合代码检查工具,能够在编码阶段规避绝大部分的 NPE 问题,建议至少在常用方法或者对外 API 中使用该注解,能够对调用方提供显著的帮助。 用 Optional 处理链式调用 Optional 源于 Guava 中的 Optional 类,后 Java 8 内置到 JDK 中。Optional 一般作为函数的返回值,强制提醒调用者返回值可能不存在,并且能够通过链式调用优雅的处理...

 17 |  0 |  0 Java后端相关

一纸荒年 | 4天前 | 后端相关Spring 全家桶

史上最全,全方位阐述 SpringBoot 中的日志是怎么工作(珍藏版)

前言 日志,是开发中熟悉又陌生的伙伴,熟悉是因为我们经常会在各种场合打印日志,陌生是因为大部分时候我们都不太关心日志是怎么打印出来的,因为打印一条日志,在我们看来是一件太平常不过的事情了,特别是在宇宙第一框架Springboot的加持下,日志打印是怎么工作的就更没人关注了。 但是了解日志框架怎么工作,以及学会Springboot怎么和Log4j2或 Logback 等日志框架集成,对我们扩展日志功能以及优雅打印日志大有好处,甚至在有些场景,还能通过调整日志的打印策略来提升我们的系统吞吐量。 所以本文将以Springboot集成Log4j2为例,详细说明Springboot框架下Log4j2是如何工作的,你可能会担心,如果是使用Logback日志框架该怎么办呢,其实Log4j2和Logback极其相似,Springboot在启动时处理Log4j2和处理Logback也几乎是一样的套路,所以学会Springboot框架下Log4j2如何工作,切换成Logback也是轻轻松松的。 本文遵循一个该深则深,该浅则浅的整体指导方针,全方位的阐述Springboot中日志怎么工作...

 31 |  0 |  0 后端相关Spring 全家桶

雪千寻 | 5天前 | 后端相关Kafka

注意:Kafka 的这 6 个场景会丢失消息!

我们使用 Kafka 的时候,怎样能保证不丢失消息呢?今天来聊一聊这个话题。 首先我们看一下 Kafka 的架构图, 场景一:异步发送 Producer 异步发送是丢失消息比较多的场景,Kafka 异步发送的代码如下: ProducerRecord<byte[],byte[]  record = new ProducerRecord<byte[],byte[] ("the-topic", key, value); RecordMetadata metadata = producer.send(record).get(); Producer 发送消息后,不用等待发送结果,就可以继续执行后面的逻辑。如果发送失败,就会丢失消息。 Kafka 提供了回调方法,可以同步等待发送结果,这样降低了发送效率,但可以对发送失败的场景进行处理,比如重新发送。 ProducerRecord<byte[],byte[]

 32 |  0 |  0 后端相关Kafka

石昊 | 6天前 | 后端相关Spring 全家桶

SpringBoot集成支付宝,看这一篇就够了

前 言 在开始集成支付宝支付之前,我们需要准备一个支付宝商家账户,如果是个人开发者,可以通过注册公司或者让有公司资质的单位进行授权,后续在集成相关API的时候需要提供这些信息。 下面我以电脑网页端在线支付为例,介绍整个从集成、测试到上线的具体流程。 1.预期效果展示 在开始之前我们先看下我们要达到的最后效果,具体如下: 前端点击支付跳转到支付宝界面 支付宝界面展示付款二维码 用户手机端支付 完成支付,支付宝回调开发者指定的url 2.开发流程 2.1 沙盒调试 支付宝为我们准备了完善的沙盒开发环境,我们可以先在沙盒环境调试好程序,后续新建好应用并成功上线后,把程序中对应的参数替换为线上参数即可。 1. 创建沙盒应用 直接进入 https://open.alipay.com/develop/sandbox/ap

 35 |  0 |  0 后端相关Spring 全家桶

晴天 | 6天前 | 后端相关

流程引擎的架构设计方案全解

1 什么是流程引擎 流程引擎是一个底层支撑平台,是为提供流程处理而开发设计的。流程引擎和流程应用,以及应用程序的关系如下图所示。 常见的支撑场景有:Workflow、 BPM 、流程编排等。本次分享,主要从 BPM 流程引擎切入,介绍流程引擎的架构设计方法。 1.1 什么是流程 简单来说,流程就是一系列活动的组合。比如,用于企业办公的 OA 系统中,就存在大量的申请审批类的流程。在生产制造业,有大量的从销售端的订单,到生产制造,再到签收回款的生产销售流程。在机器学习领域,有亚马逊 AWS Sagemaker 的大数据处理、机器学习的应用。综上,流程是一个概念,在和具体实现结合时,就产生了不同的流程产品,如 DevOps、Spring Data Stream 等。 在流程实现方面,主要可以分为 2 种实现方式,一种是用代码实现,比如:用代码实现一个加班申请,那么就要自己对接 SSO 进行 单点登录 ,通过接口拿到发...

 39 |  1 |  0 后端相关

女王范 | 1周前 | Java后端相关

聊聊Java中代码优化的30个小技巧

前言 我之前写过两篇关于优化相关的问题:《[聊聊sql优化的15个小技巧](https://mp.weixin.qq.com/s?__biz=MzkwNjMwMTgzMQ &mid=2247490473&idx=1&sn=ba07d64aa8c89054bd263efd660d3a3f&chksm=c0ebc341f79c4a579a6f41465df0459a696ab8ef0499a5f6fd76269af1064fde0286afdb027d&token=751314179&lang=zh_CN&scene=21 wechat_redirect)》和《[聊聊接口性能优化的11个小技巧](https://mp.weixin.qq.com/s?__biz=MzkwNjMwMTgzMQ &mid=2247490731&idx=1&sn=29ed0295c7990157a3a56ba33cf7f8be&chksm=c0ebc443f79c4d55a2bac81744992c96f97737e5d0717ec99231f4d08f57a7f0220eafdac9c9&token

 43 |  0 |  0 Java后端相关

流苏 | 1周前 | 后端相关Spring 全家桶

springboot打包不同环境配置与shell脚本部署

本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作; profiles指定不同环境的配置 maven-assembly-plugin 打发布压缩包 分享 shenniu_publish.sh 程序启动工具 linux上使用 shenniu_publish.sh 启动程序 profiles指定不同环境的配置 通常一套程序分为了很多个部署环境:开发,测试,uat,线上 等,我们要想对这些环境区分配置文件,可以通过两种方式: 通过application.yml中编码指定 profile.active=uat 方式指定 通过mvn中profiles来区分不同环境对应的配置文件夹,人工可以手动在idea勾选生成不同环境的包(推荐) 这里我们要讲的是第二种,首先在mvn中配置如下内容: <profiles     <profile         <id node</id         <properties             <!--传递给脚本的

 40 |  0 |  0 后端相关Spring 全家桶

花小染 | 1周前 | 后端相关

漫谈测试策略

一、测试策略是什么? 引自查字典: 策略: 基本含义:指为达到某种目的而制定的行动方案或计划。 详细解释:策略是指在特定情况下为达到某种目的而采取的有系统性的行动方案或计划。它通常包括分析、决策和执行三个阶段。策略的制定需要综合考虑各种因素,包括目标、资源、环境和竞争等。策略的好坏直接关系到目标的实现效果。 策略是为目的/目标服务的,且策略是自带背景/特定情况的,一定要识别到背景形势的发展和变化,然后才能制定针对性的谋略、计策。 测试策略有两层背景叠加:业务大背景和项目小背景。下文提到的测试策略有时指代业务级测试策略,有时指代项目级测试策略,如果无特指强调,则是在探讨两类测试策略的共同特点。 1.1 什么前提下开始探讨测试策略呢? 当你有多种测试方案时。如果你只有一个测试方案一条路,那就没什么选择余地;只有当多种测试方案都满足基本要求,但又各有优劣时,才会涉及到如何选择、取舍。每一次的选择取舍,抽象出的方法论,就是策略。就像棋类大师在每一步棋的选择上各有理由,但背后都有着同一套分析和决策思路,那套思路就是策略。 1.2 ...

 45 |  0 |  0 后端相关

观云 | 1周前 | 后端相关

消息队列的七种经典应用场景

在笔者心中, 消息队列 , 缓存 , 分库分表 是高并发解决方案三剑客。 在职业生涯中,笔者曾经使用过 ActiveMQ 、RabbitMQ 、Kafka 、RocketMQ 这些知名的消息队列 。 这篇文章,笔者结合自己的真实经历,和大家分享消息队列的七种经典应用场景。 1 异步 2. 短信渠道接口发生变化,用户中心代码就必须修改了。但用户中心是核心系统。每次上线都必要谨小慎微。...

 69 |  2 |  0 后端相关

大牛猫 | 1周前 | 后端相关Spring 全家桶

SpringBoot:一个注解就能帮你下载任意对象

介绍 下载功能应该是比较常见的功能了,虽然一个项目里面可能出现的不多,但是基本上每个项目都会有,而且有些下载功能其实还是比较繁杂的,倒不是难,而是麻烦。 所以结合之前的下载需求,我写了一个库来简化下载功能的实现 ❝ 传送门:https://github.com/Linyuzai/concept/wiki/Concept-Download ❞ 如果我说现在只需要一个注解就能帮你下载任意的对象,是不是觉得非常的方便 @Download(source = "classpath:/download/README.txt") @GetMapping("/classpath") public void classpath() { } @Download @GetMapping("/file") public File file() {     return new File("/Users/Shared/README.txt"); } @Download @GetMapping("/http") public String http() {

 72 |  0 |  0 后端相关Spring 全家桶

追风少年 | 2周前 | Java后端相关

Java 22 新增利器: 使用 Java Stream Gather 优雅地处理流中的状态

本文我们分析了 什么 是 “流”,对比了 Java 上几种常见的 “流”库,引入和详细介绍了 Java 22 中的 Stream Gather API 。同时也简单分享了利用 虚拟线程 如何简化 Stream <span mapConcurrent</span 操作符的实现。 01背景 Java Stream 自从 Java 1.8 引入以来,迅速成为了各位开发者手中信手拈来的工具,大家日常在工作中谈论起来也是如数家珍。但由于 Java Stream 的操作符不足够的丰富,经常会遇到捉襟见肘的情况。对于此,大家可能会继而采用操作符更加丰富的库来作为替代。作为 Java 标准库的一部分,Oracle 的 Java 架构师们也一直以来都在探索如何更好的适应日益增长的用户需求和语言的可维护性,随着 Stream Gather API 的到来,这个情况得到了极大的改善,下面让我结合自身经验,和大家分享 Java Stream Gather API。 02 什么 是 Stream ? 在编程语言生态中,Stream 是一个抽象的概念,代表了一组连...

 83 |  0 |  0 Java后端相关

渣渣辉 | 2周前 | 后端相关Spring 全家桶

业务优雅解耦,一文带你吃透 Spring 框架中的事件处理机制

前言 在现代应用程序中,各个组件之间的通信是至关重要的。想象一下,你的应用程序中的各个模块像是一个巨大的交响乐团,每个模块都是一位音乐家,而Spring事件机制就像是指挥家,将所有音乐家协调得天衣无缝。 这种松耦合的通信方式使你的应用程序更加灵活、可维护,而且能够轻松应对变化。现在,让我们进入这个令人兴奋的音乐厅,探索Spring事件的世界。 什么是spring事件 在Spring框架中,事件(Events)是一种基本概念,用于实现松耦合的通信方式,允许不同组件之间进行相互通知和协作。 Spring事件机制允许应用程序内的组件发送和接收事件,以便在系统中实现更松散的耦合,同时提高了可维护性和可扩展性。 以下是有关Spring事件的基本概念和工作原理: 1. 事件(Event): 事件是一个对象,它封装了有关事件发生的信息。在Spring中,通常是一个普通的Java对象。 事件可以包含任何有关事件的信息,例如事件类型、时间戳、发生事件的对象等。 2. 事件发布者(Event Publisher): 事件发布者是一个组件,它...

 72 |  0 |  0 后端相关Spring 全家桶

一纸荒年 | 2周前 | Java后端相关

Java线程池中线程异常后:是销毁还是复用?

“一个线程池中的线程异常了,那么线程池会怎么处理这个线程? 需要说明,本文的线程池都是 java.util.concurrent.ExecutorService 线程池,本文将围绕验证,阅读源码俩方面来解析这个问题。 代码验证 验证execute提交线程池中 测试代码: public class ThreadPoolExecutorDeadTest {     public static void main(String[] args) throws InterruptedException {         ExecutorService executorService = buildThreadPoolExecutor();         executorService.execute(()   exeTask("execute"));         executorService.execute(()   exeTask("execute"));         executorService.execute(()   exeT

 68 |  0 |  0 Java后端相关

雪千寻 | 2周前 | 后端相关Kafka

6 个技术点带你理解 Kafka 高性能背后的原理

Kafka 是一款性能非常优秀的消息队列,每秒处理的消息体量可以达到千万级别。今天来聊一聊 Kafka 高性能背后的技术原理。 1 批量发送 Kafka 收发消息都是批量进行处理的。我们看一下 Kafka 生产者发送消息的代码: private Future<RecordMetadata  doSend(ProducerRecord<K, V  record, Callback callback) {  TopicPartition tp = null;  try {   //省略前面代码   Callback interceptCallback = new InterceptorCallback< (callback, this.interceptors, tp);   //把消息追加到之前缓存的这一批消息上   RecordAccumulator.RecordAppendResult result = accumulator.append(tp, timestamp, serializedKey,     serializedValue, headers, in

 77 |  0 |  0 后端相关Kafka