A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2017-12-11 16:08 编辑

    我们在该项目中采用经典的java 三层架构
        1.controller层使用struts2  2.3.24版本
        2.dao层采用传统的ORM框架hibernate5.0.1版本 + springDataJPA 1.9.0版本
        3.spring框架 4.2.8版本,作为容器整合struts2和springDataJPA+hibernate 来搭建整个项目的骨架

        本次项目中,我们全程采用注解 + 配置文件的方式来搭建好整个项目的环境
        同时,我们使用分布式服务器,通过webservice技术作为纽带,来实现各个系统间的相互通信

        【数据库选型方面】
            我们采用大型关系型数据库ORACLE,来作为数据容器
        
        【版本控制方面】
            采用git + 码云 来实现版本的管理控制,而提到这里,不得不提到一个很容易忽略问题
                我们在使用git进行上传的时候 ,切记一定要'先拉后推',以免出现版本覆盖问题

        【项目结构方面】
            我们使用maven子父工程项目结构 + 阿里云仓库 + 本地仓库 的方式进行组建
                通过父工程进行jar包共享
                通过不同项目的相互依赖,来实现PO类共享

        【页面技术方面】
            [前端系统bos_fore]
                采用了现下流行的【bootstrap】响应式布局框架 + 【AngularJS】数据绑定技术,来实现页面与后台的数据交互  
               
                    
            [后台管理系统bos_management]
                我们采用【jqueryeasyui】框架,进行整体的页面布局和数据交互。在页面显示方面,采用动态生成 树形菜单,
                    【frameset】 将页面进行切割、分离,让整个界面整洁、灵活、独立更富有交互性。


                在解决线程排队出现系统性能降低的问题解决方案,我们使用了ActiveMQ技术,从一定程度上解决了并发的问题,在后续的内容中会提到

                在系统中一些技术点,还使用了【quartz】定时调度框架,比如:促销活动过时清除、定时刷新elasticsearch索引库,解决了部分问题

                提到这里,就不得不说一下,在该项目中,我们使用了非常流行的【elasticsearch】全文搜索技术,它的底层基于lucen实现。。。。。。
                    但是,它还是有一定的缺陷的,比如内置的分词器,就不得不吐槽一下,完全不能匹配智能化的高端大气上档次的身份象征,
                    因此,我们在项目中使用第三方分词器:IK分词器
                    为什么要使用到分词器呢,目的在于建立索引,搜索引擎的原理也是基于匹配相同的关键字或者模糊查询来实现目标定位的;(详情参考queyrbuilder的六大查询方法)
                        同时,内置API提供了整套的增删改查方法,而在我们的项目中,我们使用springdatajpa来整合了elasticsearch,通过注解来配置了
                        索引库的映射关系,通过配置文件来配置连接和依赖
        
        【单元测试方面】
            我们采用了spring整合Junit 对各个接口进行单元测试
                验证了调用接口能够获得到我们所需要的返回值,保证了每个模块的正常执行
                        

        【系统安全方面】
            我们使用shiro权限框架,
            通过粗粒度(基于过滤器)的URL访问控制 和细粒度 的方法级别控制
                通过粗粒度权限控制,限制了未登陆用户访问
                通过细粒度权限控制,限制了登陆成功的用户但没有相应权限访问服务器某些资源

           同时,通过查询用户属于哪种角色,根据该角色其下所具有的menu, 动态生成ztree,
                来实现不同角色属性的用户访问,展示不同的菜单。从视图上控制了用户的访问

           在该系统中,我们还添加了 管理员的权限定制,和角色定制,使系统更加安全、灵活

        【性能优化方面】
            [freemarker页面静态化技术]
                对于不经常发生数据变化的页面,我们通过 将模板template与动态数据相结合,
                    生成静态页面,大幅减少了客户端与数据库的交互频率。
                        而在更新静态页面,我们使用quartz,设定job和trigger定期更新这些静态页面

                    当然,对于敏感或者时时更新的数据,则没有使用到该技术;
           
            [ehcache 二级缓存技术]
                在该项目中,我们使用了spring内置支持的ehcache缓存技术,
                    同样也是解决了对未发生变化的数据进行重复访问数据库,当数据库中数据发生变化的同时,系统会根据注解@CacheEvict去清除缓存

            [ActiveMQ:消息队列]
                在一定程度上降低了高并发状态下前端服务器的压力。我们将该技术应用在网站访问量较大的功能上,
                    比如在用户注册,发送短信验证码,该功能与整个业务的关联上并不高,因此通过bos_fore系统产生消息,sms系统消费消息去发送短信
                    避免了线程等待的问题。

                存在的不足:
                    5.0.0-5.10.0版本在实现上存在XML外部实体注入漏洞,攻击者可利用此漏洞获取敏感信息或造成拒绝服务。
            
            [redis 缓存技术]
                通过架设redis服务器,来实现跨系统间的数据共享,同样的,在一定程度上降低了对数据库的访问,提升了我们程序的性能

1 个回复

倒序浏览
继续加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马