Java-CountDownLanch
简介一个多线程同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
用法12345678//构造方法参数指定了计数的次数public CountDownLatch(int count);//子线程执行完后调用此方法,则计数减1public void countDown();//主线程调用此方法会一直阻塞当前线程,直到计时器的值为 0public void await() throws InterruptedException
示例
示例有潜在问题:使用 CountDownLatch 进行异步转同步操作,每个线程退出前必须调用 countDown 方法,线程执行代码注意 catch 异常,确保 countDown 方法被执行到,避免主线程无法执行 至 await 方法,直到超时才返回结果
1234567891011121314151617181920212223CountDownLatch countDownLatch = new CountDownLatch(2);Map<String, Object> map = new HashMap&l ...
SpringBoot-自定义缓存实现
说明
提供数据接口时,如果接口耗时较长,但数据一般情况下变化不大,可以使用自定义缓存,提高接口响应速度
数据发生变化时,主动使缓存失效,保证接口返回的数据为最新数据
本方案采用 注解+AOP 方案实现自定义缓存
封装定义缓存注解12345678910111213141516171819202122package org.jeecg.modules.mock.aspect.anno;import org.springframework.core.annotation.AliasFor;import java.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface CustomCache { @AliasFor("key") String value() default ""; @AliasFor("value") String key ...
Java-GeoJson地理数据解析
说明
从阿里云 GeoJson 资源地址获取指定省、市、区县的行政区划数据并解析
参考参考 「fast-module-basic-mock-core」模块中 org.jeecg.modules.mock.service.DepartDataService
代码示例引入依赖1234567891011 <!--解析geojson--><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.0</version></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <ve ...
Java-wait-notify
说明
在 Java中,wait() 方法是 Object 类的一个方法,通常用于多线程环境中的线程间通信
它允许一个线程暂停执行,直到收到通知
wait() 方法应该在一个对象的同步上下文中调用,这意味着在调用 wait() 之前,线程必须已经获得了该对象的锁(通过使用 synchronized 关键字)
示例下面是一个简单的使用 wait() 和 notify() 的例子,展示了如何在两个线程之间进行同步操作。这个例子中有一个生产者线程(Producer)负责增加共享资源的数量,而消费者线程(Consumer)则减少这个数量。为了确保线程安全,我们使用了同步块,并且生产者在资源满的时候等待,消费者在资源为空的时候等待。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657public class WaitNotifyExample { private int count = 0; private f ...
SpringBoot-Actuator监控
说明
SpringBoot默认提供了对应用的各项性能指标监控的功能,例如 环境变量、CPU、内存、JVM、磁盘、Web 服务、线程、bean等
它使用 HTTP 端点或 JMX Bean 与客户端进行交互
参考Spring Boot Actuator - spring 中文网 (springdoc.cn)
极简教程 | 使用Actuator 实现Spring Boot 应用监控-阿里云开发者社区 (aliyun.com)
使用
SpringBoot-Banner
说明
项目启动后默认会在 console 控制台输出 banner 信息
可以关闭 banner,也可以自定义 banner 内容,支持 txt 和图片「jpg、gif、png」
核心类 SpringApplicationBannerPrinter.java
关闭 banner在 application.yaml 中添加
123spring: main: banner-mode: off # off 关闭banner;log 输出到日志文件;console 输出到控制台
自定义 banner
支持 txt 格式定义 banner
支持图片格式定义 banner,会以符号绘制图片进行显示
123456spring: banner: location: banner1.txt # banner txt 路径,默认 classpath 下的 banner.txt image: # banner 图片 location: banner1.jpg # banner 图片路径 invert: true # 图片颜色反转
SpringBoot-监听应用启动
说明
场景:在 SpringBoot 应用启动后执行某些操作
以下提供 3 种方式,监听 SpringBoot 应用启动
方案一ApplicationListener<ApplicationReadyEvent>
1234567891011import org.springframework.context.ApplicationListener;import org.springframework.stereotype.Component;@Componentpublic class ApplicationEventListener implements ApplicationListener<ApplicationReadyEvent> { @Override public void onApplicationEvent(ApplicationReadyEvent event) { System.out.println("Application is now ready and running.&qu ...
无题
12345title: 程序员如何自我成长author: wangqinpeitags: 成长categories: 成长date: 2024-08-29 06:53:03
程序员如何自我成长反面示例
基础不扎实,编码效率低。网上复制粘贴代码,各种踩坑。对代码不能完全理解,碰运气,没问题万事大吉,有问题再复制粘贴。修改、调试成本很高,浪费大量时间
不知道使用工具,例如代码质量检测工具、代码生成器、AI 工具等。浪费大量时间在重复性、低价值的环节上
对业务的理解只考虑细节,不做抽象,编码层面上缺少设计,直接写具体代码。不具有复用性,耦合度很高,灵活性、扩展性很差
产品设计不到位的地方,编码层面上也完全不做灵活性、扩展性方面的考虑,哪怕是一定程度上的灵活性
代码不规范,团队每个人按照自己的习惯写。注释不准确、不清晰,可读性很差
开发完一个功能,除了代码成果,没有文档输出
正面示例
Java 基础方面多温习、多练习。例如常见的数据结构、算法,集合框架、异常处理、反射、注解、泛型、多线程等
借助工具提高开发效率,尽量少做重复性高、低价值的工作
编码前先整体设计,面向接口编程,而不是面向实现 ...
SpringBoot-CommandLineRunner
说明
CommandLineRunner 是 Spring Boot 提供的一个接口,它定义了一个 run 方法
在应用启动完成之后执行。这个接口可以用来执行一些一次性任务或者初始化操作,比如填充数据库、加载静态数据等
用途
数据初始化:可以在应用启动后立即向数据库添加默认数据。
环境检查:检查应用运行所需的环境配置是否正确。
资源预加载:预先加载一些资源,如缓存数据等。
诊断信息输出:输出一些诊断信息,帮助调试和监控应用的状态。
使用要在 Spring Boot 应用中使用 CommandLineRunner,你可以创建一个实现了 CommandLineRunner 接口的类,并通过 @Bean 等注解将其注册到 Spring 容器中。例如:
12345678910111213import org.springframework.boot.CommandLineRunner;import org.springframework.stereotype.Component;@Component@Order(1)public class MyCommandLineRunner im ...
SpringBoot-注解
原文:SpringBoot 注解最全详解,建议收藏! (qq.com)
SpringMVC 相关@Controller通常用于修饰controller层的组件,由控制器负责将用户发来的URL请求转发到对应的服务接口,通常还需要配合注解@RequestMapping使用。
@RequestMapping提供路由信息,负责URL到Controller中具体函数的映射,当用于方法上时,可以指定请求协议,比如GET、POST、PUT、DELETE等等。
@RequestBody表示请求体的Content-Type必须为application/json格式的数据,接收到数据之后会自动将数据绑定到Java对象上去
@ResponseBody表示该方法的返回结果直接写入HTTP response body中,返回数据的格式为application/json
比如,请求参数为json格式,返回参数也为json格式,示例代码如下:
123456789101112131415161718/** * 登录服务 */@Controller@RequestMapping("api")publ ...