JavaWeb开发
实际开发记录
极光雨雨
“芝士”与你分享 ———纳西妲
展开
-
Mybatis (plus 也适用)原生直接执行某句SQL
想要不论传入什么sql 都能直接执行。原创 2024-06-18 15:44:14 · 544 阅读 · 0 评论 -
Kafka消息丢失处理方式,消息丢失与消费失败区别和分别的处理
Kafka 消息丢失的处理方式可以从生产者、Broker 和消费者三个角度来考虑,以确保消息的可靠传递。原创 2024-05-24 11:42:36 · 721 阅读 · 0 评论 -
JavaWeb 什么是缓存击穿,缓存击穿的解决方案学习总结
缓存击穿在JavaWeb应用中是一个常见的问题,它特指在一个高并发的场景下,如果一个缓存键的生命周期结束(即缓存过期)并且这个键对应的数据在数据库中也不存在或者访问量极高,那么大量的并发请求会因为无法在缓存中找到数据而直接穿透到后端数据库,从而对数据库造成极大的压力,可能导致数据库连接耗尽、响应变慢甚至服务崩溃。原创 2024-05-24 11:28:31 · 986 阅读 · 0 评论 -
Java 三种主流的消息中间件 RabbitMQ、Kafka 和 RocketMQ 特点以及适用,使用场景 学习总结
RabbitMQ特点基于AMQP(Advanced Message Queuing Protocol)协议,这是一个开放的标准,支持多种语言客户端。支持复杂的消息路由功能,如Direct, Topic, Fanout, Headers交换机类型,能够满足不同的消息分发需求。提供高可用性配置,支持集群部署以保证消息不丢失。社区活跃,文档丰富,易于上手。适用场景当你需要一个功能全面、灵活的消息路由机制,并且对消息的可靠性要求较高时,RabbitMQ是一个好选择。原创 2024-05-24 10:31:07 · 1581 阅读 · 0 评论 -
调用方返回文件流,获取文件流 inputstream 并转换为MultipartFile 或一般文件输出流下载,案例 inputstream 转 byte[]
然而,如果你的应用程序不需要直接与Spring的文件上传功能集成,直接处理原始的输入流并将其保存到文件系统或其他存储服务上可能更为直接有效。通常用于处理HTTP请求中的文件上传部分,而并非直接用于处理HTTP响应中的文件流。实例,并在一个try-with-resources块中使用它,确保即使发生异常也能正确关闭输出流。的行为,以便在后续操作中使用它,比如通过Spring框架的文件处理机制进行处理。以下是一个简化的示例,展示如何将获取的输入流包装成一个模拟的。的内容到缓冲区,并将缓冲区的内容写入。原创 2024-05-23 16:49:42 · 1178 阅读 · 0 评论 -
将字符串内容写入多个文件并加入到zip文件中输出,以及zip输出到 HttpServletResponse
下面是一个简单的示例代码,演示了如何遍历一个字符串集合,为每个字符串创建一个.sql文件,然后将这些文件打包成一个zip文件并导出。请确保在运行此代码之前,您的项目已经正确设置了文件读写权限,并且理解这只是一个基础示例,实际应用中可能需要更复杂的错误处理逻辑。请注意,这个示例假设您已经有了一个包含字符串的集合,以及一个合适的方法来处理文件路径和权限问题。)时,它会生成一个包含单个字符串条目的ZIP文件,并通过HTTP响应发送给客户端,触发文件下载。可以使用Java的IO和Zip相关的API来完成。原创 2024-05-20 17:25:01 · 286 阅读 · 0 评论 -
spring restTemplate的使用和学习总结
在 Spring 内,是一个非常方便的 HTTP 客户端。虽然在 Spring 5 中WebClient是推荐的替代方法用于进行异步请求,但依然被广泛使用于同步请求场景。以下是一些使用的基础用法示例。原创 2024-04-29 17:16:54 · 789 阅读 · 0 评论 -
JavaWeb 通用的直接从 ServletRequestAttributes 中获取Request以及Response和Session
其他Controller 可以通过继承该 基础 controller 来直接内部调用封装后的方法来直接获取请求的一些属性。定义通用基础 controller 一些需要直接从请求中获取的公共属性或内容。原创 2024-04-29 16:52:01 · 328 阅读 · 0 评论 -
Java 使用Socket测试某一地址和端口是否通
用于测试某些地址是否可以链接成功,或发送消息成功。原创 2024-04-29 14:08:23 · 318 阅读 · 1 评论 -
@Inject 与 @Autowired 区别
这意味着它是一个与具体框架无关的标准注解,理论上可以在任何支持 CDI 的环境中使用,如 Java EE 或 MicroProfile 应用。主要区别在于它们各自所属的标准(Java EE / Jakarta EE 与 Spring)、提供的配置选项以及所在的编程环境。在实际应用中,如果你正在编写一个基于 Spring 的应用,通常会选择使用。特有的注解,用于其自身的 IoC 容器中的依赖注入。根据 CDI 规范,默认情况下也是要求注入成功的,但它本身不提供像。的兼容性,两者在很多情况下可以互换使用。原创 2024-04-07 18:23:33 · 600 阅读 · 0 评论 -
Java web Excel导出/下载 示例关键代码部分
创建excel 部分 (xlsx格式)结束,具体写入的内容根据需要填入即可。下载模板,导出excel 等。原创 2023-11-22 15:24:28 · 149 阅读 · 0 评论 -
Java 开源重试类 guava-retrying 使用案例
/*** 根据输入的condition重复做task,在规定的次数内达到condition则返回,* 如果超过retryTimes则返回null, 重试次数,整个重试时间以及retry exception都会记录log* 需要注意调用的时候需要新起一个线程,不然重试失败会阻塞当前线程* @param condition 重试条件,比如接口返回errorCode为处理中,或不是最终需要的结果* @param task 重试做的任务。原创 2023-11-20 15:37:55 · 882 阅读 · 0 评论 -
Java 批量执行某一动作,添加进度条查询接口思路和要点记录
来存放所有提交记录的唯一标识的作为 map 的 Key put 入内,并将执行的结果作为对应 key 的值,也就是结果,成功的则更新对应标识key put 为成功,异常的为失败,依旧还在进行中的为执行中。即第一步全部发起成功,然后提供第二个接口来查询之前的提交的内容的执行进度。对列表执行大批量的提交,或者发起流程等,由于时间较长而需要发起异步操作。原创 2023-11-14 16:53:53 · 249 阅读 · 0 评论 -
spring 循环依赖以及解决方式
简单来说就是在你的某个 AService 中(已经注入到容器),注入了 BService ,但是在BService 中, 也同时注入了 AService,两个 service 形成了循环互相依赖。在一般的场景中更多的是说A 依赖 B, B 依赖 C, 然而 C 反过来依赖 A 这样也构成了循环当循环形成会导致无法判断先注入那一个导致系统抛出错误即 某些类在系统上下文中形成了一个循环。原创 2023-10-16 11:32:52 · 515 阅读 · 0 评论 -
分布式锁的三种实现方式 学习总结
数据库分布式锁,redis 缓存分布式锁,zookeeper 分布式锁原创 2023-07-17 13:55:53 · 727 阅读 · 0 评论 -
大事务出现原因以及解决方式学习总结 以及编程式事务和声名式事务
即通过注解开启的事务Spring 提供了一个特殊类用来灵活在代码中实现spring 事务。原创 2023-07-13 11:33:31 · 487 阅读 · 0 评论 -
Spring 事务失效的十二种场景,以及事务传播机制特性 学习总结
Transactional 可以指定 回滚的异常类型,如果指定的异常类型与实际抛出的不一致那么也将无法回滚数据如下:MyException 为我们自定义的异常,如果抛出了其他非我们自定义的异常,例如我们引用的jar 等里面的异常,此时将失效实际使用时如果使用默认值,一旦程序抛出了Exception,事务不会回滚。Exception或Throwable。原创 2023-07-13 10:18:18 · 1685 阅读 · 0 评论 -
JavaWeb 拦截器(interceptor)和过滤器(filter)的区别 总结
filter 是最早的基于Java 基础的 Servlet 的规范定义的,所以 filter 依赖于tomcat 等基本只用于JavaWeb 项目。:在请求进入 Servlet 之后,在进入 controller 之前,controller 渲染视图完成后结束。:更贴合系统本身的业务操作,例如权限、日志、业务系统有效检查,是否可用等等。:更多的用于请求拦截,对请求做基本加工等其他统一的基本功能性操作,但用于检查权限等也不是不可以。:基于函数也就是方法回调来完成拦截和放行的操作。原创 2023-07-12 15:57:23 · 480 阅读 · 0 评论 -
Java基础 自定义异常 自我学习以及总结和个人理解
在大部分业务系统中都有定义自己的异常类型,用于区分于一般的Exception 以及 RunntimeException。截止目前为止我认为这个自定义异常的作用更多的是可以用于将自己业务系统中的错误更明显的区分出来。通过识别异常类型为自己定义的异常来做一些特别的异常信息处理和返回,或者当出现某个自定义的业务异常后针对某个或者某些异常做额外的代码处理。原创 2023-07-11 10:56:13 · 215 阅读 · 0 评论 -
Java Swagger集成 相关学习以及总结
自己任意创建一个文件(名称任意) 内容大致如下:更多内容放到下面逐一加入如果通过 Spring 的 xml 文件注入该类,那么不用添加// 总的接口文档信息 private ApiInfo apiInfo() {} // 要加载的接口信息 以及扫描的接口路径等 @Bean public Docket myApi() {原创 2022-10-20 14:41:52 · 659 阅读 · 1 评论 -
Java HttpClient-Restful 工具各种请求高度封装提炼总结及案例
总的工具要求底层完全可复用的代码全部提炼,也就是不通类型(GET, POST, DELETE, PUT 等等)请求的决定性公共步骤其实是可以提炼出来的。即 一个请求,请求头一定会有,请求路径一定会有,发起请求一定会有,返回处理一定会有。但同时由于请求头内容可能会有不同的要求或者加密方式,所以需要将相关加工过程放到基础工具类之外,保证调用基础工具类时只执行所有请求都需要的的步骤,不带有特殊处理。这里主要使用的都是 org.apache.http 已包装的 httpClient ,项目中进一步将各种类型的请原创 2022-10-19 16:55:42 · 1085 阅读 · 0 评论 -
Java 主动从当前线程获取异常信息的方式
在单个方法内主动捕获异常,并将异常的错误栈信息以日志的方式打出来。原创 2022-10-13 14:03:29 · 525 阅读 · 0 评论 -
Java CountDownLatch 学习总结
同为 java.util.concurrent 下的,即也是并发多线程相关下的类,直译 “倒计时锁存器”,一般用于多线程场景,单一的线程也可以,用于等待多个任务完成后再执行其他操作;就是当使用了这个方法后当前这一个线程将进入等待状态,直到计数器被减到0或者当前线程被中断,计数器被减到0后,所有等待的线程将被唤醒继续向下执行。同上,但是指定了等待的超时时间,即线程除了上方两种被唤醒的情况下,等待到超时时间后也会被唤醒。则抛出{@link InterruptedException},并清除当前线程的中断状态。.原创 2022-08-29 15:51:39 · 1234 阅读 · 0 评论 -
Java8 CompletableFuture runAsync等使用学习总结 submit() execute()等
返回的CompletableFuture是多个任务都执行完成后才会执行,只要有一个任务执行异常,则返回的 CompletableFuture 执行get方法时会抛出异常,如果都正常执行,则get返回null。指定某个任务执行异常时执行的回调方法,会将抛出异常作为参数传递到回调方法中,如果该任务正常执行则 exceptionally方法返回的CompletionStage的result就是该任务正常执行的结果。当某个任务执行完成后执行的回调方法,会将执行结果或者执行期间抛出的异常传递给回调方法。原创 2022-08-25 19:02:30 · 4067 阅读 · 0 评论 -
Java 线程池手动创建示例及自我理解的解读 ThreadFactory手动创建示例
第一种方式:lambda构建方式为:运行后第二种,仿照源码的方式创建:可以参考源码中默认工厂的创建方式,查看路径如下:进入再进入 new 的类可见自己创建一个工厂时需要实现 ThreadFactory 的接口做部分解读如下:= null)?return t;} }原创 2022-08-25 14:03:28 · 987 阅读 · 0 评论 -
Java 任意class类型判断及使用场景 getName() getCanonicalName() getSimpleName() getTypeName() isAssignable()
可以看的出,只要判断的是一般的类那么只要保证标红的方法使用一致那么就可以保证类型的判断正确,如果需要判断入参为某一个类的子类那么使用 isAssignableFrom(子类对象.class) 即可。任意一个对象 Java 都有它自己的类,例如一般的字符串对象都给与了 String 这个类,而对于定义类 Class 本身也是拥有着自己的类定义和通用的方法。返回Java语言规范定义的基础类的规范名称。如果此类对象表示数组类,则名称的内部形式由元素类型的名称组成,前面是一个或多个字符,表示数组嵌套的深度。原创 2022-08-19 17:34:46 · 2447 阅读 · 0 评论 -
Java Web DTO 以及 VO 等实际意义以及作用
DTO (Data transform object) 以及 VO (View Object ), 直译即 数据转换对象 以及 视图对象,DTO 用来做一般的数据承接,然后通过 映射关系转为某个或某些特定的对象,然后继续向下或向上做处理。在Java Web 开发中,接口请求返回的数据大部分都是组合而成的,有的来源于周边产品,有的来源于产品本身存储的数据,有的来源于综合计算之后的结果,有的来源于其他配置方面等。一般情况下到了 页面层,数据会减少很多,但也不排除组合数据后使得数据增多。...原创 2022-08-17 17:35:59 · 1538 阅读 · 0 评论 -
Collections unmodifiableCollection,emptyList,singletonList 介绍以及总结
通过JDK Collections 自带提供的 unmodifiableCollection() 可以直接通过 arrays.aslist的方式直接构造该一个该对象,从字面意思理解就是这是一个不可修改的集合,即通过这样方式创建出来的内容只能执行一般的查询操作不支持 任何类似 add remove 等修改操作,否则直接抛出 不支持的操作异常。获取的均是不可修改的内容,满足了最常见的使用场景,即确定了长度的集合,长度为1的集合,空集合。:如果需要操作可以使用一般的 ArrayList 等的构造函数去转换。..原创 2022-08-15 11:27:21 · 305 阅读 · 0 评论 -
Mapstruct @Mapper @Mapping 使用介绍以及总结
用于各个对象实体间的相互转换,例如数据库底层实体 转为页面对象,Model 转为 DTO(data transfer object 数据转换实体), DTO 转为其他中间对象, VO 等等,相关转换代码为编译时自动产生的新文件和代码。两个对象之间相同属性名的会被自动转换,指定特殊情况时需要通过注解在抽象方法上说明不同属性之间的转换。转换方法一般均为抽象方法,所以这一类文件一般使用 接口 类,或者抽象类均可,官方的介绍一般均使用了接口类文件来完成。如果感兴趣可以到官网看看官网链接官方给与的示例配置在本原创 2022-08-11 18:14:29 · 19994 阅读 · 2 评论 -
Jackson @JsonIgnoreProperties(ignoreUnknown = true) 作用和使用场景
在 JSON 使用 util 转为实体类的过程中可能出现 json 中的属性多于或者少于 要转换的实体,一般情况下在 json 中属性少于 要转换的实体时并不会出现问题,但当出现属性多于要转换的实体的时如果不添加此注解则会直接抛出异常,故此注解用于对实体转换的兼容保护。用于一般的 JSONUtil 将 json 串转为 指定的类实体。(当指定的类使用了注解。则 StartBusDTO 的实体如果添加了注解。指定的 json 为 jackson。...原创 2022-08-08 16:49:58 · 2596 阅读 · 0 评论 -
swagger @Api @ApiOperation @ApiImplicitParams @ApiResponses @ApiModel @ApiModelProperty 基本使用总结
一般controller上@Api(value="标题",tags="标签一",description="描述")publicclassxxxxxxxxxxxController{@Api用在总的controller上方value即名称,也可以默认不写value,默认会给与value例如@Api("标题")tags即对api的分类,类似于接口的标签用于进一步分类description即对接口的描述一般接口上如下示例对当前具体接口的描述,......原创 2022-07-27 10:23:11 · 3887 阅读 · 0 评论 -
Java开发技巧 数组,list,set之间的转换 Map转Collection
数组转list使用JDK自带Arrays.asList但这样的转换出来的只能时引用类型的数组,基本数据类型的数组不可以,同时转换出来的对象不能执行增删操作;使用JDK的Collections或者ApacheJakartaCommonsCollections使用时导入如下。此时还不能直接使用,可以调用Collection的toArray方法转为Object数组。通过使用Map的values()方法,这样获取的是map中所有的value。...原创 2022-07-22 13:48:01 · 2255 阅读 · 0 评论 -
Java开发技巧 数组转List的四种方式总结
同时可以看的出上面如果直接使用了int[]这种基本类型,转换时并不是我们预期的int而且把int[]认为了是一个泛型中的基本类型,泛型中不支持基本数据类型,所以如果非要使用尽量转为包装类,除非只做基本的运算。即Java.util提供的Arrays中的asList方法,可以直接将一般的字符串数组以及包装类后的结果做直接转换。的返回值作为arrayList够构造方法的入参,即可构造出可以进行增删操的正常list。不支持的short[],byte[],char[]...原创 2022-07-22 10:46:24 · 15251 阅读 · 1 评论 -
开发过程中的总结 BaseService 为所有的 Controller或Service 提供一个公共获取 Service 的文件,减少重复注入
这种方式看起来更好一些,将不同的服务类直接通过staticfinal的方式在类内静态声明(需要先从applicationContext中获取),当其成为一个静态属性时,其他的controller或者service直接通过类名。其他Controller或者Service中如下方式继承,则可以省去重复注入,为了减少Controller中的注入,甚至可以直接在不同的Service继承,controller可以完全不使用。这是一种好的方式但是还是存在部分浪费的嫌疑。...原创 2022-07-21 15:27:11 · 1991 阅读 · 0 评论 -
Arthas 接口性能定位学习总结
阿里开源的线上调试工具,可以做到代码性能监控,查看 JVM的实时运行状态, 代码反编译查看线上代码 等等Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断Arthas 官方文档首先需要有 Arthas 以及具备 Java 环境变量即可trace 方法内部调用路径,并输出方法路径上每个节点耗时 注意空格不要丢了 输入完成后回车,然后在页面或者其他方式触发对应的请求 请求结束后会出现每一行的用时原创 2022-07-07 16:45:09 · 670 阅读 · 0 评论 -
Java Web 请求一个Controller 转发到另一个Controller 的四种解决方式总结(HandlerInterceptorAdapter, Filter, ModelAndView)
项目在一些特殊的情况下可能会将一个请求转发给另一个请求去处理,有可能是业务系统直接互相调用。也有可能第一个请求只做了转发不做实际的处理,第二个请求才去做实际的处理。也有可能两个i请求的处理方式都是由第二种给出的等等。这里我的场景是做请求转发,实际处理依旧是第二个请求去处理。这里通过资料查询以及实践给出三种请求转发的方式和案例:为了准确定位一些Controller的方法,我自定义了注解去判断是否需要执行转发逻辑,或者你也可以直接通过请求路径判断似乎做转发逻辑,示例如下:我的注解:我的 HandlerIn原创 2022-06-08 12:41:21 · 6280 阅读 · 1 评论 -
Java Web 一个Controller 拥有多个请求路径写法学习总结
当多个请求路径要映射到同一个controller 请求下时,项目架构使用 springframework(spring 框架),可以使用(只需要关注 requestMapping 或者 GetMapping 或 PostMapping 内的写法即可)加在最顶层 controller 上的写法:只有一个请求路径时多个请求路径都要映射到这个controller 下时 写法:注意这里的 @RequestMapping 注解,里面当存在多个请求路径时,需要使用 { } 包围里面的内容,{ } 其实就是Jav原创 2022-06-08 09:49:56 · 3200 阅读 · 0 评论 -
ThreadLocal 的作用和使用方式学习总结(内存泄漏以及内存溢出的概念)
ThreadLocal 作用一般创建的每一个变量所有线程均可以访问和修改,为了实现每一个线程有自己独有的变量,ThreadLocal 就可以用来解决这种问题自己的理解:相当于在一个类中定义了一个独有的线程 static final,这个线程中存储了独有的变量 和数据,相当于某一个类下的全局变量容器,可以存放一些想要的数据,不论是主线程还是其他线程在 执行过程中访问到的都是相同的内容,一旦修改,那么所有访问到这个线程的内容也都将更改。但 ThreadLocal 如果使用不当会造成内存泄漏的问题,内存原创 2022-05-24 09:49:00 · 562 阅读 · 0 评论 -
Java Stream map, Collectors(toMap, toList, toSet, groupingBy, collectingAndThen)等学习和使用理解及案例
.map 方法原创 2022-05-17 17:17:22 · 1772 阅读 · 0 评论 -
WEB 应用 配置文件 代码初始化加载配置参数的两种方式
通过 定义Utils类的 静态代码块来执行一次性赋值import org.apache.commons.lang3.StringUtils;import org.springframework.core.io.FileSystemResource;import org.springframework.core.io.Resource;import org.springframework.core.io.support.EncodedResource;import org.springframewo原创 2022-04-15 15:22:12 · 523 阅读 · 0 评论