您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > SpringMVC+Nutz框架介绍
SpringMVC+Nutz自主框架介绍一、框架概况基于经典技术组合(SpringMVC、ApacheShiro、BootstrapUI)开发的企业级分布式基础开发平台,实现企业开发常用功能:组织机构、角色用户、权限授权、数据权限、内容管理、微信管理等。使用的后台技术包括Spring、SpringMVC、SpringCache、Nutz、Shiro、Jedis、Dubbo、RabbitMQ、Quartz、Elasticsearch、FastDFS、Ehcache、Beetl、Log4j等,前端技术包括Jquery、Bootstrap、Pjax等。模块化可自由拆分(分布式可选择Dubbo/RSF实现)集成Shiro权限框架(支持二级缓存,通过Redis实现支持session同步)集成Ehcache缓存(Shiro一级缓存)集成Jedis(redis的java实现,支持Redis集群模式和单机模式切换)集成Email服务(可选择启用)集成Quartz定时任务(支持集群部署)集成Beetl模板引擎(功能强大便捷)支持语言国际化(直接写汉字不需要Unicode转换,一种语言一个文件夹)支持方法日志记录(@SLog注解自动记录日志)支持文件输出(@SFile注解自动输出文件,比如输出PDF格式)支持json输出(@SJson注解自动输出json字符串)支持自定义路由(显性转发或隐性转发)支持APIToken及应用管理(Jwt实现token机制)后台管理界面采用Pjax+Bootstrap系统模块(单位、角色、用户、菜单等完整的权限体系)CMS模块(简易的内容管理功能)微信模块(支持多公众号、微信支付等功能)二、与xx框架对比分析1、Dao1)使用NutDao,简化数据库增删改查操作,天然的过滤非法字符,防止sql注入;2)兼容各类型数据库,只需对自定义SQL部分进行兼容性改造即可快速部署在MySQL、Oracle/达梦、MSSQL等各类数据库上;3)可通过实体类生成各类数据库的表结构、索引、序列或触发器等,支持动态分表,建立空白数据库启动项目时自动初始化表结构和数据;4)支持多数据源,并兼容hibernate、mybatis等其他第三方ORM框架;2、Service1)SpringCache方法缓存,对方法执行结果进行缓存,而非每条表数据,因为大部分业务是不需要用缓存的,比如后台的增删改查管理;以前项目中经常出现因为缓存嵌套的问题加上缓存更新不了造成的数据不一致问题;使用redis实现,支持自定义cachekey、cachename、可通过通配符清空部分缓存、可设置缓存失效时间等,并支持redis缓存的集群部署模式;2)增删改方法中手动添加事务注解,而非全局事务,在某些查询数据环节减少没必要事务操作,之前项目中出现因为事务回写,造成前台异常数据入库的情况;3、Controller1)@SJson注解,统一将执行结果转换为json字符串输出,统一的Result类,支持Vue等MVVM框架及前后端分离开发模式;此注解支持Jsonp格式输出;2)@SFile注解,方便的输出图片、文件、字节流等文件类型,通过@SFile(“pdf”)直接输出PDF文件;3)@Slog注解,统一且可扩展的日志体系,可根据需要记录时间、操作人、请求路径、输入参数、输出结果等,可将结果记录在数据库、mongodb或文件中;4)封装datatablesjs组件,后台分页查询使用起来非常简便,之前项目后台用到的分页组件及代码封装都做的非常固化且容错率低,做个高级查询开发一不小心就出错;4、权限体系1)基于shiro权限框架的深度改造,一级缓存使用ehcache实现性能更优,二级缓存使用redis实现持久化、session同步等功能;2)将菜单和数据权限有机的组合到一起,使权限分配操作更方便、开发更简便,通过shiro权限判断注解可实现按钮级、方法级权限控制;3)平台、商家、会员,三套独立的shiro验证体系,使平台权限可对管理员等后台人员进行无限级权限下放和管理,使商家可对店铺子帐号进行菜单和权限的无限级下放和管理,使会员中心也可做到按钮级权限控制;5、国际化语言1)深度改造SpringMVC国际化语言实现方式,实现一种语言一个文件夹,方便扩展更多语言;2)语言配置文件支持直接写汉字,不需要再做转换,开发便捷;6、配置文件1)PropertiesProxy类,可通过key获取任意一个properties配置文件的value,可通过其封装方法直接得到int、string等类型数据并支持默认值设置;2)同时系统后台提供“系统参数”管理,这些配置数据存储在数据库中,在项目启动时会加载的全局变量里(支持集群部署);7、文件池1)在一些业务场景中(如奇瑞人脸识别),需要下载图片存放到本地,这些文件不需要永久存储,处理过后需要删除,这个时候就是文件池的用武之地了,框架集成文件池功能,并可配置文件池的大小;8、FastDFS的集成1)FastDFS不需要单独安装个mysql,且性能优异;2)框架支持普通文件上传文件方式和FastDFS文件服务器上传方式的自由切换,看项目实际需要;9、Redis的集成1)RedisService一个封装好的服务类可调用redis所有功能;2)SpringCache、Shiro二级缓存、RedisService使用同一个JedisAgent来实现,当然也就都支持redis的单机模式或集群模式了;3)通过Redis的发布/订阅,框架集成实现了Websocket功能(虽然目前还没有项目用到);10、RabbitMq的集成1)系统参数、自定义路由、微信token,这些需要在Tomcat集群部署环境下保持一致的数据,是通过rabbitmq的FanoutExchange实现的;2)商品下订单、商品数据同步ES,这些功能是通过rabbitmq的TopicExchange实现的;11、Beetl的集成1)Beetl的语法简单、容易上手、功能强大,简化了html开发的复杂度和时间,解放了生产力;2)在网站群项目中,Beetl自定义标签功能,可以用于编辑前台模板文件,来实现全静态页面的生成功能;12、开发效率提升1)代码生成器IDEA可视化插件,一键生成增删改查代码及多语言文件,可通过勾选选择要生成的内容;IDEA可视化插件和代码生成类是相对独立的两个项目,通过开发可以提供Eclispe可视化插件;2)调试工具在Debug模式下,可输出每个url执行耗时,方便性能调优;Logs工具类,使错误定位准确(以前项目报错很难找到什么地方报的错,现在一目了然),结合log4g可按日期或循环覆盖方式保存日志文件;3)工具类Strings类,集成众多常用的非空判断、是否手机号码、是否身份证、左右补位、空值转换等公共方法;Json类,可方便的将对象转为json字符串,或反向通过json转换为对象或集合,解析json非常方便;Lang类,常用的对象转map、map转对象、md5加密、sha1加密等;Http类,简易强大的网络请求工具,可方便的对接第三方API、实现网络爬虫等,可替换笨重繁杂的httpclient,在比价系统等项目有大量应用,极大的提高开发效率,这个丁传斌做face++接口的时候应该深有体会,繁杂的代码几行就搞定;Xmls解析类,对接微信支付接口或第三方通过xml包装数据的场合,通过此工具类可快捷的对数据进行解析、转换;其他;三、与xx电商平台对比分析功能上:1、商品规格汲取友商产品的经验,在商品分类、商品类型、商品规格等处做了优化改造,可以定义商品规格库,对不同类型的商品分配使用不同的规格;2、价格中心可对销售终端(PC/WAP/TV)、销售区域、销售对象、会员等级等分别设置销售价格;3、微信模块提供微信会员列表、自动回复、模板消息、群发消息等各类微信管理功能,同时通过微信支付API及JSAPI等功能;4、营销模块支持按销售终端、销售区域、销售对象、会员等级、满足的条件规则,分别设置销售策略,如满赠、满减、满包邮、满送优惠券等等;5、订单模块支持拆单、并单等,支持上传付款凭证、货到付款等;6、运费模板可配置按件数、按体积、按重量、按区域、按商品分类、按物流公司配置运费规则;7、系统管理模块单位、用户、角色、菜单及权限,分级分配缓存加载;性能上:1、订单系统将订单数据放入队列,有队列消费者进行订单处理,提升下订单流程;通过Redis主键生成器生成订单号,解决高并发及集群部署环境下订单号唯一性问题;2、商品数据同步ES商品增删改操作,会通知消息队列,由队列消费者进行ES数据同步,提高数据同步的实时性;附件:一、使用国产开源技术的优势1、学习成本低由于语言因素及目前互联网外网访问越来越难,国外技术学习成本越来越高,且“无人问,无人答”。使用国产开源技术,可以加QQ群、作者QQ、社区网站,可以用中文交流,甚至自己都可以贡献代码。比如beetl、fastdfs、t-io、nutz、node-wechat、thinkjs等,我都加了作者的QQ或群,直接和作者交流问题,他们回答都非常及时,少走了很多弯路。2、轻巧开发效率高由于思维方式的不同,国外的技术或框架很笨重,比如springmvc要实现某个功能需要引用一大堆其他的东西,自身对参数解析等支持方面思维较为落后(可能与出现的早有关)接收特殊格式参数等需要自己改造,连spring自己都出了个轻巧的springboot。国内开源项目多设计巧妙、灵活、简便,很多实现不会绕弯子,比如nutz一个框架解决几乎所有MVC问题,比如t-io解析socket数据包比netty方便的多,比如fastdfs不需要额外的安装维护mysql,比如大名鼎鼎的Druid一个框架解决几乎所有数据库连接问题,这就是中国人的思维,力求简单而强大的“聪明”思想。还有dubbo等等。3、稳定和迭代没有没有bug的技术,windows、linux、springmvc等等都会时不时的暴出bug,关键在于修复bug的速度。例如框架里经常用到的nutz,从2012年开始就使用了,至今5个年头,老公司一直用它进行开发。若发现bug可方便的联系作者,提交issue,修复非常快,同时合理的需求也可以提出来,及时得到支持。4、发展国产开源技术会越来越多,好的框架和技术必定会越来越多、越来越强大,这是量变到质变的过程,有网络因素、安全因素等等方面。二、长远计划一个好的开发框架,不是一成不变的,应该是紧跟时代的,特别是技术日新月异的今天。它应该具有学习成本低、开发效率高、性能优异、可动态扩展等等特性。如果有充足的时间,我希望尝试一下如下几个方面进行新框架的架构:1、完全基于nutz的全热插拔框架,nutz.cn网站就是使用这个技术,但它是单网站,要实现分布式等更高技术指标要求,需要改造完善;2、Springboot+Springcloud+Nutz----RestfulAPI----VUE后台微服务框架+前台VUE,完全的前后端分离的开发框架,最终做到后台人员只用开发接口,前端人员只要做数据展示及效果;只要时间充分,一切皆有可能。
本文标题:SpringMVC+Nutz框架介绍
链接地址:https://www.777doc.com/doc-5662657 .html