发表于: 2018-01-30 23:36:56

1 453


今天做的事情:


               从早上改到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包都一样,应该是可以不一样的,但是保险吧,都放一样的。浅见。。


            
            分析一波:
           

           adminService,在com.ptteng.demacia.service.impl包下有这个服务的实现类,看里面方法。有个dao,一看就知道是数据访问层,而截图下面有很多方法,insertList,delete,update,getObjectById,getObjectByIds等等。在实现类里面。有这么多的方法,一起发布。当然dao是公司封装起来的,点进去是这样的。


          

               我的理解是:根据具体方法拼接一下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);
       }
}
}


             
 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 ,还有服务名。



             

          

          看这几个小红箭头,spring的配置文件,里面扫描com.ptteng.demacia这个包下的所有注解。 里面使用<sca:service>来配置服务,这个需要和公司服务器上的resources里面的服务名对应,并且端口号什么的,也需要制定。之前坑就是这里的,错了一个服务名。。。


          

               每个服务下面都需要这个group.xml,连接数据库的配置文件,并且,还有一个admin_dao.xml,每个服务都需要有自己的xml,这是必须的。
               里面是sql语句的前面不变的一些。根据id查询,后面会用map拼接条件去查询数据。
<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>


              别的服务也与这个类上,再来看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,拼接多个条件去查询。


                
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的学习。任重道远。


      




返回列表 返回列表
评论

    分享到