Spring
文章平均质量分 66
王富贵儿。
纵使疾风起,人生不言弃。
展开
-
SpringCloud入门学习笔记【TBC】
参考谈谈几个 Spring Cloud 常见面试题及答案Spring Cloud 入门总结原创 2020-11-21 21:45:25 · 162 阅读 · 0 评论 -
流水号自增实现
背景业务上有生成凭证编码的需求(根据一定的业务规则,生成业务上的唯一标识,一般都是“业务标记+流水号”的形式)。之前设计时考虑到数据量不大,用户也不多,就在数据库里搞了一张流水号的表,然后用乐观锁,保证每次读出来+1后再写回数据库。万万没想到,每秒30的并发,就有好多失败,认命之后只好屈服于redis。这个也是个经验教训,实现方式不能凭感觉猜,还是要有更多的考虑好一点。实现思路核心就是redis 的 INCR 命令。然后redis没有做持久化的话,会存在数据丢失的情况。怎么办呢,做法是根据.原创 2020-11-16 11:23:29 · 809 阅读 · 4 评论 -
Spring声明式事务@Transactional使用
背景作为一个后端开发,@Transactional一直在用,但总会碰到各种离奇的不生效的情况,每次都是到处查资料解决。就想写一篇文章整理一下,后面遇到就不用到处找了,有新情况也再补充。@Transactional声明式事务spring支持 编程式事务 和 声明式事务 两种。编程式事务也就是用代码手动控制事务的开始、提交或回滚,这样业务代码就变得不纯粹,功能代码和辅助代码杂糅到一起,并且会有许多重复代码。所以我们一般使用声明式事务。声明式事务一般有两种方式,一是基于tx和aop命名空间的xml原创 2020-11-10 10:30:55 · 850 阅读 · 1 评论 -
Spring循环依赖及@Lazy解决
背景之前写了一个用自定义注解+切面进行日志和日常统一处理的方案,但是遇到了一个问题就是,如果注解标记的方法A 被同一个类中另一个方法B调用,当B方法被外部调用时,注解将不生效,切面无法拦截。即外部调用B方法时,注解@RpcCheck不会生效。@RpcCheckpublic void A() {}public void B() { A();}当时查了一下解决原因,切面之所以会生效,是因为创建了代理对象,在调目标方法A之前,代理对象进行了增强处理(切面逻辑)。但是B调用A时,是类原创 2020-09-12 16:14:32 · 8204 阅读 · 0 评论 -
前端直接访问后端静态文件
背景有一些固定不变地文件,前端要访问。第一方案是放在文件中心,但是文件中心会有自动生成的文件名,前端直接访问无法将原始文件名替换。所以想到了另一方案,把文件放在工程目录下,让前端直接访问。实现在resource目录下,新建static目录,在static目录下新建file目录,然后前端可以直接访问file目录下的文件前端访问路径:localhost:8080/file/test.txt借鉴通过url访问文件(静态资源)...原创 2020-09-09 19:02:30 · 6190 阅读 · 0 评论 -
Controller层接口参数校验统一处理
背景一般的controller层接口都要做参数校验的,最起码的空判断都是要做的。以前的写法就是一堆 if 判空堆在一起,空了就想改进一下,看看有没有什么更好的方法。然后就查到了有校验注解 @Validated ,在此记录使用方法。使用总结来说就是对非空字段用对应注解标记,然后在全局统一异常处理中对参数校验异常统一处理。POST请求 @PostMapping("/submit") @ApiOperation(value = "提交") public MyResult原创 2020-08-01 17:27:18 · 5007 阅读 · 1 评论 -
SpringBoot + MyBatisPlus多数据源配置
背景一季度的时候,要搞数据迁移,大家基本都用datax迁移。但是我这边业务太复杂了,纯SQL不太能支持,就选择用代码程序迁移。因为旧的数据在不同的库,就产生了要从多个数据源读数据,然后写入到2个新的数据库。之前工程的配置都是只有一个库,我就开始踩坑了。因为是两个同学一起开发的,另一个同学选择了mybatis的dynamic-datasource中间件,但是实践下来发现,无法做事务处理。然后就采用了我的方式,自己手动配置数据源。数据源配置主要依赖 <!--连接池-->原创 2020-07-18 12:06:26 · 1271 阅读 · 1 评论 -
Redis实现分布式锁
背景之前遇到了一个情况,接口重复提交,出现了脏数据。如何避免这个情况呢?方案一是前端请求写数据的接口后,将按钮置灰,短时间内不可点击,但是这样也没办法从根本上解决问题。方案二是后端对接口加个锁,对请求的重要参数加一个唯一标识,锁未被释放之前,重复提交获取不到锁,也就不会有脏数据了。实现逻辑加锁:其实就是key-value放到redis中,key是业务唯一键,value存储UUID或者什么也是唯一标记的东西 释放锁:将key-value从Redis中删除。为啥需要value存储UUID呢,作原创 2020-07-12 23:28:52 · 375 阅读 · 0 评论 -
《Spring+MYBatis企业应用实战》读书笔记【END】
第1章 JavaEE应用DAO组件耦合层次 第2章 Spring MVC简介软件开发成本考虑web应用都是基于请求/响应模式的Spring优势控制器约定优于配置第3章 SpringMVC常用注解@RequestHeader第4章 【略】Spring MVC标签库第5章 【略】Spring MVC国际化第6章 数据转换、格式化、数据校验自定义类型转化:实现Converter<SourceType, TargetType.原创 2020-04-05 21:41:49 · 252 阅读 · 0 评论 -
SpringBoot Druid Mysql数据库连接配置详记
SpringBoot Druid Mysql数据库连接配置详记背景配置(持续更新)配置说明官方文档背景最近程序在服务器上运行,总是出现数据库连接断开的问题,常见异常如下,所以专门来规范一下配置。2020-03-31 18:08:03.253 ERROR [DruidPooledStatement.java:357] CommunicationsException, druid version...原创 2020-04-04 11:40:20 · 2613 阅读 · 0 评论 -
SpringCloud之试探踩坑
一、背景一直RPC调用都是使用dubbo接口,近来微服务比较火?开始使用SpringCloud的接口,使用@FeignClient的调用方式。二、理论注册中心Eureka,用于服务注册和发现。接口调用的实质就是restful接口,通过spring内部封装的HttpClient方式请求调用。 数据传递使用json格式,所以提供方和调用方的实体参数只要保证字段名称和类型相同即可。 ...原创 2019-03-07 16:45:23 · 276 阅读 · 0 评论 -
SpringAOP 面向切面编程
一、概念AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应...原创 2018-03-30 22:42:01 · 217 阅读 · 0 评论 -
Spring 中的 NoSuchBeanDefinitionException
概述org.springframework.beans.factory.NoSuchBeanDefinitionException 是很常见的异常,可以说绝大多数使用过 Spring 的人都曾遇到过它。本文旨在总结下NoSuchBeanDefinitionException(以下简称 NSBDE)的含义,哪些情况下可能抛出 NSBDE,和如何解决(文中配置均用 JavaConfig)。什么...转载 2019-01-02 11:08:08 · 710 阅读 · 0 评论 -
【踩坑记录】SpringBoot整合Mybatis常见问题
问题一:Mapper类 autowired失败原因:扫描mapper包没有配置或配置不正确解决:方案一:1. 启动类加@MapperScan("mapperPackagePath")方案二:增加配置类:package com.yx.readingwebsite.config;import org.mybatis.spring.mapper.MapperScann...原创 2019-01-08 10:27:38 · 620 阅读 · 0 评论 -
SpringBoot 单元测试
单元测试主要是在测试类上使用以下两个注解@RunWith(SpringRunner.class)@SpringBootTest更好的方法是,抽象一个BaseTest基类,其他测试类只要继承该父类即可。package com.yx.readingwebsite;import org.junit.runner.RunWith;import org.springframework...原创 2019-01-08 10:44:29 · 205 阅读 · 0 评论 -
创建Maven多模块工程
背景:进入公司以后,发现人家的MVC模型的使用都是划分到项目模块的,仰望高端操作。作为一只刚冲出学校的小萌新(原创 2019-01-09 16:52:09 · 209 阅读 · 4 评论 -
SpringIOC 控制反转
一、相关概念IOC: Inversion of Control(控制反转)是一种设计思想,就是容器控制应用程序所需要外部资源的创建和管理,然后将其反转给应用程序。反转是指获得依赖对象的方式反转了,由spring来负责控制对象的生命周期和对象间的关系。IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)...原创 2018-03-30 22:29:21 · 241 阅读 · 0 评论