202011-19 如何扩展Spring Cache实现支持多级缓存 为什么多级缓存缓存的引入是现在大部分系统所必须考虑的redis作为常用中间件,虽然我们一般业务系统(毕竟业务量有限)不会遇到如下图在随着data-size的增大和数据结构的复杂的造成性能下降,但网络IO消耗会成为整个调用链路中不可忽视的部分。尤其在微服务架构中,一次调用往往会涉及多次调用例如pigoauth2.0的client认证Caffeine来自未来的本地内存缓存,性能比如常见的内存缓存实现性能高出不少详细对比。综合所述... 继续阅读 >
202011-19 Spring Boot接口幂等插件用法示例解析 幂等概述幂等性原本是数学上的概念,即使公式:f(x)=f(f(x))能够成立的数学性质。用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。幂等性是分布式系统设计中十分重要的概念,具有这一性质的接口在设计时总是秉持这样的一种理念:调用接口发生异常并且重复尝试时,总是会造成系统所无法承受的损失,所以必须阻止这种现象的发生。实现幂等的方式很多,目前基于请求令牌机制... 继续阅读 >
202011-19 Spring Boot2读取配置常用方法代码实例 1.前言在SpringBoot项目中我们经常需要读取application.yml配置文件的自定义配置,今天就来罗列一下从yaml读取配置文件的一些常用手段和方法。2.使用@Value注解首先,会想到使用@Value注解,该注解只能去解析yaml文件中的简单类型,并绑定到对象属性中去。felord:phone:182******32def:name:码农小胖哥blog:felord.cnwe-chat:MSW_623dev:name:码农小胖哥blog:felord.cnwe-chat:MSW_623type:JUEJIN对于... 继续阅读 >
202011-19 基于Mock测试Spring MVC接口过程解析 1.前言在Java开发中接触的开发者大多数不太注重对接口的测试,结果在联调对接中出现各种问题。也有的使用Postman等工具进行测试,虽然在使用上没有什么问题,如果接口增加了权限测试起来就比较恶心了。所以建议在单元测试中测试接口,保证在交付前先自测接口的健壮性。今天就来分享一下胖哥在开发中是如何对SpringMVC接口进行测试的。在开始前请务必确认添加了SpringBootTest相关的组件,在最新的版本中应该包含以下依赖:<dep... 继续阅读 >
202011-19 spring boot实现超轻量级网关(反向代理、转发) 在我们的rest服务中,需要暴露一个中间件的接口给用户,但是需要经过rest服务的认证,这是典型的网关使用场景。可以引入网关组件来搞定,但是引入zuul等中间件会增加系统复杂性,这里实现一个超轻量级的网关,只实现请求转发,认证等由rest服务的springsecurity来搞定。如何进行请求转发呢?熟悉网络请求的同学应该很清楚,请求无非就是请求方式、HTTPheader,以及请求body,我们将这些信息取出来,透传给转发的url即可。举例:... 继续阅读 >
202011-19 spring boot实现超轻量级网关(反向代理、转发)的示例 作者:JadePeng出处:https://www.cnblogs.com/xiaoqi/p/spring-boot-route.html在我们的rest服务中,需要暴露一个中间件的接口给用户,但是需要经过rest服务的认证,这是典型的网关使用场景。可以引入网关组件来搞定,但是引入zuul等中间件会增加系统复杂性,这里实现一个超轻量级的网关,只实现请求转发,认证等由rest服务的springsecurity来搞定。如何进行请求转发呢?熟悉网络请求的同学应该很清楚,请求无非就是请求方式、... 继续阅读 >
202011-19 Spring 开发过程中Value 注解的使用场景 Spring开发过程中使用Value注解对属性进行赋值;常见的场景有三种。直接对属性进行赋值;包括普通字符串、操作系统属性、文件内容等。从配置文件中读取简单类型进行赋值;配置文件需要生效才可。从配置文件中读取复杂类型进行赋值;如数组、Map、对象列表等。一、直接对属性进行赋值通过@Value将外部的值动态注入到Bean中,使用的情况有:注入普通字符串注入操作系统属性注入表达式结果注入其他Bean属性:注入be... 继续阅读 >
202011-19 IDEA社区版创建spring boot项目的安装插件的图文教程 由于最近idea的官方查的有点严,pojie的企业版idea总失效,现在给大家说一下社区版idea创建spring项目的一个方法!!!在项目实战中了解到的IDEA创建springboot项目,我找了下我的IDEA没有springInitializr,网上的说法我试过搜不到springboot插件,经过一番折腾发现社区版的不是springboot插件,而是springAssistant插件,在settings中plugins中搜索如果有就勾选,没有选择安装即可(会提示重启工具)然后newproject中的选项... 继续阅读 >
202011-19 Spring 依赖注入实现示例 【注】本文译自:https://springframework.guru/... 在本文中,我将向你展示如何在SpringFramework的依赖项注入中使用ProjectLombok以获得最佳实践。 Spring框架本身具有多种执行依赖项注入的方式。选项的灵活性是Spring框架的优势。但是,并非所有的依赖项注入选项都被视为最佳实践。有些实际上不太好。依赖注入示例 我提供了一些设置示例,供我们查看必须使用的各种依赖项注入... 继续阅读 >
202011-17 Spring Boot 打包与热部署的操作方法 热部署SpringBoot提供了DevTool。直接在pom.xml文件中添加配置。1.添加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency>2.在maven插件依赖中新增<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--添加fork--><configuration><fork>true</fork>... 继续阅读 >
202011-17 spring是如何解析xml配置文件中的占位符 前言我们在配置SpringXml配置文件的时候,可以在文件路径字符串中加入${}占位符,Spring会自动帮我们解析占位符,这么神奇的操作Spring是怎么帮我们完成的呢?这篇文章我们就来一步步揭秘。1.示例ClassPathXmlApplicationContextapplicationContext=newClassPathXmlApplicationContext();applicationContext.setConfigLocation("${java.version}.xml");applicationContext.refresh();String[]beanNames=applicationConte... 继续阅读 >
202011-17 在spring中手写全局异常拦截器 为什么要重复造轮子你可能会问,Spring已经自带了全局异常拦截,为什么还要重复造轮子呢?这是个好问题,我觉得有以下几个原因装逼Spring的全局异常拦截只是针对于SpringMVC的接口,对于你的RPC接口就无能为力了无法定制化除了写业务代码,我们其实还能干点别的事我觉得上述理由已经比较充分的解答了为什么要重复造轮子,接下来就来看一下怎么造轮子造个什么样的轮子?我觉得全局异常拦截应该有如下特性使用方便,最... 继续阅读 >
202011-17 Spring cloud oauth2如何搭建认证资源中心 一认证中心搭建添加依赖,如果使用springcloud的话,不管哪个服务都只需要这一个封装好的依赖即可<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId></dependency>配置springsecurity/***security配置类*/@Configuration@EnableWebSecurity//开启web保护@EnableGlobalMethodSecurity(prePostEnabled=true)//开启方法注解权限配置publiccla... 继续阅读 >
202011-13 浅析Java中Apache BeanUtils和Spring BeanUtils的用法 #前言在我们实际项目开发过程中,我们经常需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息,比如DTO数据传输对象和数据对象DO,我们需要将DO对象进行属性复制到DTO,但是对象格式又不一样,所以我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型。#对象拷贝在具体介绍两种BeanUtils之前,先来补充一些基础知识。它们两种工具本质上就是对象拷贝工具,而... 继续阅读 >
202011-13 Vue+Spring Boot简单用户登录(附Demo) 1概述前后端分离的一个简单用户登录Demo。2技术栈VueBootstrapVueKotlinSpringBootMyBatisPlus3前端3.1创建工程使用vue-cli创建,没安装的可以先安装:sudocnpminstall-gvue@vue/cli查看版本:vue-V出现版本就安装成功了。创建初始工程:vuecreatebvdemo由于目前Vue3还没有发布正式版本,推荐使用Vue2:等待一段时间构建好了之后会提示进行文件夹并直接运行:cdbvdemoyarnserve直接通过本地的8... 继续阅读 >
202011-13 Spring Boot中是如何处理日期时间格式的 在springboot中开发RESTful接口,经常会遇到日期时间转换相关的问题,例如我们明明输入看起来很正常的日期时间字符串,但是系统却报错无法解析:JSONparseerror:Cannotdeserializevalueoftypejava.time.OffsetDateTimefromString“2020-06-0614:26:31”或者接口返回的日期时间字符串是一个很奇怪的字符串:2020-06-0414:41:54.767135400+08:00如何正确的处理日期时间,本文将一探究竟。日期时间格式标准有两个标准组... 继续阅读 >