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. 2019-10-31:渗透测试,基础学习,mongodb注入学习

    mongodb命令删除文档,db.集合名.remove({键:值})更新文档,db.集合名.update({被更新的对象},{$set:{要更新的内容}}),默认只更新检测到的第一条文档更新全部匹配到 ...

  2. scrapy自动抓取蛋壳公寓最新房源信息并存入sql数据库

    利用scrapy抓取蛋壳公寓上的房源信息,以北京市为例,目标url:https://www.dankegongyu.com/room/bj 思路分析 每次更新最新消息,都是在第一页上显示,因此考虑隔一 ...

  3. scrapy项目部署

    什么是scrapyd Scrapyd是部署和运行Scrapy.spider的应用程序.它使您能够使用JSON API部署(上传)您的项目并控制其spider. 特点: 可以避免爬虫源码被看到. 有版本 ...

  4. 【Android - 自定义View】之View的位置参数

    View是Android中所有控件的基类,不管是简单的Button和TextView,还是复杂的RelativeLayout和ListView,其基类都是View类:ViewGroup也继承了View ...

  5. springmvc运行流程简单解释(源码解析,文末附自己画的流程图)

    首先看一下DispatcherServlet结构: 观察HandlerExecutionChain对象的创建与赋值,这个方法用来表示执行这个方法的整条链. 进入getHandler方法: 此时的变量h ...

  6. iOS10 openURL方法跳转到设置界面

    问题 在iOS10之前,跳转到系统设置界面的某个指定界面的方式如下: //打开定位服务界面 NSURL*url=[NSURL URLWithString:@"prefs:root=Priva ...

  7. HDU3032 Nim or not Nim?(Lasker’s Nim游戏)

    Nim or not Nim? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  8. 通过Centreon监控apache、MySQL、Hadoop服务状态

    在上面的章节中,只是简单介绍了Centreon的几个基础监控项,例如添加主机.服务等,这些对于一个监控系统来说是远远不够的,本节将重点介绍对一些扩展服务的监控,也就是对一些常见应用的监控. 一. Na ...

  9. 探究 Nginx 中 reload 流程的真相

    今天这篇文章主要来介绍下 Nginx 的 reload 流程.实际上在之前文章中,在更改了 nginx 配置文件时,我们都会执行 nginx -s reload 命令,我们执行这条命令的原因是希望 n ...

  10. 层叠机制和继承的概念以及CSS中选择器的优先级

    层叠机制: 一个元素的某个特定的样式属性可能来自行间的style属性.内联样式表或者外部引入的样式表,以及浏览器自定义的样式,还有就是继承自父元素的样式,但是最终只会选择其中的某一个来表示,这个选择的 ...