发表于: 2018-01-30 23:36:56
1 452
今天做的事情:
从早上改到demo前,找前端师姐请教问题,武汉的小伙伴也找前端。总算在最后时刻,完成我们所缺的部分。demo之后有个小问题,是用户管理,多条件查找是,积分豆的数量,不能查30这个数字,,,好吧,这也算,在查询语句,加了=,解决。。
总结一下开始过程到结束。
一开始准备项目,是比较盲目的,边看wiki边问师兄们,才了解大致做项目前的流程,制作PPT,总结任务所学。刚才找了下,没有找到之前的PPT,这个习惯该改了。注意总结,和归纳。
然后是复盘方案。那时候我们还有三个前端,虽然都没做完任务。。但是算有,不知道后来为啥子,没了,没了。。嗯就我们三个后端,只能用寒露组的公共页面。
成也风云,败也风云。正因为使用人家接口,所以时间上比人家短。有利有弊,如果自己做,可能时间会长,有很多问题。这次的团队做项目,学到很多,好的坏的。
对于项目:1、确定下来需求,PM讲解清楚。 2、后端讨论技术要点,怎么实现。3、与前端交流,共同制定接口文档。4、一起讨论可能出现的问题。5、分工,责任划分。6、拆解任务,制定计划。7、项目开始前的布置。自动生成代码,服务器部署。8、开始接口编写。9、写完就测,部署服务器。10、接口写完,总的运行,解决出现的问题。11、收尾,demo。
对于步骤7,服务器部署,那时候拆道任务已经开始了,服务器只部署了一半,急急忙忙去写接口了,导致后来写完接口,才回过头布置服务器。期间出现的错误,有service名加载错误,也有很烦人的jar包问题,缺一个什么1.1b的包。这个烦了好几天。对了。最后再武汉的小伙伴请教郑州一位师兄解决的,而后我的部署服务器user服务连接不上,也是这位师兄郑州的师兄解决的,这就是茹程远师兄鲜花,掌声!!可以说没有这位师兄两次的帮助,我们好艰难。当然期间有很多师兄也有很多帮助。在最下面会一一感谢。
还有一点,如果有看到的准备复盘的小伙伴,对于一起做项目,真的不要推,比如代码生成,我没吭声,别人看视频生成的,后面我部署服务器问题,就出现在生成代码中一个点,我不知道,别人也没说。导致耗费了两天时间呢。
项目名:demacia ,中文:德玛西亚 ! 代码目录说一下: admin-service , article-service , user-service , video-service , admin-web , home -web 。四个服务,两个web。任务九时学得Tuscany的RMI,远程发布服务,本地web访问。
使用了maven的父模块,每一个模块都有自己的pom文件。总得来说jar包都一样,应该是可以不一样的,但是保险吧,都放一样的。浅见。。
XKGUPKT@C~49YK7TJ3.png)
XKGUPKT@C~49YK7TJ3.png)
XKGUPKT@C~49YK7TJ3.png)
XKGUPKT@C~49YK7TJ3.png)

