HRM人力资源管理平台项目分享

HRM人力资源管理平台项目分享

首先该项目我们是采用Git分布式版本控制工具,编写代码,提交代码(git add)(git commit),先执行git add,将变化的内容加入到版本控制,再执行git commit,进行代码的提交,再然后git push,git pull推送和拉取。仓库我们选择用的Gitee代码仓库。作为开发人员,我们其实只关心仓库地址和账号密码,仓库也可以选择GitLab(实际开发中用的较多)。

该项目是一个人力资源管理系统,主要为提让找工作的人,能够选择特定机构的课程学习,并参与平台发布的招聘,而且还能参与一些活动。让招聘单位入驻进来发布岗位进行招聘,甚至委托培训机构培训合适的人才。对于培训机构可以发布课程,吸收学员来完成学习并通过收取学费获取商业价值。项目采用前后端分离技术开发实现。前端使用Vue技术栈,后端使用SpringBoot搭建单个服务,SpringCloud治理服务。

后端中Eureka注册中心,用于服务的发现与注册,Feign用于服务间的负载均衡调用,Hystrix断路器,保证微服务的健壮,防止雪崩,Zuu网关,微服务的统一入口,Config配置中心,将配置文件统一管理。在项目中我们使用Mybatisplus代码生成器,Mybatisplus对Mybatis做了增强,不做修改,使用更加方便。

项目中我们使用了分布式文件系统,为什么要使用?因为集群和分布式环境下必须使用分布式文件系统统一管理项目中的文件,方案选择可以选择别人搭建好的(阿里云),也可以选择自己搭建(hdfs、fastdfs)。hdfs一般用于大数据,fastdfs一般用于中小型项目,数据量不是特别大,我们选择的是fastdfs。其中fastdfs架构中有Tracker,是负责调度和负载均衡的,Storager是存储文件的地方,Storager分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。

使用fastdfs实现文件上传的流程:当客户端发送上传请求的时候 请求先连接storager 然后由storager去查询可以调用的storager,然后把storager的信息(ip和端口)返回给客户端,当客户端收到端口后,直接上传文件到ip和端口对应的storager 并且storager 在保存文件之后会生成一个file_id,然后传给客户端,然后客户端把file_id存储到数据库,以后可以通过file_id直接获取文件。 

在课程类型管理类型树种,为了获取无线级别的课程类型,我们采用了循环+map,首先查询所有的类型放入List中,再将List中的所有类型放入Map中,Map的key为类型的ID,Map的value为当前类型对象。对List中所有类型进行遍历,如果是一级类型,则放入结果的List集合中,如果不是一级类型,则到Map中根据类型ID找到对应的父类型,将当前类型添加到父类型的children集合中。

由于使用课程类型的地方非常多,并发非常高,所以我们对课程类型做了优化,优化方案选择:后台管理采用缓存。用内存查询替换数据库磁盘查询,经常查询,很少修改。前台课程主页采用页面静态化,以不发请求静态页面代替要发请求静态页面或者动态页面.没有对后台数据获取,这样每次访问的是html静态页面,不能访问数据,只要数据发生改变,就要重新生成新的静态页面替换原来的静态页面。页面基本不会变,除了数据。缓存方案的选择是redis中央缓存,流程是:发送请求时,先到redis缓存中查询,如果redis查询不到,再查询数据库,并且缓存到redis中,然后返回数据,下次查询时候直接从缓存中返回数据而不用查询数据库了。

在使用redis时遇到一些问题,缓存穿透,就是访问数据库中不存在的数据,如果并发量很高,则直接穿透了redis缓存,大量数据直接访问数据库,会造成数据库宕机。解决方案就是使用布隆过滤器,或者如果数据不存在,就设立一个空值到redis中,并且设置过期时间。还有就是缓存击穿,热点数据失效的同时大量请求访问,就造成了击穿,解决方案是使用同步代码块+双重校验锁的形式进行数据库的查询。还有就是缓存雪崩,就是同一时间,大量缓存失效,解决方案是均匀分配过期时间。

项目中我们使用全文检索服务器elasticsearch ,让上线的课程全部保存到es中,前台搜索的上线课程只能从es中搜索,后台用户更改了课程信息后,将信息同步到es中,如果后台用户对课程执行下线操作,就从es中删除该课程。在项目中我们采用RabbitMQ作为消息队列,这个是新项目常用的,为什么的使用呢,主要是为了提高系统的响应速度,提高系统稳定行,服务的解耦,队列保证先进先出,流量的削峰。

在项目中我们也遇到这个问题,不管是课程类型还是前台首页展示的商品,都是数据库中的数据,不用的用户登录进来展示的内容是一样的,而且这些内容是不经常变更的,如果全部都访问数据库,在高并发场景下必然会导致数据库宕机,我们是怎么解决的呢?如果使用缓存redis,可以解决问题,但是缓存服务器如果并发量比较高,也会出现问题,我们选择了使用页面静态化,使用不发送请求的页面代替要发送请求的页面,这样减轻了服务器的压力,加快了页面加载的速度,增强了用户的体验。首先我们要增删改课程类型的时候,课程服务会调用页面静态化服务,去静态化一个页面,然后把这个页面上传到fastdfs里面去 并返回一个fileID 给课程服务,然后课程服务将fileID 发送到rabbitmq中,然后我们在前端服务器里部署一个java项目,然后这个java项目去监听rabbitmq中的队列,如果有消息,获取到了fileID ,就会从fastdfs下载文件,再将下载文件保存到同服务器的前端项目中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目中使用的技术: 1、前端:jsp、css、javascript、jQuery(js框架)、jquery.form.js、HTML富文本编辑器、        My97时间控件(添加员工)2、后台:Struts2、动态代理、Mybatis框架、log4J日志框架、jstl 、jstl自定义分页标签、代码机器人、Dwr、POI(实现Excel文件的导入导出)等3、数据库:Mysql4、服务器:Tomcat项目中涉及的功能: 1、项目以及数据库搭建2、用户异步登录、退出3、拦截器功能实现以及整合动态代理4、公告模块的增加、修改、删除、查询以及预览功能实现、文件异步上传5、文档模块的增加、修改、删除、查询以及文档的上传下载6、员工信息的增加、修改、删除、查询以及员工头像异步上传、员工信息导出至Excel文件7、自定义分页标签实现(24种样式随意切换)8、代码机器人使用等等其他实战项目:java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771 java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008 java项目hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007 JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543 JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572 JavaWeb项目实战之宿舍管理系统(Java毕业设计含源码)https://edu.csdn.net/course/detail/26721 JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610 java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770 java美妆商城项目|在线购书系统(java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989 系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941 Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值