第一次负责项目的踩坑经历

工作一年半之后,第一次开始负责整个项目,虽然整个项目中就我一个人,我也要做个骄傲的光杆司令。之前在项目中我都是只负责写代码,别的像需求,设计,上线,运维等工作基本上没认真学过,所以这次一个人负责整个项目的设计,开发,上线和运维等还是学到了很多知识,在这里给大家分享下,避免大家和我自己再踩坑。

一,项目概况

该项目是我们京东云客服平台的后台管理系统,主要是回复客户的问题,统计各种问题出现的次数,更好的对产品进行针对性的优化。该项目第一期是别的部门完成的,由于人员变动的关系,交给我自己来开发第二期的功能和对原有功能进行优化升级。

二,项目初体验

项目的框架是SSM(spring+springMvc+mtbatis),maven关键jar包,项目的前端页面(包括controller层)和后台service层和dao层分别输入2个项目,2者之间用jsf进行通信.

前端的项目主要包括html+css+js+controller.JS用的是template.js 一款javascript模板引擎,简单,好用, 后端包括sql文件,dao层和service层.数据库用的mysql.

三,项目操作流程

1,下载代码

之前他们的代码保存在GitLab上,用公司的erp登录之后发现GitLab和GitHub基本上一样,使用HTTP的下载地址,用tortoisegit将代码下载到本地,之后需要maven Project将代码导入到eclipse.然后自己新建自己的一个分支,先将自己修改的代码提交到自己新建的分支上,发布预发布之前把自己的分支merge到pre分支上,然后再将pre分支merge到master分支进行正式发布.

2,连接mysql

用Navicat For  MySQL,之后去代码里查找需要连接的数据库的ip,端口号,账号,密码等,程序中的代码如下:

pip.jdbc.url=jdbc:mysql://ip地址:端口号/表名?

pip.jdbc.username=用户名
pip.jdbc.password=密码
然后选择Navicat For  MySQL新建连接,格式如下

第一次负责项目的踩坑经历_第1张图片

最后进行连接测试,不出意外的话,数据库连接就大功告成了

3,将项目跑起来

先修改web项目的web project setting,步骤如下

先选中项目,然后右键properties,再选择web project setting进行修改


修改tomcat的端口号,双击服务器,步骤如下

第一次负责项目的踩坑经历_第2张图片

第一次负责项目的踩坑经历_第3张图片

修改tomcat启动时间,双击service,步骤如下

第一次负责项目的踩坑经历_第4张图片


四,项目中用到的一些小技术

1,domain层实体类需要继承Serializable进行序列化,例子如下:

public class User implements Serializable {
    // id
    private int id;
    // name
    private String name;
	//get和set方法
}

序列化的好处:
将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;
 
按值将对象从一个应用程序域发送至另一个应用程序域。
比如说我有一个UserVo类,和User差不多: UserVo类主要用于从前台接收查询条件,User类用于将数据写入数据库,UserVo类也继承了序列化Serializable,那么将UserVo类转化为User类就简单了,代码如下:
BeanUtils.copyProperties(UserVo,User);

2,项目加载mybatis中UserMapper.xml文件的2种方式
第一种方式:将所有的mapper.xml文件都写入到sqlMapConfig.xml,这种就是比较繁琐,每添加一个mapper.xml文件就得修改sqlconfig.xml文件,步骤如下
先在spring-db-config.xml按照下图的红线中进行配置
第一次负责项目的踩坑经历_第5张图片

然后sqlMapConfig.xml配置如下



	
		
		
	
第二种直接在spring-db-config.xml配置,加载所有的mapper.xml文件,配置如下
第一次负责项目的踩坑经历_第6张图片
同理加载dao层的接口也有这2中方式
第一种单独加载,配置如下:
第一次负责项目的踩坑经历_第7张图片
第二种,一次性加载所有的dao层文件
第一次负责项目的踩坑经历_第8张图片

3,logger.isDebugEnabled()的作用,程序中经常这么写

1).直接使用logger.info("User " + userId + " is using app " + appId)来输出log,也能够达到log级别为INFO或在INFO以下时才输出:("User " + userId + " is using app " + appId),因为logger.info方法内部有判断输出级别的代码。但是在进入logger.info函数之前,("User " + userId + " is using app " + appId) 这个表达式已经通过运算拼接成了一个字符串;而如果事先使用 if (logger.isInfoEnabled())进行判断,那么当log级别在INFO以上时,就能省去上述的字符串操作,在高并发和复杂log信息拼接的情况下,使用这种标准的方法输出log能够省去不小的系统开销。另外,如果构造log信息的过程需要大量字符串操作,建议使用StringBuilder来完成字符串拼接。
2).ERROR及其以上级别的log信息是一定会被输出的,所以只有logger.isDebugEnabled和logger.isInfoEnabled方法,而没有logger.isErrorEnabled方法。
4, 创建日志类Logger的简单写法:
private Logger logger = LoggerFactory.getLogger(this.getClass());
5,浏览器 控制台打印日志
console.log(User),比alert(user)好处是可以查看User类所有的参数
6,mybatis中查询属于当天的数据
select *
from user_table
where date(updateTiem) = curdate()
7,logger.info打印出字符串或者list
eg: string erp = "liguangguang";
 logger.info("当前登录人的erp:{}", erp);
就会打印出日志:当前登录人的erp:liguangguang
8,map与multimap的区别
multimap的特点为key是可以重复的,而普通map中的key是不可以重复的。
9,判断list是否为空
CollectionUtils.isNotEmpty(issueList) 或者 用 issueList != null &&issueList.size() > 0




你可能感兴趣的:(代码)