第一个项目开发也有将近半年了,这也是自己的第一个比较成熟的系统,项目从刚开始的8个人到最后的三个人,开发团队的人也越来越少,系统也越来越成熟。中间开发也遇到了大量的问题,尤其在开发考试与试卷管理,由于界面交互太复杂一个JS可以上千行。17年11月中旬系统的第一次上线,我带着服务器到机房给客户安装部署好之后,客户的需求发生了很大的变化,直到18年元旦之后,系统才算正式开发完成,中间在客户的地方开发了将近20天,每天与客户沟通完需求之后进行开发,同时也要不停的修改别的代码,也真正理解到清晰的思路与清晰的代码的重要性,指不定哪天别人会修改你的代码,所以最好是将代码写的清除点,乱七八糟的代码容易暴露自己的实力。项目也逐渐成熟,直到项目后期才真正使用上git,刚开始人多只是不停的写代码,写完之后手动合并代码浪费了大量的时间。到客户的地方开发才使用上git,也理解了git的强大。
一、项目描述
开发环境:Eclipse+Jdk1.7+Git+Spring3.2+struts2.3+mybatis3.2+shiro1.3+mysql 5.7
前台技术:bootstrap+Easuui的分页插件+zTree树插件+jedate日期插件+kindeditor文本编辑器插件+其他
硬件:研腾身份证识别仪、南昊判卷机、指纹识别仪、人脸识别仪
项目描述:电厂安全培训管理系统是一个用于电厂进行培训的系统,主要是考试与成绩管理。考试可以分为在线考试与线下考试,在线考试就是登录系统之后在线考试,考完之后系统自动给出成绩,线下考试是将试卷导出成pdf进行线下考试,并用判卷机进行判卷之后将成绩导入系统。辅助的功能有部门管理与人员管理、违章管理。权限管理是系统的一大难点,采用了shiro框架,对不同的用户显示不同的菜单与显示界面上不同的按钮,也就是不同的用户可以看见不同的菜单,也可以看见不同的按钮。
菜单后台主界面:(主要模块)
二、前台总结:
前台技术:bootstrap+Easuui的分页插件+zTree树插件+jedate日期插件+kindeditor文本编辑器插件+其他
前台学到最多的是jQuery的使用以及ajax的使用,项目中大量的使用异步请求数据,使用了jQuery封装的三种ajax:
前台学到的主要开发思想:打开模态框之前清除之前的废旧数据,分页点击的时候带着条件去查询(将当前页与页大小存到页面的隐藏域),有时候reset按钮不能清空隐藏域,最可靠的办法就是将需要被清空的东西加个特殊的class,点击清除的时候清空所有的带class的。
--------------------jQuery封装的三种ajax:---------------------------------
第一种: $.ajax
第二种:$.post
第三种: $.get
------------常用的jQuery的选择器=---------------------------------
三、后台总结:
后台技术:Eclipse+Jdk1.7+Git+Spring3.2+struts2.3+mybatis3.2+shiro1.3+mysql 5.7
大致的配置过程:
配置数据库配置文件存放位置、将连接池放入spring容器(数据源)、配置mybatis会话工厂、配置mybatis扫描的基本包、配置事务管理器、配置事务模板对象、配置事务通知、将通知织入切面、配置扫描service与Action的包
与接口对应的mapper(开启二级缓存)
mybatis开启二级缓存的配置:(与encache整合 默认就是开启)
<setting name="cacheEnabled" value="true"/>
encache缓存的配置:
struts一个模块的配置:
shiro缓存配置
项目在使用mysql的过程中也遇到了好多问题,并通过各种手段解决了这些问题。
1. 索引:
在查询的时候有时候特别慢,通过项目也了解到索引的重要性,索引是真实存在于表中的,
mysql有哪些索引类型:
数据结构角度上可以分:B+tree索引,hash索引,fulltext索引(innodb,myisam都支持)
存储角度上可以分:聚集索引,非聚集索引
逻辑角度上可以分:primary key,normal key,单列,复合,覆盖索引
2. 触发器:
下面是项目中的一个触发器:
3.存储过程
下面是项目中的一个不带输入输出参数的存储过程:
4.事件与任务调度
事件使用的前提是开启任务调度:
第一个:每秒钟都执行修改状态的存储过程:
更新状态的存储过程:
一个每秒钟执行一次的事件调用上面的存储过程:
第二个:每年的1月1日清空积分
存储过程:
每年的1月1日执行的事件调用上面的存储过程:
5.其他:
中文排序:
五、部署与优化
服务器配置:windows server 2012 64G运行内存
(1)并发优化
(2)JVM优化
在开发当中,当一个项目比较大时,依赖的jar包通常比较多,我们都知道,在应用服务器启动时,会将应用引用到的所有类通过ClassLoader 依次全部加载到内存当中。Java的逻辑内存模型大致分为堆内存、栈内存、静态内存区,也称持久区,该区的内存不会被GC回收。堆内存用于存储类的实例、 数组等引用类型数据,也就是用new生成的对象,都存放在这里,栈内存存储局部变量(如:方法参数),静态内存区存储常量、静态变量、类元数据信息(方 法、属性等)。开发当中常遇到的三类内存溢出异常:
优化方法:
如果是Windows配置服务式的参考我的另一篇博客:
(3)数据库连接池c3p0配置
spring配置:
整个开发也经历了将近半年,学到的更多的是开发思想与一些常用的开发技术,在平时开发中也都记录下来啊了。
一个牛逼的程序员不仅是每天是敲多少行代码,更重要的是每天能学到多少,要时刻保持清晰的思路,养成良好的编程思路。