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

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

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

项目研发周期:一个月

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

一:需求解读

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

小程序功能:


二:环境选型

应用框架: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);

    }

}

二:剔除依赖

    org.springframework.boot

    spring-boot-start-tomcat

    provided

三、打包

在项目的根目录下(即包含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版本

 

 

 

 

六:项目不足补充

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


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

你可能感兴趣的:(微信小程序Java电商项目开发感悟)