SpringBoot2搭建基础架构——开源软件诞生4
技术框架篇--第4篇
用日志记录“开源软件”的诞生
赤龙ERP开源地址:
点亮星标,感谢支持,加微信与开发者交流 kzca2000
准备工作
搭建基础框架前,一定要准备好开发环境。先安装软件(以我本地环境为例),包括:
- IDE(Eclipse最新版)
- JDK1.8
- Tomcat8.5
- MySQL8.0
- Redis最新版
- SVN、Git
安装流程不做详细说明。说几个需要注意的地方:
(1)Tomcat安装好后需要对server.xml做一些配置和优化(端口、应用、域名、NIO、线程池、SSL等)
(2)对JVM做必要的内存配置优化
(3)MySQL安装时注意编码UTF-8
(4)Redis需要配置密码和持久化(AOF)
框架的基本要求
搭建应用的底层框架,总是要或多或少的根据情景考虑一些问题,而不能是框架和技术的简单堆砌。那么搭建框架要满足哪些要求呢?
(1)安全性:由于是信息化管理系统,使用的用户是企业内部的职员和高管,那么对于安全性和权限的考虑就要提升一个层次了。比如:谁能访问哪些功能、谁能做哪些操作,谁能看到什么数据、又使用什么方式可以更便捷的实现各种安全性的考虑。
(2)降低信息流的复杂性:简单解释一下,ERP系统是一个很特殊的系统,因为它是企业中复杂管理流程、业务流程、财务流程的实现。所以它有着严密的逻辑与流程,系统中几乎没有独立的模块或功能,系统内部各部分互相依赖的复杂程度难以想象。如何降低这些依赖关系的复杂度,就是框架中迫不及待解决的问题。
(3)提高开发效率:信息化系统开发时的一大特点就是代码复用程度高,无论是重复的增删改查,还是表单处理,设置是各种报表,太多的重复工作会浪费太多的时间。开发人员应该把工作集中在逻辑和算法上面,而不是这些简单的复制粘贴修改上。
(4)灵活的可配置可扩展:信息化系统的另一个特色就是个性化需求非常高,即使对于一个简单的流程,也可能出现多样化的各种要求。这往往根据企业的管理情况而定。如何竭尽所能在减少客户化开发的前提下,满足更多的需求是我们要考虑的问题。
(5)降低学习成本和维护成本:由于这是一款开源软件,我们要考虑的不能仅仅是高大上的技术使用,而是要能让更多的开发者和使用者,可以快速部署,并进行个性化开发。无论在展示层、控制层、持久层,还是在各第三方组件的使用中都要尽量考虑到如何让更多的人可以使用我们的软件。
如何解决问题
针对以上的要求,我们如何设计系统,解决问题,并最终搭建满足我们需求的底层框架呢?我们一起来尝试摸索一下。
- 说到安全性,就离不开登陆、权限、加密这些场景。
(1)登陆我使用了cas,它是一个SSO框架,采用票据验证机制保证了,认证的安全。
(2)授权我采用了shiro框架与cas无缝整合,根据三类权限的设置,保证了菜单、按钮、数据的精细控制
(3)加密包括对HTTP头的加密(SSL),对关键业务数据的加密(AES、SHA1) - 降低信息流的复杂性,最核心的是如何梳理,如何切分业务,模块之间如何互相调用。
(1)梳理和切分业务其实更多的是经验问题,但有个通用的大原则,高内聚;也就是把关联性极高的功能放在一起,而对外暴露必要的接口供调用即可。其中还要考虑到一些基础数据的通用化设计。比如:组织信息、职员信息、主数据、数据字典等,单独设计并对外提供有双层缓存的接口。(其中也要考虑到缓存的更新策略)
(2)模块间我用Maven父子项目做了划分,也为直接的接口调用和REST风格的API调用做了不同方式的设计 - 如何提高开发效率,应该是我们认真思考的话题。因为这真的很重要。如果处理得当甚至会节省30%-40%的研发时间。
(1)代码自动生成工具:我研发了一套可以自动生成Controller、Service、Dao、Model以及所有配置及注解的工具。当前这是基于我指定的代码规范。只需要修改两到三个配置项,即可一键在项目下生成我们所需的代码。本来至少要编写半小时的代码,现在只需要10秒钟。
(2)可复用的工具包:十几年积累的所有工具类可提供快速的静态调用方式
(3)抽丝剥茧,独立的功能设计:很多常用的第三方组件或技术的处理方式,抽象出来,加以复用。比如:线程、Redis、JMS、Socket、Json、Groovy、Mongo等。
(4)多功能的AOP处理:基本思路是通过AOP及自定义注解灵活加入各种辅助处理功能。比如:方法缓存、自动set基础字段值、日志处理、数据权限控制等。
(5)必要的通用功能:通过Spring提供的技术,实现异常处理、类型转换、数据验证、API请求拦截等各种处理要求。 - 可配置可扩展其实说起来简单做起来难。可能很多软件都是这么宣传的,但真正做到的并不多。其实我认为主要做到如下几点就可以了:
(1)字段的可扩展,即可以通过配置的方式增加辅助字段,并且能实现1对1结构,和1对多结构的两种方式。
(2)流程的灵活处理。软件往往设计上会固定某一主流程,只要设计上让这一流程的组织不固定,而相对松散的实现即可。
(3)功能性模块的高度可配:比如权限系统、报表系统、工作流、数据字典 - 最后一个是有关降低学习成本和维护成本的问题。我觉得这更多是因为要匹配开源的要求,开源的使用者多数是个人或小团体,这对于普及一款开源产品显得尤为重要。怎么做呢?
(1)用最普及的技术、最少的技术种类、实现更多的需求。
(2)提供最简单的配置文档以实现程序部署。
对未来的考虑
为了考虑单体需求的激增,不得不应对高并发以及高可用的情景。所以现在技术选择以及底层搭建时就一定要有所考量。当前框架一定要可以快速引入新技术并可以高效整合。我认为Springboot一定是Java语言当下是最优的选择,也为SpringCloud的升级做了足够准备。
当然其中还有很多要考虑的内容,比如:负载均衡、消息队列、数据总线、读写分离、异步并发、降级限流等。在此不展开讨论,如果有兴趣可与开发者直接沟通。
后记
今天的日志写的比较长,但还没有包括很多中间件的优化和配置说明,为了给开源软件的使用者简化他们的部署工作,我会在后面附加一个技术补充文章。
希望您读完本文可以帮助笔者进入【码云】或【GitHub】点点星标。感谢大家的支持!
SpringBoot2搭建基础架构——开源软件诞生4的更多相关文章
- 工作流引擎Activiti与SpringBoot2整合--开源软件诞生17
开源ERP技术整合系列--第17篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon/r ...
- JAVA开源软件的技术选型--开源软件诞生2
技术准备--第2篇 用日志记录“开源软件”的诞生 赤龙ERP开源地址,点亮星标,支持一下,万分感谢 码云:https://gitee.com/redragon/redragon-erp github: ...
- ERP与EHR系统的恩怨纠葛--开源软件诞生13
ERP中需要EHR的存在吗--第13篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon ...
- ERP订单管理的操作与设计--开源软件诞生19
赤龙ERP订单模块讲解--第19篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon/r ...
- ERP收付款的操作与设计--开源软件诞生22
赤龙ERP收款付款讲解--第22篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...
- ERP的财务凭证的操作与设计--开源软件诞生23
赤龙ERP财务凭证讲解--第23篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...
- ERP中HR模块的操作与设计--开源软件诞生26
赤龙ERP的EHR功能讲解--第26篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/red ...
- ERP制造模块操作与设计--开源软件诞生30
赤龙ERP制造模块讲解--第30篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...
- 为什么要做一款ERP软件——开源软件诞生7
技术之外的探讨--第7篇 用日志记录“开源软件”的诞生 赤龙ERP开源地址: 点亮星标,感谢支持,与开发者交流 kzca2000 码云:https://gitee.com/redragon/redra ...
随机推荐
- QDC day4
图论. 强连通图 与 弱连通图 . 最短路 .dij 不支持负权.显然 值得一提的是利用斐波那契堆m+nlogn . 一张 边权都是2的整数次幂 考虑 一下直接 结构体维护这个2的整次幂数组但比大小 ...
- python 创建字典以及操作字典----这是基础知识
当你编程久了,发现所有的东西都是建立在基础之上的,庞大的代码 你要识别出它的类型是什么 或者返回后类型是什么!? 根据返回的类型 或者需要操作的对象是什么类型 就可以选择相应的方法进行处理 #创建字 ...
- Newbe.Claptrap 框架如何实现多级生命周期控制?
Newbe.Claptrap 框架如何实现多级生命周期控制?最近整理了一下项目的术语表.今天就谈谈什么是 Claptrap Lifetime Scope. 特别感谢 kotone 为本文提供的校对建议 ...
- .NetCore 配合 Gitlab CI&CD 实践 - 开篇
引言 这是一个系列的文章,讲述的是一个中小型开发团队如何从零开始使用搭建基建 GitLab 代码托管平台,以及使用 GitLab Runner 实现 CI/CD 的故事.本系列通过部署一个完整的 .n ...
- python6.2类的封装
class Card(object): def __init__(self,num,pwd,ban): self.num=num#卡号 self.pwd=pwd#密码 self.__ban=ban#余 ...
- 谈谈对Java平台的理解
从我第一次接触Java的时候,老师就说"Write once,run anywhere",这句话虽然听起来有一点太过于形式主义,但是也突出了它的特点.那么,现在的我们应该总结一下和 ...
- [机器学习 ]PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做
PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做 今天自己实现PCA,从网上看文章的时候,发现有的文章没有搞清楚把SVD(奇异值分解)实现和EVD(特征值分解) ...
- 【LeetCode/LintCode 题解】约瑟夫问题 · Joseph Problem
n个人按顺序围成一圈(编号为1~n),从第1个人从1开始报数,报到k的人出列,相邻的下个人重新从1开始报数,报到k的人出列,重复这个过程,直到队伍中只有1个人为止,这就是约瑟夫问题.现在给定n和k,你 ...
- Eclipse怎么调整字体大小和主题
调整字体 哈哈哈哈哈 ( ̄▽ ̄),直接Ctrl + -/+号,....在英文输入法状态. 或者,你想更细致的调整字体类型,可以在Winodw -> Preferences中调整: 换主题 你可以 ...
- Java字符串中有多少个字符多少个char、字节
Java 中Char是两个字节,Char在Java中也被称为代码单元(Code Unit) . Java中的字符与代码点(Code Unit)一 一对应,而可能对应一个或者两个 代码单元 字符串的le ...