• 善用HttpMessageConverter修改返回值

    近日,公司前台的小伙伴说我的返回值不对,处理起来太难了,他平白无故的增加了很多的工作量。我寻思:“纳尼?”。凑近一看,原来是接口的返回值,value为空的返回值都是null,增加了非空判断。例:{ "code": "1", "msg": "success", "data": { "orderId": "1313132", "address": null, "g...

    Java 2021年01月06日 1313 0
  • 用Spring Boot实现https ssl免密登录

    要让项目实现 ssl 免密登录,首先需要开启 https 。所以先从 Spring Boot 如何开启 https 说起。创建服务端证书为了开启 https ,我们需要一份证书。实际开发中,会在网上申请一个机构颁发的证书。这里为了方便,我会使用 openssl 命令自己生成一个证书来使用。openssl req -x509 -sha256 -days 3650 -newkey ...

    Java 2021年01月06日 1470 0
  • springboot 数据安全传输加密与解密

    环境:springboot2.2.6.RELEASE、Vue+axios通过继承RequestBodyAdviceAdapter实现对于请求的内容进行解密操作,实现ResponseBodyAdvice来对相应内容进行加密处理。定义加密解密的接口:SecretProcess.javapublic interface SecretProcess { /** * <...

    Java 2021年01月05日 1188 0
  • 如何设计API接口,实现统一格式返回?

    目录前言接口交互返回格式控制层Controller美观优化优雅优化实现方案总结前言在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了)。一般系统的大致整体架构图如...

    Java 2021年01月03日 1322 0
  • 轻量级的原生JavaScript的Excel插件——JExcel

    介绍jExcel是一个轻量级的原生javascript插件,用于创建与Excel或任何其他电子表格软件兼容的基于Web的交互式表格和电子表格。可以从JS数组,JSON,CSV或XSLX文件创建在线电子表格表。可以从excel复制并直接粘贴到jExcel电子表格,反之亦然。集成任何第三方javascript插件非常容易,可以创建自己的自定义列,自定义编辑器,并在应用程序中自定义任...

    Java 2021年01月02日 6858 0
  • Spring Boot 启动事件和监听器,太强大了

    大家都知道,在 Spring 框架中事件和监听无处不在,打通了 Spring 框架的任督二脉,事件和监听也是 Spring 框架必学的核心知识之一。一般来说,我们很少会使用到应用程序事件,但我们也不要忘了它们的存在,比如说在 Spring 框架内部都使用了各种不同的事件来处理不同的任务。毫无疑问,在 Spring Boot 框架中,事件和监听也得到了发扬光大,除了常用的 Spr...

    Java 2021年01月01日 1106 0
  • 查询附近范围的坐标点实现方案(java)

    需求说明需求来源于条友的一个项目,根据用户当前所在坐标,查询附近企业,并将距离进行倒排,这是个比价常见的需求,现在将实现过程简单描述一下。1、原方案从数据库中加载所有企业的坐标地址,数据量在万级,每个用户查询一次最近的企业,后台计算量就是数万次,N个用户每查询一次,就是N*数万次。2、优化方案先从数据库中查询出给定范围的企业,这样计算量就小很多,例如只需要查询1公里范围以内的企...

    Java 2020年12月31日 1443 0
  • 我用Builder优雅地实现了对象的创建

    使用构造函数直接属性赋值Java的对象创建大家都知道,当对象创建完之后,我们可以有几种方式给对象的属性赋值。比如在new的时候给属性赋值。像这样:这样在创建对象时就将属性赋值,的确很方便。但是如果对象的属性很多,我们这么赋值就很不优雅了。使用setter属性赋值一般我们实际开发中,实体类会有很多属性。这时我们可以使用setter方法给属性赋值,如下代码:我们一般也是这么写的,但...

    Java 2020年12月26日 1241 0
  • Spring Boot+CAS 单点登录,如何对接数据库?

    在前面和大家分享了松哥写的CAS Server 的搭建以及如何使用 Spring Security 搭建 CAS Client。但是前面的案例有一个问题,就是登录用户是在 CAS Server 配置文件中写死的,没有对接数据库,实际项目中,这里肯定要对接数据库,所以今天,松哥就来和大家聊一聊 CAS Server 如何对接数据库。松哥最近和 Spring Security 杠上...

    Java 2020年12月26日 1230 0
  • kotlin web框架 Ktor 1.5.0发布

    我们很高兴地宣布Ktor 1.5.0的发布,它包含了新的功能,错误修复和新的文档!我们将继续努力。新功能1.5.0 是今年的第三个也是最后一个版本,按照我们的承诺,一年有三个主要或次要版本,每月至少发布一个补丁。我们很高兴地说,到目前为止,我们已经成功地或多或少地遵守了这个承诺,尽管有时会有一些延迟。在这次小更新中,我们有一系列的新功能,包括:新的开发模式Ktor提供了一系列针...

    Java 2020年12月23日 1494 0
  • 为什么推荐try-with-resource处理java异常

    这篇文章是我近期看了《Effective java》一书中总结的,来自其中第九条。为了对其理解的更加透彻,因此重新分析了一下,并加入了一些其他点。本文的所有例子均在本地代码运行完毕基于JDK版本1.8,运行环境eclipse本文类名:TryWithResources,下文的堆栈信息也以此为基础在java开发中,一些网络链接或者是文件资源都需要程序员去手动调用close方法关闭,...

    Java 2020年12月23日 1116 0
  • springboot 中使用JWT保护资源安全

    什么是JWT Json Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象的形式安全地传输信息。此信息可以验证和信任,因为它是数字签名的。jwt可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。 尽管jwt可以被加密以提供双方之间的保密性,但我们将重点关注签名令牌。签名令牌...

    Java 2020年12月23日 1250 0
  • 文件写入的6种方法,这种方法性能最好

    在 Java 中操作文件的方法本质上只有两种:字符流和字节流,而字节流和字符流的实现类又有很多,因此在文件写入时我们就可以选择各种各样的类来实现。我们本文就来盘点一下这些方法,顺便测试一下它们性能,以便为我们选出最优的写入方法。在正式开始之前,我们先来了解几个基本的概念:流、字节流和字符流的定义与区别。0.什么是流?Java 中的“流”是一种抽象的概念,也是一种比喻,就好比水流...

    Java 2020年12月22日 930 0
  • 如何写个分布式配置中心

    前言一位读者朋友跟我反馈,能不能写一篇比较全的配置中心的文章。自己最近在面试过程中有被面试官问:如何设计一个配置中心? 这个话题,由于自己在工作中也没实际使用过配置中心,所以对于如何去设计是完全没有概念的。今天就给大家写一篇去配置中心需要考虑的点,我也不是什么配置中心开源项目的参与者,所以写出来的仅供大家参考。有必要重复造轮子吗?当面试官问你:如果让你写一个配置中心,说说你的设...

    Java 2020年12月22日 1374 0
  • Spring Boot @Condition 注解,组合条件你知道吗

    写在前面当我们构建一个 Spring 应用的时候,有时我们想在满足指定条件的时候才将某个 bean 加载到应用上下文中, 在Spring 4.0 时代,我们可以通过 @Conditional 注解来实现这类操作我们看到 @Conditional 注解接收的参数是 extends Condition 接口的泛型类,也就是说,我们要使用 @Conditional 注解,只需要实现 ...

    Java 2020年12月21日 1562 0
  • 为什么选择 Netty?Netty 入门教程

    JDK 编程感受了上面的 java 中的 BIO/NIO/AIO 详解,不知道你是否觉得 jdk 直接编程非常麻烦?还有很多情况需要去考虑处理,还有性能相关的问题、稳定性问题,拓展性问题。不选择Java原生NIO编程的原因现在我们总结一下为什么不建议开发者直接使用JDK的NIO类库进行开发,具体原因如下。(1) NIO的类库和API繁杂,使用麻烦,你需要熟练掌握Selector...

    Java 2020年12月21日 1213 0
  • 精通多线程,却不会异步编程?

    前言以前需要异步执行一个任务时,一般是用Thread或者线程池Executor去创建。如果需要返回值,则是调用Executor.submit获取Future。但是多个线程存在依赖组合,我们又能怎么办?可使用同步组件CountDownLatch、CyclicBarrier等;其实有简单的方法,就是用CompletableFuture线程任务的创建线程任务的串行执行线程任务的并行执...

    Java 2020年12月20日 1009 0
  • Java高性能编程实战 --- 线程封闭与ThreadLocal

    1 线程封闭多线程访问共享可变数据时,涉及到线程间数据同步的问题。并不是所有时候,都要用到 共享数据,所以线程封闭概念就提出来了。数据都被封闭在各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使 用同步的技术称为线程封闭。避免并发异常最简单的方法就是线程封闭 即 把对象封装到一个线程里,只有该线程能看到此对象; 那么该对象就算非线程安全,也不会出现任何并发安全问题...

    Java 2020年12月18日 1089 0
  • 将HTML表格转换成精美的PDF,几种生成PDF的解决方案

    包含表格、图表和图形的Web应用程序通常包含将数据导出为PDF的选项。你有没有想过,作为一个用户,当你点击那个按钮时,幕后发生了什么?作为开发人员,如何让PDF输出看起来更专业?大多数免费的在线PDF导出器实际上只是将HTML内容转换为PDF,而不进行任何额外的格式化,这会使数据难以阅读。如果你也能添加诸如页眉和页脚、页码或重复的表列标题等内容呢?像这样的小点缀,对把一份看起来...

    Java 2020年12月18日 1862 0
  • 线程池的7种创建方式,强烈推荐你用它

    根据摩尔定律所说:集成电路上可容纳的晶体管数量每 18 个月翻一番,因此 CPU 上的晶体管数量会越来越多。但随着时间的推移,集成电路上可容纳的晶体管数量已趋向饱和,摩尔定律也渐渐失效,因此多核 CPU 逐渐变为主流,与之相对应的多线程编程也开始变得普及和流行起来,这当然也是很久之前的事了,对于现在而言多线程编程已经成为程序员必备的职业技能了,那接下来我们就来盘一盘“线程池”这...

    Java 2020年12月18日 1609 0
  • Spring Boot 2.4 对多环境配置的支持更改

    在目前最新的Spring Boot 2.4版本中,对配置的加载机制做了较大的调整。相关的问题最近也被问的比较多,所以今天就花点时间,给大家讲讲Spring Boot 2.4的多环境配置较之前版本有哪些变化。多环境配置2.4版本之前先回顾下,2.4版本之前,我们在yaml配置文件中,使用spring.profiles来定义不同环境的标识,比如下面这样:spring:  ...

    Java 2020年12月17日 1266 0
  • Springboot整合shiro基于url身份认证和授权认证

    权限管理在日常开发中很重要,所以硬着头皮也要啃下来。在这里插入图片描述实现功能:身份认证对不同页面进行url授权多表登录解决同一个页面多role访问项目完整github地址 欢迎starspringboot一些学习整合完整地址shiro的四大组件:身份认证(Authentication)-证明用户身份,通常叫做登陆(login)。授权(Authorization)-访问控制加密...

    Java 2020年12月16日 1225 0
  • 最佳的前后端分离:SpringBoot集成Swagger2

    一、是什么  当下很多公司都采取前后端分离的开发模式,前端和后端的工作由不同的工程师完成。在这种开发模式下,维持一份及时更新且完整的 Rest API 文档将会极大的提高我们的工作效率。传统意义上的文档都是后端开发人员手动编写的,相信大家也都知道这种方式很难保证文档的及时性,这种文档久而久之也就会失去其参考意义,反而还会加大我们的沟通成本。而 Swagger 给我们提供了一个全...

    Java 2020年12月16日 1181 0
  • 5 分钟入门 spring cloud 实战笔记

    今天和大家来一起体验一下 spring cloud,回首了一下以前的笔记,整理记录 spring cloud 已经 2 年有余,不过工作中不用,也就淡忘了。最近在梳理学习微服务相关知识,就将 spring cloud 重温一下。Spring CloudSpring Cloud 为开发人员提供了工具,以快速构建分布式系统中的一些常见模式(例如,配置管理,服务发现,断路器,智能路由...

    Java 2020年12月16日 1192 0
  • 新手一看就懂的线程池

    那相信大家也能感受到,其实用多线程是很麻烦的,包括线程的创建、销毁和调度等等,而且我们平时工作时好像也并没有这样来 new 一个线程,其实是因为很多框架的底层都用到了线程池。线程池是帮助我们管理线程的工具,它维护了多个线程,可以降低资源的消耗,提高系统的性能。并且通过使用线程池,我们开发人员可以更好的把精力放在任务代码上,而不去管线程是如何执行的,实现任务提交和执行的解藕。本文...

    Java 2020年12月15日 1129 0
  • Java基础|强引用、弱引用、软引用、虚引用

    前言在ThreadLocal源码中,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:Obj...

    Java 2020年12月15日 1280 0
  • 你来说一下springboot的启动时的一个自动装配过程吧

    前言没有面试就继续夯实自己的基础,前阵子的在面试过程中遇到的各种问题陆陆续续都会总结出来分享给大家,这次要说的也是面试中被问到的一个高频的问题,我当时其实没答好,因为很早之前是看到springboot的启动的一个过程的源码的,但是时间隔得有点久了(两年多没用过springboot),所以当时也没答好。这次好好总结这部分知识。SpringApplication.run()我看网上...

    Java 2020年12月15日 1614 0
  • 无锁队列Disruptor原理解析

    队列比较队列队列比较总结: 就性能而言,无锁(什么也不加) > CAS > LOCK; 从现实使用中考虑,我们一般选择有界队列(避免生产者速度过快,导致内存溢出);同时,为了减少Java的垃圾回收对系统性能的影响,会尽量选择array/heap格式的数据结构。所以我们实际使用中用ArrayBlockingQueue多一些;注:之后会将ArrayBlockingQue...

    Java 2020年12月15日 3459 0
  • 集成动态日志,“消灭”logback-spring.xml

    前言动态调整线上日志级别是一个非常常见的场景,借助apollo这种配置中心组件非常容易实现。作为apollo的官方技术支持,博主经常在技术群看到有使用者询问apollo是否可以托管logback的配置文件,毕竟有了配置中心后,消灭所有的本地配置全部交给apollo管理是我们的最终目标。可是,apollo不具备直接托管logback-spring.xml配置文件能力,但是,我们可...

    Java 2020年12月15日 1360 0
  • springboot之本地缓存-guava与caffeine

    1. 场景描述因项目要使用本地缓存,具体为啥不用redis等,就不讨论,记录下过程,希望能帮到需要的朋友。2.解决方案2.1 使用google的guava作为本地缓存初步的想法是使用google的guava,因为本身项目中就有guava的denpency。2.1.1 pom文件需要3个dependency,如下: <!--软件老王 1--> <depen...

    Java 2020年12月15日 1293 0