SpringBoot分布式开发系列文章已经持续了一段时间了,每一篇都有核心内容讲给大家。比如:分环境部署配置及服务端口号统一配置,子模块版本号管理及第三方jar依赖管理,单点登录实现,接口安全(签名+令牌)及过滤器配置拦截,全局异常处理及日志打印、防SQL注入等。现在项目里只需添加你的业务代码,就可用于生产环境,同时项目源码也已共享到github。

但大家有没有发现,我讲了这么多,实际这个项目里还缺少一个最基本的服务功能。这也是我今天要给大家讲的内容了。那到底是什么呢?

文件系统,对每个项目来说几乎都必不可少。记着在N年前做传统项目时,文件起初是直接存储的项目里面的,后来慢慢通过配置运行项目的Tomact把文件从项目中分离了出去,存储到项目所在机器的磁盘上。不管怎么,这种存储完全受制于Web容器,肯定是不能使用于分布式环境。那么,我现在主要说说分布式文件系统FastDFS的的实现。

FastDFS服务搭建实现

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。它充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

FastDfs文件系统原理及搭建我不再过多的去介绍,我之前已有过一篇文章,里面有详细演示FastDFS文件服务系统的搭建,大家可以阅读参考:FastDFS文件服务器原理及搭建。现在我们直接进入项目,编写代码演示分布式文件系统FastDFS在项目里实现的文件上传下载。

首先在父级项目的pom里添加fastDFS的依赖。

版本号:1.26.2

再在公共模块lyn-common的pom里添加依赖

然后写FastDFS的文件上传服务Service接口。

Service接口实现:

在接口层(lyn-web)的properties配置里添加配置信息:

接口层的启动类里添加注解。

这里对过滤器有专门针对上传文件接口做了验证token处理。并在Aop里不对上传接口进行切面处理。

此刻,所有配置已完成,我们启动项目测试。

查看上传的图片:

存储文件路径处理

分布式文件服务已经实现,接下来你就可以上传文件实现你的业务代码了。那么文件的路径在数据库怎么存储呢?实际这个有经验的开发者基本都知道,文件路径存入数据库时要去掉域名,在接口查询出来又需要补全域名。为什么这样做呢?在我们的生产环境,一般文件肯定是带域名访问,比如我配的是http域名,但使用小程序后,分享时图片无法使用(不支持http域名下载),必须要用https才可正常使用,那我是不是得改文件访问域名呢。如果你把带域名的文件路径存到了数据库,那么是不是查出来的路劲无法访问了。所以,存储时去域名查询加域名这看似麻烦的操作,但在实际项目中更有利于日过的扩展和维护。编写的文件工具类:

添加数据时,去文件域名

查询时补全域名

今天讲了分布式文件系统的搭建及应用,希望能帮到那些正在准备开发或正在开发的小伙伴们。

