本人之前一直是做支付项目,对电商项目这一块不是很熟悉,从事该项目后才慢慢的对电商有了粗浅的认知,为了加深自己对项目的认知度编写该篇感悟,在项目进行过程中发现了很多自己的不足包括(沟通、协调、编码等),借此文章改进自己。
项目团队介绍:两个后台、两微信小程序开发、一个前端
项目研发周期:一个月
项目开发工期紧张:在项目一期的时候我总共分为以下几步来进行操作:
一:需求解读
结合现有资源,一期主要以下单为主,因商品价采用内购形式,采用用户参团形式进行购买,具体功能如下:
小程序功能:
二:环境选型
应用框架: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。分布式多应用也会集成起来。
第一次编写该类文章,只供交流。。
网友评论