系统架构
文章平均质量分 87
爱码少年 00fly.online
三无青年、理工男,追求代码可运行,理论可验证的穷编码猿!
展开
-
springcloud微服务牛刀小试开篇:示例概述
尽管Spring Cloud带有“Cloud”的字样,但它并不是云计算解决方案,而是在Spring Boot基础上构建的,用于快速构建分布式系统的通用模式的工具集。使用Spring Cloud开发的应用程序非常适合在Docker或者PaaS(例如Cloud Foundry)上部署,所以又叫做云原生应用(Cloud Native Application)。下面以一个简单示例来介绍如何搭建一套微服务系统。原创 2024-05-16 17:59:47 · 758 阅读 · 0 评论 -
基于缓存注解的时间戳令牌防重复提交设计
API接口由于需要供第三方服务调用,所以必须暴露到外网,并提供了具体请求地址和请求参数。为了防止重放攻击必须要保证请求仅一次有效比较成熟的做法有批量颁发时间戳令牌,每次请求消费一个令牌。/*** @version [版本号, 2019年12月18日]* @see [相关类/方法]* @since [产品/模块版本]原创 2024-04-30 12:03:24 · 2345 阅读 · 0 评论 -
基于自定义注解、切面实现的WebApi接口
某自研系统,已有完善的业务接口,现在需要开放一部分web接口做对外服务,需要加入鉴权、防重放、限流、防篡改等功能,请给出一个合理的设计方案。OpenApi/*** 开放API注解/*** 检查项/*** 开放API注解/*** 检查项/*** 开放API注解/*** 检查项Documented;/*** 开放API注解/*** 检查项/*** 开放API注解/*** 检查项/**原创 2024-04-27 11:49:08 · 1880 阅读 · 0 评论 -
springboot实现SSE之牛刀小试
SSE 全称Server Sent Event,直译一下就是服务器发送事件。其最大的特点,可以简单概况为两个:长连接,服务端可以向客户端推送信息。原创 2024-04-21 13:33:11 · 2338 阅读 · 0 评论 -
借助ThreadPoolExecutor、Future实现线程池带返回值异步任务结果获取
Future是java 1.5引入的一个interface,他代表的是异步执行的结果,意思是当异步执行结束之后,返回的结果将会保存在Future中。ExecutorService 是线程池的接口,执行时需要接受一个Callable参数,Callable需要实现一个call方法,并返回结果。原创 2024-04-11 17:47:41 · 2799 阅读 · 0 评论 -
Springboot工程依赖包与执行包分离打包与构建docker 镜像
某大数据项目,使用springboot常规打包方式,打出来的一体化执行包达几百兆, 分析jar 结构,其中的依赖包达几百个,占据99%以上的体积。考虑到在迭代开发小版本升级发布期间,依赖包几乎不会发生变化。迫切需要将依赖包和执行包分离,部署时在依赖包不变的情况下只更新执行包,可提升发布效率。下面我们以工程为例来说明操作过程。原创 2024-03-29 23:11:43 · 3597 阅读 · 0 评论 -
SpringBoot工程web模式与非web模式和谐共处运行
Spring Boot 是 Pivotal 团队在 Spring 的基础上提供的一套全新的开源框架,其目的是为了简化 Spring 应用的搭建和开发过程。Spring Boot 去除了大量的 XML 配置文件,简化了复杂的依赖管理。Spring Boot 具有 Spring 一切优秀特性,Spring 能做的事,Spring Boot 都可以做,而且使用更加简单,功能更加丰富,性能更加稳定而健壮。随着近些年来微服务技术的流行,Spring Boot 也成了时下炙手可热的技术。原创 2024-01-31 20:38:43 · 6213 阅读 · 0 评论 -
springboot配置项动态刷新
springboot 配置文件一般以yaml方式保存,除了系统配置项如spring、server等外,还有我们自定义的配置项,方便系统启动时自动注入。自定义的配置项一般是动态配置项,在系统运行过程中,可能需要在线修改,来实现自定义的配置项不停服更新,也就是类似于spring-cloud-starter-config的动态刷新。由于系统不重启,无法通过自动注入的方式自动更新自定义配置, 这儿便需要我们手动加载yaml文件,转换为java对象,将变化赋值到spring管理的对象中采用最常见的snakeyaml、原创 2024-01-21 14:05:57 · 8130 阅读 · 1 评论 -
Spring Web工程最快转Spring Boot工程方法
删除web.xml导入springboot pom.xml添加springboot 启动代码(举例)import java.io.IOException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.CommandLineRunner;import ...原创 2018-10-11 09:04:50 · 15651 阅读 · 0 评论 -
【求教】老菜鸟遇到新问题,双bug欢迎有緣人答疑
俗话说:但行好事,莫问前程,心之所向,无问西东编程亦然,coding多了,就会遇到各种各样奇怪的问题,真是让人欢喜让人忧啊!这不,小C最近实现了一个使用mysql数据库来保存日志的功能,不幸的是,遇到两个难解的问题,现拿出来,希望各位见多识广的大佬能帮忙分析,小可不胜感激!原创 2023-10-26 17:25:12 · 15242 阅读 · 0 评论 -
SpringMVC工程之非web部分代码复用,并独立运行
springMVC是位于spring web端的一个框架,是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦。下面我们以如何复用此SpringMVC工程的非web部分代码,并脱离web环境使之独立运行。原创 2023-09-16 23:06:39 · 15248 阅读 · 0 评论 -
log4j2 日志保存至数据库
Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。是目前最优秀的Java日志框架,没有之一。官方Appenders提供了日志的多种输出方式实现。下面我们以 JDBCAppender 为例来说明如何在项目中实现系统日志保存到数据库。/*** 日志数据库数据源* @version [版本号, 2023年3月27日]* @see [相关类/方法]原创 2023-09-16 15:02:40 · 16251 阅读 · 0 评论 -
分布式锁实现二. memcached分布式锁
add和set的区别在于:如果多线程并发set,则每个set都会成功,但最后存储的值以最后的set的线程为准。而add的话则相反,add会添加第一个到达的值,并返回true,后续的添加则都会返回false。(1)memcached采用列入LRU置换策略,所以如果内存不够,可能导致缓存中的锁信息丢失。为方便起见,已经将memcached服务器端程序上传到下面的目录,使用时只需要双击运行就好!memcached带有add函数,利用add函数的特性即可实现分布式锁。利用该点即可很轻松地实现分布式锁。原创 2023-09-02 17:40:14 · 15403 阅读 · 0 评论 -
分布式锁实现一. 利用Mysql数据库update锁
分布式锁,即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资源访问的问题,而分布式锁,就是解决了分布式系统中控制共享资源访问的问题。与单体应用不同的是,分布式系统中竞争共享资源的最小粒度从线程升级成了进程。原创 2023-08-31 22:56:25 · 15313 阅读 · 0 评论