XKGUPKT@C~49YK7TJ3.png)
adminService,在com.ptteng.demacia.service.impl包下有这个服务的实现类,看里面方法。有个dao,一看就知道是数据访问层,而截图下面有很多方法,insertList,delete,update,getObjectById,getObjectByIds等等。在实现类里面。有这么多的方法,一起发布。当然dao是公司封装起来的,点进去是这样的。
XKGUPKT@C~49YK7TJ3.png)
我的理解是:根据具体方法拼接一下sql语句执行。。有知道的,欢迎下面回复。。
再来看服务接口:
private static SCANode node;
/**
* start account server.
*
* @throws java.io.IOException IOException
*/
public void start() throws Exception {
log.info("===> academy-demacia-admin-service Start Begin");
node = SCANodeFactory.newInstance().createSCANode("META-INF/server.composite");
node.start();
log.info("===>academy-demacia-admin-service success");
}
/**
* exit system
*/
public void exit() {
System.exit(0);
}
public void run() throws InterruptedException {
while (true) {
Thread.sleep(Long.MAX_VALUE);
}
}
/**
* ������������.
* @param args
* @throws Exception Exception
*/
public static void main(String[] args) throws Exception {
AdminServer adminServer = new AdminServer();
adminServer.start();
try {
adminServer.run();
} catch (InterruptedException e) {
log.error("academy-demacia-admin-service adminServer run error ", e);
}
}
}
XKGUPKT@C~49YK7TJ3.png)
node = SCANodeFactory.newInstance().createSCANode("META-INF/server.composite");
node.start();
获取ScaNodeFactory,创建节点,来加载server.composite配置。node.star();启动
下面是server.composite,component组件,让我想起之前做的计算器的例子,包含四个方法,加减乘除,每个都是组件,组合在一起发布使用
<component name="AcademyDemaciaComponent">
<implementation.spring location="META-INF/applicationContext-server.xml" />
</component>
<service name="adminService" promote="AcademyDemaciaComponent/adminService">
<interface.java interface="com.ptteng.demacia.service.AdminService"/>
<scallop:binding.rmi host="localhost" port="20241" serviceName="AdminRMIService"/>
</service>
binding.rmi 绑定发布。host和port ,还有服务名。
XKGUPKT@C~49YK7TJ3.png)
看这几个小红箭头,spring的配置文件,里面扫描com.ptteng.demacia这个包下的所有注解。 里面使用<sca:service>来配置服务,这个需要和公司服务器上的resources里面的服务名对应,并且端口号什么的,也需要制定。之前坑就是这里的,错了一个服务名。。。
XKGUPKT@C~49YK7TJ3.png)
XKGUPKT@C~49YK7TJ3.png)
XKGUPKT@C~49YK7TJ3.png)
<route>
<object name="com.ptteng.demacia.model.Admin"
listenerClass="" strategyProperty="">
<list name="getAdminIdsAll" sqlitem="select id from admin where 1 = 1 order by create_at desc"
keyProperty="version" valueProperty="id" keyColumn="version" />
<dbStrategy name="mutiDS"
clasz="com.gemantic.dal.route.strategy.DefaultStrategy"> <pattern value="[0-9]$" group="academy_demacia" />
</dbStrategy>
</object>
</route>
XKGUPKT@C~49YK7TJ3.png)
别的服务也与这个类上,再来看web。例如admin-web。
看一下目录: controller,是各个模块的controller层,util包下,都是用的工具类。
在admin-web模块里面。需要spring-mvc.xml,web.xml。在以前的任务里面也是这样分离前后端。在spring-mvc.xml需要配置视图解析器,拦截器,文件上传,图片上传。web.xml里面配置字符过滤,加载spring的xml,springmvc.xml。
看一下controller,
因为使用公司框架,都是封装好的,所以只能在controller中操作。在方法接收传来的参数,需要盘空操作。返回给前端code。接下来在try,catch里面写逻辑。有异常捕获,再返回响应code。成功返回0.
介绍一下工具类:
上图中的DynamicUtil。其中的一个方法,使用map,拼接多个条件去查询。
XKGUPKT@C~49YK7TJ3.png)
public static Map<String, Object> getDynamicUserList(String alias, Integer sex, Integer grade, String mobile, String mail,
Integer status, Integer beansBegin, Integer beansEnd, String location) {
Map<String, Object> params = new HashMap<>();
if (DataUtils.isNotNullOrEmpty(alias)) {
params.put(" user.alias & like ", "'%" + alias + "%'");
}
if (DataUtils.isNotNullOrEmpty(sex)) {
params.put(" user.sex & =", " '" + sex + "'");
}
if (DataUtils.isNotNullOrEmpty(grade)) {
params.put(" user.grade & = ", "'" + grade + "'");
}
if (DataUtils.isNotNullOrEmpty(mobile)) {
params.put(" user.mobile & = ", "'" + mobile + "'");
}
if (DataUtils.isNotNullOrEmpty(mail)) {
params.put(" user.mail & like", " '%" + mail + "%'");
}
if (DataUtils.isNotNullOrEmpty(status)) {
params.put(" user.status & = ", "'" + status + "'");
}
if (DataUtils.isNotNullOrEmpty(beansBegin)) {
params.put(" user.beans & >= ", "'" + beansBegin + "'");
}
if (DataUtils.isNotNullOrEmpty(beansEnd)) {
params.put(" user.beans & <= ", " '" + beansEnd + "'");
}
if (DataUtils.isNotNullOrEmpty(location)) {
params.put(" user.location & like ", "'%" + location + "%'");
}
params.put("@order", "create_at desc");
params.put("@query", "id");
params.put("@table", "user");
String s = SQLUtil.convert2Sql(params, 0, Integer.MAX_VALUE);
System.out.println(s);
return params;
}
判断空那个DataUtils,点进去是公司封装的jar包。。SQLUtils也是封装好的。
这个有map拼接条件进行查询,这个思路就可以,mybatis也可以使用这个来搞。
这个是我任务七,第三方文档的学习,自己改的一个方法,将一些参数,用变量传值,不写死在代码里,在配置文件里赋值就行。七牛云的上传。
其余差不多了。。服务器部署的话,还是要多看之前师兄讲的小课堂,一遍一遍再一遍的看。。就好了。别放弃。
今天总结到这里,明天继续,这两天总结。
遇到的问题:
与前台页面的交互,修改js。
收获:
说一下,项目收获:敏捷开发的流程,一套下来,知道什么阶段做什么。写代码之前的工作很重要,很重要。接口文档很重要,一定要遵守。队友之间的沟通也很重要,每天一定要计划做什么,一定要计划,整个项目需要多长时间,要计划。接口写完测试,本地测试很简单,服务器测试成功,才是真的成功。
其实求学整个项目,不怎么难,坐下来,想想收获,不多是因为仅仅完成了功能,现在做完了。心沉淀下来,看了看用的工具类是怎么写的。公司的jar包里面是怎样的。之前急躁了。
将之前任务学得都用上了,如果在新的项目中遇到技术问题,不慌,单独去跑小demo,搞清楚是怎么使用,再放进自己项目。知道是怎样去解决遇到的问题。
还有很多需要去补,基础的io流,多线程,集合。spring的定时任务,shiro权限,springboot的学习。任重道远。
评论