获取项目源代码,请扫码关注公众号,并发送Springboot获取。

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现的更多相关文章

  1. SpringBoot微服务电商项目开发实战 --- 模块版本号统一管理及Redis集成实现

    上一篇文章总结了基于SpringBoot实现分布式微服务下的统一配置.分环境部署配置.以及服务端模块的分离(每一个提供者就是一个独立的微服务).微服务落地.Dubbo整合及提供者.消费者的配置实现.本 ...

  2. SpringBoot微服务电商项目开发实战 --- api接口安全算法、AOP切面及防SQL注入实现

    上一篇主要讲了整个项目的子模块及第三方依赖的版本号统一管理维护,数据库对接及缓存(Redis)接入,今天我来说说过滤器配置及拦截设置.接口安全处理.AOP切面实现等.作为电商项目,不仅要求考虑高并发带 ...

  3. SpringBoot微服务电商项目开发实战 --- Redis缓存雪崩、缓存穿透、缓存击穿防范

    最近已经推出了好几篇SpringBoot+Dubbo+Redis+Kafka实现电商的文章,今天再次回到分布式微服务项目中来,在开始写今天的系列五文章之前,我先回顾下前面的内容. 系列(一):主要说了 ...

  4. Spring Boot微服务电商项目开发实战 --- 分布式开发要避的那些坑

    今天已经进入第七讲了,整个微服务架构的搭建工作也基本完成.那到目前为止究竟使用了那些技术及实现了什么功能呢?我们先回顾一下. 使用的技术:SpringBoot.Dubbo.Zookeeper.Redi ...

  5. SpringBoot微服务电商项目开发实战 --- 全局异常处理

    上一篇文章讲了Redis缓存的安全防范及Kafka的接入及消息实现,今天接着前面的内容基础说说项目的优化和基础配置,今天要讲的内容主要是Spring Boot项目中的全局异常处理.为什么要做这件事呢? ...

  6. SpringBoot微服务电商项目开发实战 --- Kafka集成接入

    kafka作为消息中间件的一款产品,她比较轻量级,在吞吐量方面很优秀,默认消息持久化到硬盘当中 168小时=7天,log.retention.hours=168,比较适合来做运营的统计.其他的不多讲, ...

  7. Spring Boot微服务电商项目开发实战 --- 基础配置及搭建

    根据SpringBoot实现分布式微服务项目近两年的开发经验,今天决定开始做SpringBoot实现分布式微服务项目的系列文章,帮助其他正在使用或计划使用SringBoot开发的小伙伴们.本次系列文章 ...

  8. Spring Boot微服务电商项目开发实战 --- 多环境部署配置、端口号统一配置及Dubbo提供者消费者实现

    昨天已经搭建好了SpringBoot基于Maven的基础父子级项目,今天开始进入项目分模块及分布式实现.首先我们基于昨天的项目,在父级工程下建lyn-sys,lyn-customer,lyn-good ...

  9. Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构

    Java 开发环境:idea https://www.jianshu.com/p/7a824fea1ce7 从无到有构建大型电商微服务架构三个阶段SpringBoot+SpringCloud+Solr ...

随机推荐

  1. vue 学习 渲染、v-指令

    vue渲染 在组件中data是一个方法里面的值要是一个对象return出去 export default { name: "HelloWorld", data() { return ...

  2. nginx支持https配置

    nginx证书 nginx.conf配置.

  3. CBO优化器实用理解

    对于CBO的理解: RBO-----基于规则的优化器 CBO-----基于代价的优化器 CBO计算执行计划的代价(cost),并从中选择cost最低的执行方案,它依赖数据库对象的统计信息,统计信息的及 ...

  4. ubuntu 1806 添加 kali 源

    最近需要使用 kali 源安装一些软件: 配置 sources.list,根据如下链接:http://mirrors.ustc.edu.cn/help/kali.html 获取 公钥:apt-key ...

  5. 【C/C++】之C语言库函数

    这个帖子记录一下 C语言 中经常用到的函数库中的函数及其用法. 1.<math.h> math.h是进行数学操作的函数库.使用这个函数库,需要先导入包: #include <math ...

  6. IDEA IntelliJ/ DataGrip 修改自动补全快捷键

    系统默认的是Tab键,个人喜欢用空格键作为自动补全键,设置方法如下 Setting-->Keymap-->Editor Actions:Choose Lookup Item Replace ...

  7. input 输入框 只能输入数字、字母、汉字等

    1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...

  8. WebGL简易教程——目录

    目录 1. 绪论 2. 目录 3. 资源 1. 绪论 最近研究WebGL,看了<WebGL编程指南>这本书,结合自己的专业知识写的一系列教程.之前在看OpenGL/WebGL的时候总是感觉 ...

  9. jeecg培训第一课(代码生成与权限分配)

    问题描述:进口部要完成一票进口报关单的增删改查,操作员张三登录只能增删改张三的报关单,操作员李四登录只能增删改李四的报关单, 部门主管王五登录能查看张三和李四的报关单,但不能修改删除.操作员能提交报关 ...

  10. wait notify notifyAll await signal signalAll 的理解及示例

    从常见的一道面试题开始,题目的描述是这样子的: 有三个线程分别打印A.B.C,请用多线程编程实现,在屏幕上循环打印10次ABCABC- 网上大都教了你怎么去实现,其实我也写过一篇 https://bl ...