美文网首页
微信小程序Java电商项目开发感悟

微信小程序Java电商项目开发感悟

作者: 邹刘名 | 来源:发表于2019-02-22 14:49 被阅读0次

        本人之前一直是做支付项目,对电商项目这一块不是很熟悉,从事该项目后才慢慢的对电商有了粗浅的认知,为了加深自己对项目的认知度编写该篇感悟,在项目进行过程中发现了很多自己的不足包括(沟通、协调、编码等),借此文章改进自己。

    项目团队介绍:两个后台、两微信小程序开发、一个前端

    项目研发周期:一个月

    项目开发工期紧张:在项目一期的时候我总共分为以下几步来进行操作:

    一:需求解读

        结合现有资源,一期主要以下单为主,因商品价采用内购形式,采用用户参团形式进行购买,具体功能如下:

    小程序功能:

    二:环境选型

    应用框架:Springboot1.5.2+Mybatis+log4j+maven3.6+tomcat8.5

    前端框架:VUE

    数据库:MySQL

    环境配置:

    服务器 :

        CPU核数: 1核

        CPU个数: 1个

        CPU型号: Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz

        内存大小:3G

    负载机 :

        CPU核数: 4核

        CPU个数: 1个

        CPU型号: Intel core i5 3470CPU大小3G

        内存大小:3G

    数据库的机型配置 

        CPU核数: 1核

        CPU个数: 1个

        CPU型号: Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz

        内存大小:3.8G

    场景:

    浏览商品:

        当tps49.9时,服务器CPU在56-70%中变化,内存变化不明显。

        当tps98.5时,服务器CPU在70-90%中变化,内存变化不明显。

        当tps103.2时,服务器CPU在90-100%中变化,内存变化不明显。

        当tps145时,服务器CPU在90-100%中变化,内存变化不明显。

    加入购物车:

        达到126.7时,服务器CPU状态在54%-81%中变化,属于正常范围,内存无明显变化。

    本系统采用的软件架构可以很好的支持系统如下性能方面的需求:

        [if !supportLists]1. [endif]系统能够支持长时间使用;

        [if !supportLists]2. [endif]系统响应时间不超过2.5秒;

        [if !supportLists]3. [endif]系统安装时间不超过1.5分钟。

    三:设计数据库 

    四:项目框架 

    Wemall

    ├─.settings

    ├─lib------------------jar包存储

    ├─logs-----------日志文件存储

    ├─src

    │  ├─main

    │  │  ├─java

    │  │  │  └─com

    │  │  │      └─blya

    │  │  │          ├─order---订单模块

    │  │  │          │  ├─controller----控制层

    │  │  │          │ ├─dao--------数据层

    │  │  │          │ ├─mapper------映射层

    │  │  │          │ ├─entity--------实体层

    │  │  │          │ ├─service-----业务层

    │  │  │          │ ├─exception----异常层

    │  │  │          │ └─base------基础层

    │  │  │          ├─comm------公共模块

    │  │  │          │ ├─session-----事务层

    │  │  │          │ ├─log----------日志类

    │  │  │          │ ├─tool---------工具类

    │  │  │          │ ├─constants------常量

    │  │  │          │ ├─client-------链接类

    │  │  │          │ ├─configuration-----配置

    │  │  │          │ └─base------基础层

    │  │  │          ├─user------用户模块

    │  │  │          │  ├─controller----控制层

    │  │  │          │ ├─dao--------数据层

    │  │  │          │ ├─mapper------映射层

    │  │  │          │ ├─entity--------实体层

    │  │  │          │ ├─service-----业务层

    │  │  │          │ ├─exception----异常层

    │  │  │          │ └─base------基础层

    │  │  │          ├─promotion------促销模块

    │  │  │          │  ├─controller----控制层

    │  │  │          │ ├─dao--------数据层

    │  │  │          │ ├─mapper------映射层

    │  │  │          │ ├─entity--------实体层

    │  │  │          │ ├─service-----业务层

    │  │  │          │ ├─exception----异常层

    │  │  │          │ └─base------基础层

    │  │  │          ├─commodity------商品模块

    │  │  │          │  ├─controller----控制层

    │  │  │          │ ├─dao--------数据层

    │  │  │          │ ├─mapper------映射层

    │  │  │          │ ├─entity--------实体层

    │  │  │          │ ├─service-----业务层

    │  │  │          │ ├─exception----异常层

    │  │  │          │ └─base------基础层

    │  │  │          ├─shops------商铺模块

    │  │  │          │  ├─controller----控制层

    │  │  │          │ ├─dao--------数据层

    │  │  │          │ ├─mapper------映射层

    │  │  │          │ ├─entity--------实体层

    │  │  │          │ ├─service-----业务层

    │  │  │          │ ├─exception----异常层

    │  │  │          │ └─base------基础层

    │  │  │          └─Application.java--------------启动类

    │  │  └─resources

    │  │      ├─mybites-------数据库文件

    │  │      │ ├Wemall-login---------初始化mybatis文件

    │  │      │ ├Wemall-order---------订单模块文件

    │  │      │ ├Wemall-user---------用户模块文件

    │  │      │ ├Wemall-promotion---------促销模块文件

    │  │      │ ├Wemall-commodity---------商品模块文件

    │  │      │ ├Wemall-comm---------公共文件

    │  │      │ ├Wemall-shops---------商铺文件

    │  │      │ └.............

    │  │      ├─static----------------静态文件

    │  │      │  ├─css--------------css样式文件

    │  │      │ │ ├─order------------订单

    │  │      │ │ ├─comm-----------公共

    │  │      │ │ ├─user-----------用户

    │  │      │ │ ├─promotion-----------促销

    │  │      │ │ ├─commodity-----------商品

    │  │      │ │ ├─shops-----------商铺

    │  │      │ │ └─............

    │  │      │  └─js------------js交互文件

    │  │      │ ├─order------------订单

    │  │      │ ├─comm-----------公共

    │  │      │ ├─user-----------用户

    │  │      │ ├─promotion-----------促销

    │  │      │ ├─commodity-----------商品

    │  │      │ ├─shops-----------商铺

    │  │      │ └─............

    │  │      └─templates---------------前端文件

    │  │       ├─order------------订单

    │  │       ├─comm-----------公共

    │  │       ├─user-----------用户

    │  │       ├─promotion-----------促销

    │  │       ├─commodity-----------商品

    │  │       ├─shops-----------商铺

    │  │       └─............

    │  └─test------------------------测试包

    │ ├─application.properties--------spring配置文件

    │ └─log4j.properties------log配置文件

    ├─Pom.xml--------------------maven配置文件

    └─target------------------------maven部署包文件夹

    五 :项目感悟(项目脱坑点)

    1.在项目中我使用的mybatis的xml来进行sql分离,主要使用了mysql一下配置,使用该配置需要加载实体类代码。

    /**

    * 扫描mybatis的接口

    */

    @Bean

        public MapperScannerConfigurer mapperScannerConfigurer() {

            MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();

            //获取之前注入的beanName为sqlSessionFactory的对象

            mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");

            //指定xml配置文件的路径

            mapperScannerConfigurer.setBasePackage("com.blya.*.mapper");

            return mapperScannerConfigurer;

        }

    /**

    * 获取实体类路径

    * @return

    * @throws FileNotFoundException

    * @throws IOException

    */

    public static String readFileContent() throws CommIOException, FileNotFoundException{

    File file = ResourceUtils.getFile(readFileContent);

    FileInputStream fis = null;

    InputStreamReader isr = null;

    BufferedReader br = null; // 用于包装InputStreamReader,提高处理性能。因为BufferedReader有缓冲的,而InputStreamReader没有。

    String str = "";

    StringBuffer sbuff = new StringBuffer();

    try {

    fis = new FileInputStream(file);

    // 从文件系统中的某个文件中获取字节

    isr = new InputStreamReader(fis);// InputStreamReader 是字节流通向字符流的桥梁,

    br = new BufferedReader(isr);// 从字符输入流中读取文件中的内容,封装了一个new InputStreamReader的对象

    while ((str = br.readLine()) != null) {

    sbuff.append(str + ",");

    }

    sbuff.deleteCharAt(sbuff.length()-1);

    log.info("初始化MyBatis数据库实体类路径:"+sbuff.toString());

    } catch (IOException  e) {

    log.error("读取实体包路径异常!!!!");

    log.error(e);

    throw new CommIOException("100001");

    }finally {

    try {

    isr.close();

    br.close();

    fis.close();

    } catch (IOException e) {

    log.error("关闭文件流异常!!!!");

    log.error(e);

    throw new CommIOException("100002");

    }

    }

    return sbuff.toString();

    }

    2.springboot部署经常踩的坑,本人使用的是war包部署

    一、修改启动类

    public class Application extends SpringBootServletInitializer {

        @Override

        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

            return builder.sources(Application.class);

        }

        public static void main(String[] args) {

            new SpringApplicationBuilder(Application.class).web(true).run(args);

        }

    }

    二:剔除依赖

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-start-tomcat</artifactId>

        <scope>provided</scope>

    </dependency>

    三、打包

    在项目的根目录下(即包含pom.xml的目录),在命令行里输入:

    首先,Maven clean(清除缓存);

    然后,Run As->Maven install(打包成war)。

    最后,在target文件夹下找到打包好的war。

    3.当时部署tomcat出现一个头痛的异常

        java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/WeMall]]

    at java.util.concurrent.FutureTask.report(FutureTask.java:122)

    at java.util.concurrent.FutureTask.get(FutureTask.java:192)

    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:911)

    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:890)

    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403)

    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)

    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

    at java.lang.Thread.run(Thread.java:748)

    解决方案:

        tomcat8.5版本过高 提高servert-api.jar版本

    <?xml version="1.0" encoding="UTF-8"?>

    <faceted-project>

      <installed facet="wst.jsdt.web" version="1.0"/>

      <installed facet="jst.web" version="3.1"/>

      <installed facet="java" version="1.8"/>

      <installed facet="jst.jsf" version="1.2"/>

    </faceted-project>

    六:项目不足补充

        项目目前只适用于单项系统操作,如果实现分布式还却有不足。后期会继续添加redis+mangoDB。分布式多应用也会集成起来。

    第一次编写该类文章,只供交流。。

    相关文章

      网友评论

          本文标题:微信小程序Java电商项目开发感悟

          本文链接:https://www.haomeiwen.com/subject/kptylftx.html