Spring
空城1995
爱编程,爱java。
展开
-
Spring 使用 JSR303自定义校验注解+分组校验
我们有这样一个需求,想要校验一个int类型的变量,校验它的值必须为我们所指定的值,且在修改状态分组时生效。 @ListValue(vals = {0, 1}, groups = {UpdateStatusGroup.class})1. 导入依赖 <dependency> <groupId>javax.validation</groupId> <artifactId>valida..原创 2020-12-16 17:33:04 · 717 阅读 · 0 评论 -
Spring如何实现统一的基于请求头header或url的接口版本控制
1.Spring自定义 RequestMappingHandlerMapping实现一套统一的基于请求头方式的版本控制定义自己的 RequestCondition 来做请求头的匹配:public class APIVersionCondition implements RequestCondition<APIVersionCondition> { @Getter private String apiVersion; @Getter private S...原创 2020-08-20 16:11:02 · 2293 阅读 · 0 评论 -
Spring 声明式事务在业务开发中容易碰到的坑总结
Spring 声明式事务,在业务开发使用上可能遇到的三类坑,包括:第一,因为配置不正确,导致方法上的事务没生效。我们务必确认调用 @Transactional 注解标记的方法是 public 的,并且是通过 Spring 注入的 Bean 进行调用的。第二,因为异常处理不正确,导致事务虽然生效但出现异常时没回滚。Spring 默认只会对标记 @Transactional 注解的方法出现了 RuntimeException 和 Error 的时候回滚,如果我们的方法捕获了异常,那么需要通过手动编码处理原创 2020-08-13 20:21:24 · 719 阅读 · 0 评论 -
利用Spring的Aop实现项目的日志监控
导入依赖 <!--引入AOP依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!-- 用于日志切面中,...原创 2020-05-28 11:23:13 · 653 阅读 · 0 评论 -
Spring基于配置方式实现自定义条件装配
@Profile Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能 @Profile指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件 @Profile注解可以加在类上,也可以加载注入bean的方法上 @Profile注解用于实现通过修改运行时参数,切换不同的开发环境 下面模拟一下在不同环境下加载不同类...原创 2020-01-14 18:04:36 · 275 阅读 · 0 评论 -
自定义注解实现业务分发
有时候,在我们的项目中,一个请求中会包含很多种情况。我们需要根据一个字段不同的状态去走不同的逻辑。如果用我们的正常逻辑写,就会产生很多的if else判断,使得代码的可读性和维护性降低。比如我们有一个聊天服务,需要通过自定义消息体来完成具体的业务处理。对应的行为可能有登录,退出登录,发送消息,已读消息,加好友,获取用户信息,消息撤回,消息删除等等。这里的行为最少会有数10种之多,此时我们就...原创 2019-12-19 14:35:46 · 754 阅读 · 0 评论 -
SpringBoot之使用RabbitMQ实现延迟队列
在我们的各个项目中,经常会有这样的需求。 订单模块:在订单下单后30分钟如果没有付款,就自动取消订单, 短信模块:在下单成功后60s给用户发送短信通知 支付模块:在微信/支付宝支付成功后,1分钟后去调用上游接口检查订单有没有支付成功 实现这种需求的方式有几种。一种比较笨的方式是采用定时任务,轮训数据库,方法简单好用,但性能低下,在高并发情况下容易弄死数据库,间隔时...原创 2019-11-09 19:19:57 · 484 阅读 · 0 评论 -
SpringBoot集成Redission实现分布式缓存
github地址:https://github.com/redisson/redisson一.源码分析trylocktryAcquire针对过期时间做不同的转发处理tryLockInnerAsync <T> RFuture<T> tryLockInnerAsync(long leaseTime, TimeUnit unit, lo...原创 2019-11-09 19:04:57 · 2708 阅读 · 0 评论 -
SpringBoot之发送邮件
1.pom配置 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> ...原创 2019-10-24 09:02:30 · 572 阅读 · 0 评论 -
前后端分离中使用基于jwt的token进行身份认证
基于jwt的Token认证机制可以看之前的文章:基于JWT的Token认证机制实现在前后端分离中,我们与前端约定一种身份认证机制。当用户登录的时候,我们会返回给前端一个token,前端会将token拿到并按照一定规则放到header中在下一次请求中发送给后端,后端进行token身份校验。这里我们约定前端请求后端服务时需要添加头信息Authorization ,内容为Test:+空...原创 2019-09-18 14:48:44 · 2635 阅读 · 0 评论 -
在SpringBoot中使用redis实现分布式锁
在企业的项目中,经常会碰到多线程安全的问题。特别是在涉及到金钱方面的,安全问题更是重中之重。如何保证多线程下的安全就成了必须要解决的问题。在之前负责的某个项目中,有几个地方就被人恶意攻击过。用户申请提现的时候,通过接口快速访问,可以跳过钱包余额的校验达到多次提现。在微信小程序支付订单的时候,小程序支付完之后,瞬时调用多次检查订单状态的接口,也会导致多线程的问题,导致钱包余额增加多次。最开始...原创 2019-09-04 19:16:48 · 400 阅读 · 0 评论 -
Spring自定义注解+redis实现接口限流
在实际开发中,有时候我们需要对某些接口进行限流,防止有人恶意攻击或者是因为某些接口自身的原因,比如发短信接口,IO处理的接口。这里我们通过自定义一个注解,并利用Spring的AOP拦截器功能来实现限流的功能。限流需要用到redis。代码:Limit.java这里我们有两种限流类型,一种是根据接口本身来进行限流,一种是根据ip来进行限流@Target(ElementType.M...原创 2019-08-16 11:20:41 · 1627 阅读 · 2 评论 -
Spring之Bean的配置(二)
目录一、Bean的配置1.自动装配(1)简介(2)缺点2.继承Bean3.依赖Bean配置4.Bean的作用域5.使用外部属性文件6.注册PropertyPlaceholderConfigurer7.通过工厂方法配置Bean(1)静态工厂(2)实例工厂8.通过FactoryBean配置Bean9.基于注解配置Bean10.组件装配11...原创 2018-09-27 15:51:19 · 182 阅读 · 0 评论 -
Spring的AOP
目录1.简介2.AOP术语3.启用 AspectJ 注解支持4.用 AspectJ 注解声明切面5.切入点表达式6.合并切入点表达式7.重用切入点定义8.AspectJ的5种通知注解演示9.指定切面的优先级10.基于配置文件的AOP配置1.简介 AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, ...原创 2018-10-02 23:42:44 · 217 阅读 · 0 评论 -
谈谈对Spring IOC的理解
本文转载自:https://www.cnblogs.com/xdp-gacl/p/4249939.html 一、分享Bromon的blog上对IoC与DI浅显易懂的讲解1.1、IoC(控制反转) 首先想说说IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生...转载 2018-11-07 11:33:02 · 119 阅读 · 0 评论 -
通过AOP控制事务的案例
1.xml配置版执行以下sql语句create table account( id int primary key auto_increment, name varchar(40), money float)character set utf8 collate utf8_general_ci;insert into account(name,money) ...原创 2018-11-10 21:57:59 · 524 阅读 · 0 评论 -
SSM的整合
目录一、整合分析整合的示例:整合的配置方式:整合步骤分析:二、SSM整合1.建表2.创建表对应的实体对象3.创建Service层的java类4.搭建Spring环境(1)导入Spring的pom坐标(2)Spring的配置文件(3)测试Spring能否独立运行5.搭建MyBatis环境(1)导入MyBatis的pom依赖(2)MyBati...原创 2018-11-17 09:20:10 · 169 阅读 · 0 评论 -
Spring任务调度之Spring-Task
目录1.什么是任务调度2.基于注解的定时任务3.基于xml的定时任务4.cron表达式1.什么是任务调度在企业级应用中,经常会制定一些“计划任务”,即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作。常见的任务调度框架有Quartz和SpringTask等。spring-task是Spring3.0以后自主开发的定时任务工具,可...原创 2018-12-15 22:39:33 · 368 阅读 · 0 评论 -
Spring Boot实现一个天气预报系统(一)
1.数据来源 天气的数据来源为中华万年历 通过城市名称获得天气数据:http://wthrcdn.etouch.cn/weather_mini?city=北京 通过城市id获得天气数据:http://wthrcdn.etouch.cn/weather_mini?citykey=101280601 城市id列表 每个城市都有一个唯一的id作为标识:https://wayl...原创 2019-06-27 20:27:53 · 3010 阅读 · 0 评论 -
Spring Boot实现一个天气预报系统(二)数据同步
1.开发环境 JDK8 Maven Spring Boot Web Starter 2.1.6 Apache HttpClient 4.5.3 Spring Boot Data Redis Starter 2.1.6 Redis 3.2.100 Spring Boot Quartz Starter 2.1.6 Quartz...原创 2019-06-28 17:32:32 · 946 阅读 · 2 评论 -
Spring Boot实现监控linux-cpu和内存使用情况,并发送邮件
参考自:https://blog.csdn.net/qq_42035966/article/details/81332554一.主要功能监控linux的cpu和内存使用率,当频率过高时,发送邮件提醒功能。二.代码(1)导入依赖 <dependency> <groupId>org.springframework.boot</groupId&...原创 2019-07-13 17:22:26 · 7467 阅读 · 1 评论 -
Spring之Bean的配置(一)
目录一、概述1.什么是Spring2.作用二.Spring中的Bean配置1.IOC容器里配置bean2.Spring容器3.ApplicationContext4.从IOC容器中获取Bean5.依赖注入的方式(1)属性注入(2)构造器注入6.字面值7.引用其它Bean8.注入参数:null值和级联属性9.集合属性(set、list)...原创 2018-09-27 09:10:23 · 156 阅读 · 0 评论