精华内容
下载资源
问答
  • 分布式商城数据脚本-乐优商城,乐优商城所需的商品数据,用户登录信息登,直接导入即可。
  • 分布式商城项目笔记-乐优商城,详细的课程笔记,图文截图,笔记是MD文件,非常值得学习
  • mall 基于分布式商城项目 SSM架构
  • 分布式商城项目

    2019-02-24 20:46:33
    vm商城是一个分布式B2B商城项目,从前端到后台全部采用分布式
  • 分布式商城项目(纯后端) Springboot+dubbo的模拟分布式商城微服务demo web项目 1、gmall-admin-web 后台web项目,提供管理员注册,登录校验,商品上下架到es,及文件上传到oss等Controller层功能 2、gmall-shop-...
  • 分布式商城项目数据库设计

    千次阅读 2019-05-24 19:08:23
    分布式商城项目数据库设计 首先,作为一个商城系统,需要有,用户表,商品表,商品分类表,购物车表 订单表,订单明细表,支付信息表,以及物流信息表。 对此博主使用PowerDesigner对数据表以及他们之间的关系进行了...

    分布式商城项目数据库设计

    首先,作为一个商城系统,需要有,用户表,商品表,商品分类表,购物车表
    订单表,订单明细表,支付信息表,以及物流信息表。
    对此博主使用PowerDesigner对数据表以及他们之间的关系进行了粗略的设计得出了如下E-R图,由于对业务不是十分熟悉,在设计过程中参考了很多数据库设计的资料。
    在这里插入图片描述

    1.用户表

    在这里插入图片描述

    商品表

    在这里插入图片描述

    3.商品类别表

    在这里插入图片描述

    4.购物车表

    在这里插入图片描述

    5订单表

    在这里插入图片描述

    6.订单明细表

    在这里插入图片描述

    7.支付信息表

    在这里插入图片描述

    8.收货信息表

    在这里插入图片描述

    总结

    到这里我们项目的数据库就设计好了,对数据库知识,还需要多加学习。
    感谢大家看到这里,在此,我将sql语句贴出来供大家互相学习交流,如果您对此有什么建议,欢迎指正。

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : yc
    Source Server Version : 50726
    Source Host           : 47.100.224.4:3306
    Source Database       : ycshop
    
    Target Server Type    : MYSQL
    Target Server Version : 50726
    File Encoding         : 65001
    
    Date: 2019-05-24 17:30:35
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for cart
    -- ----------------------------
    DROP TABLE IF EXISTS `cart`;
    CREATE TABLE `cart` (
      `carid` varchar(64) NOT NULL,
      `userid` varchar(64) DEFAULT NULL COMMENT '用户表id',
      `proid` varchar(64) DEFAULT NULL COMMENT '商品id',
      `quantity` int(11) DEFAULT NULL COMMENT '数量',
      `checked` int(11) DEFAULT NULL COMMENT '是否选择,1=已勾选,0=未勾选',
      `createtime` datetime DEFAULT NULL COMMENT '创建时间',
      `updatetime` datetime DEFAULT NULL COMMENT '更新时间',
      PRIMARY KEY (`carid`),
      KEY `FK_Reference_2` (`userid`),
      KEY `FK_Reference_3` (`proid`),
      CONSTRAINT `FK_Reference_2` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`),
      CONSTRAINT `FK_Reference_3` FOREIGN KEY (`proid`) REFERENCES `product` (`proid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of cart
    -- ----------------------------
    
    -- ----------------------------
    -- Table structure for category
    -- ----------------------------
    DROP TABLE IF EXISTS `category`;
    CREATE TABLE `category` (
      `cateid` varchar(64) NOT NULL COMMENT '类别Id',
      `parentid` varchar(64) DEFAULT NULL COMMENT '父类别id当id=0时说明是根节点,一级类别',
      `name` varchar(50) DEFAULT NULL COMMENT '类别名称',
      `status` int(1) DEFAULT '1' COMMENT '类别状态1-正常,2-已废弃',
      `sortorder` int(4) DEFAULT NULL COMMENT '排序编号,同类展示顺序,数值相等则自然排序',
      `createtime` datetime DEFAULT NULL COMMENT '创建时间',
      `updatetime` datetime DEFAULT NULL COMMENT '更新时间',
      PRIMARY KEY (`cateid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of category
    -- ----------------------------
    
    -- ----------------------------
    -- Table structure for orderitem
    -- ----------------------------
    DROP TABLE IF EXISTS `orderitem`;
    CREATE TABLE `orderitem` (
      `id` varchar(64) NOT NULL COMMENT '订单子表id',
      `orderid` varchar(64) DEFAULT NULL COMMENT '订单id',
      `userid` varchar(64) DEFAULT NULL COMMENT '用户表id',
      `proid` varchar(64) DEFAULT NULL COMMENT '商品id',
      `proname` varchar(100) DEFAULT NULL COMMENT '商品名称',
      `proimage` varchar(500) DEFAULT NULL COMMENT '商品图片地址',
      `currentunitprice` decimal(20,2) DEFAULT NULL COMMENT '生成订单时的商品单价,单位是元,保留两位小数',
      `quantity` int(10) DEFAULT NULL COMMENT '商品数量',
      `totalprice` decimal(20,2) DEFAULT NULL COMMENT '商品总价,单位是元,保留两位小数',
      `createtime` datetime DEFAULT NULL,
      `updatetime` datetime DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `FK_Reference_5` (`orderid`),
      KEY `FK_Reference_8` (`userid`),
      KEY `FK_Reference_9` (`proid`),
      CONSTRAINT `FK_Reference_5` FOREIGN KEY (`orderid`) REFERENCES `orders` (`orderid`),
      CONSTRAINT `FK_Reference_8` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`),
      CONSTRAINT `FK_Reference_9` FOREIGN KEY (`proid`) REFERENCES `product` (`proid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of orderitem
    -- ----------------------------
    
    -- ----------------------------
    -- Table structure for orders
    -- ----------------------------
    DROP TABLE IF EXISTS `orders`;
    CREATE TABLE `orders` (
      `orderid` varchar(64) NOT NULL COMMENT '订单id',
      `userid` varchar(64) DEFAULT NULL COMMENT '用户id',
      `shoppingid` varchar(64) DEFAULT NULL,
      `payment` decimal(20,2) DEFAULT NULL COMMENT '实际付款金额,单位是元,保留两位小数',
      `paymenttype` int(4) DEFAULT NULL COMMENT '支付类型,1-在线支付',
      `postage` int(10) DEFAULT NULL COMMENT '运费,单位是元',
      `status` int(10) DEFAULT NULL COMMENT '订单状态:0-已取消-10-未付款,20-已付款,40-已发货,50-交易成功,60-交易关闭',
      `paymenttime` datetime DEFAULT NULL COMMENT '支付时间',
      `sendtime` datetime DEFAULT NULL COMMENT '发货时间',
      `endtime` datetime DEFAULT NULL COMMENT '交易完成时间',
      `closetime` datetime DEFAULT NULL COMMENT '交易关闭时间',
      `createtime` datetime DEFAULT NULL COMMENT '创建时间',
      `updatetime` datetime DEFAULT NULL COMMENT '更新时间',
      PRIMARY KEY (`orderid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of orders
    -- ----------------------------
    
    -- ----------------------------
    -- Table structure for payinfo
    -- ----------------------------
    DROP TABLE IF EXISTS `payinfo`;
    CREATE TABLE `payinfo` (
      `payid` varchar(64) NOT NULL,
      `orderid` varchar(64) DEFAULT NULL COMMENT '订单id',
      `userid` varchar(64) DEFAULT NULL COMMENT '用户表id',
      `payplatform` int(10) DEFAULT NULL COMMENT '支付平台:1-支付宝,2-微信',
      `platformnumber` varchar(200) DEFAULT NULL COMMENT '支付流水号',
      `platformstatus` varchar(20) DEFAULT NULL COMMENT '支付状态',
      `createtime` datetime DEFAULT NULL COMMENT '创建时间',
      `updatetime` datetime DEFAULT NULL COMMENT '更新时间',
      PRIMARY KEY (`payid`),
      KEY `FK_Reference_6` (`orderid`),
      KEY `FK_Reference_7` (`userid`),
      CONSTRAINT `FK_Reference_6` FOREIGN KEY (`orderid`) REFERENCES `orders` (`orderid`),
      CONSTRAINT `FK_Reference_7` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of payinfo
    -- ----------------------------
    
    -- ----------------------------
    -- Table structure for product
    -- ----------------------------
    DROP TABLE IF EXISTS `product`;
    CREATE TABLE `product` (
      `proid` varchar(64) NOT NULL COMMENT '商品id',
      `cateid` varchar(64) DEFAULT NULL COMMENT '类别Id',
      `name` varchar(100) NOT NULL COMMENT '商品名称',
      `subtitle` varchar(200) DEFAULT NULL COMMENT '商品副标题',
      `mainimage` varchar(500) DEFAULT NULL COMMENT '产品主图,url相对地址',
      `subimages` text COMMENT '图片地址,json格式,扩展用',
      `detail` text COMMENT '商品详情',
      `price` decimal(20,2) NOT NULL COMMENT '价格,单位-元保留两位小数',
      `stock` int(11) NOT NULL COMMENT '库存数量',
      `status` int(6) DEFAULT '1' COMMENT '商品状态.1-在售 2-下架 3-删除',
      `createtime` datetime DEFAULT NULL COMMENT '创建时间',
      `updatetime` datetime DEFAULT NULL COMMENT '更新时间',
      PRIMARY KEY (`proid`),
      KEY `FK_Reference_1` (`cateid`),
      CONSTRAINT `FK_Reference_1` FOREIGN KEY (`cateid`) REFERENCES `category` (`cateid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of product
    -- ----------------------------
    
    -- ----------------------------
    -- Table structure for shopping
    -- ----------------------------
    DROP TABLE IF EXISTS `shopping`;
    CREATE TABLE `shopping` (
      `shoppingid` varchar(64) NOT NULL,
      `userid` varchar(64) DEFAULT NULL COMMENT '用户表id',
      `orderid` varchar(64) DEFAULT NULL COMMENT '订单id',
      `receivername` varchar(20) DEFAULT NULL COMMENT '收货姓名',
      `receiverphone` varchar(20) DEFAULT NULL COMMENT '收货固定电话',
      `receivermobile` varchar(20) DEFAULT NULL COMMENT '收货移动电话',
      `receiverprovince` varchar(20) DEFAULT NULL COMMENT '省份',
      `receivercity` varchar(20) DEFAULT NULL COMMENT '城市',
      `receiverdistrict` varchar(20) DEFAULT NULL COMMENT '区/县',
      `receiveraddress` varchar(200) DEFAULT NULL COMMENT '详细地址',
      `createtime` datetime DEFAULT NULL,
      `updatetime` datetime DEFAULT NULL,
      PRIMARY KEY (`shoppingid`),
      KEY `FK_Reference_10` (`orderid`),
      KEY `FK_Reference_4` (`userid`),
      CONSTRAINT `FK_Reference_10` FOREIGN KEY (`orderid`) REFERENCES `orders` (`orderid`),
      CONSTRAINT `FK_Reference_4` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of shopping
    -- ----------------------------
    
    -- ----------------------------
    -- Table structure for user
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
      `userid` varchar(64) NOT NULL COMMENT '用户表id',
      `username` varchar(50) NOT NULL COMMENT '用户名',
      `password` varchar(50) NOT NULL COMMENT '用户密码,MD5加密',
      `phone` varchar(20) DEFAULT NULL,
      `question` varchar(100) DEFAULT NULL COMMENT '找回密码问题',
      `answer` varchar(100) DEFAULT NULL COMMENT '找回密码答案',
      `role` int(4) NOT NULL COMMENT '角色0-管理员,1-普通用户',
      `createtime` datetime NOT NULL COMMENT '创建时间',
      `updatetime` datetime NOT NULL COMMENT '更新时间',
      PRIMARY KEY (`userid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of user
    -- ----------------------------
    
    
    展开全文
  • Eclipse开发分布式商城系统+完整视频代码及文档!这是分布式一部不错的视频。如果想提高java能力的话不妨看看!
  • 分布式商城项目SSM整合 一、SSM 框架整合思路 一个项目中往往有三层即 Dao 层、 Service 层和 Web 层。 在整合之前, 分析一下 SSM 这三大框架的整合思路。 1.1 dao 层 1、 在 dao 层中, mybatis 整合 spring, ...

    分布式商城项目SSM整合

    一、SSM 框架整合思路

    一个项目中往往有三层即 Dao 层、 Service 层和 Web 层。 在整合之前, 分析一下 SSM 这三大框架的整合思路。

    1.1 dao 层

    1、 在 dao 层中, mybatis 整合 spring, 通过 spring 管理 SqlSessionFactory、 mapper 代理对象。
    在整合过程中, 需要 mybatis 和 spring 的整合包。 整合包如下:

    <!-- mybatis 与 spring 继承 -->
    <dependency>
    	<groupId>org.mybatis</groupId>
    	<artifactId>mybatis-spring</artifactId>
    </dependency>
    

    2、 使用 mybatis 框架, 须创建该框架的核心配置文件——mybatis-config.xml。
    3、 使用 spring 框架, 须创建一个 spring-dao.xml 配置文件, 该文件的内容有:
    1) 配置数据源。
    2) 需要让 spring 容器管理 SqlsessionFactory, 其是单例存在的。
    3) 把 mapper 的代理对象放到 spring 容器中, 使用扫描包的方式加载 mapper 的代理对象。

    1.2 Service 层

    所有的 service 实现类都要放到 spring 容器中管理。 由 spring 创建数据库连接池, 并由spring 来管理事务。

    整合内容 对应工程
    Service 接口 ycshop-manager-interfaces
    Service 实现类 ycshop-manager-service
    Spring-service.xml 配置文件 ycshop-manager-service

    1.3 Web 层(表现层)

    表现层由 springmvc 来管理 controller。 总的来说, springmvc 框架的核心配置文件的内
    容有:
    1. 需要扫描 controller
    2. 配置注解驱动
    3. 配置视图解析器

    二 dao 整合

    2.1 mybaits-config 配置文件

    在项目 ycshop-manager-service 工程中创建 mybatis-config.xml 文件。
    在这里插入图片描述
    内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    	<!-- mybatis 的分页插件, 这个可以没有。 但是这个配置文件必须要有 -->
    	<plugins>
    		<plugin interceptor="com.github.pagehelper.PageInterceptor">
    			<property name="helperDialect" value="mysql" />
    		</plugin>
    	</plugins>
    </configuration>
    

    2.2 数据源配置文件 db.properties

    将与数据库的连接属性配置到配置文件中, 方便修改。 具体内容如下:

    jdbc.url=jdbc:mysql://47.100.x.x:3306/ycshop?characterEncoding=utf-8
    jdbc.user=xxx
    jdbc.pwd=aaa
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.initPoolSize=5
    jdbc.maxPoolSize=10
    

    其中47.100.x.x是数据库url
    ycshop是数据库名
    xxx是数据库连接的用户名
    aaa是数据库连接的密码

    2.3 spring-dao.xml 配置文件

    在这个配置文件中配置数据库连接池、 SqlSessionFactory(Mybatis 的连接工厂)、 Mybatis
    映射文件的包扫描器, 配置内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    	<!-- 引入外部配置文件(数据库的连接方式) -->
    	<context:property-placeholder location="classpath:db.properties" />
    	<!-- 配置 C3P0 的数据源 -->
    	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    		<property name="user" value="${jdbc.user}"></property>
    		<property name="password" value="${jdbc.pwd}"></property>
    		<property name="driverClass" value="${jdbc.driver}"></property>
    		<property name="jdbcUrl" value="${jdbc.url}"></property>
    		<property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
    		<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
    	</bean>
    	<!-- mapper 配置 -->
    	<!-- 让 spring 管理 sqlsessionfactory 使用 mybatis 和 spring 整合包中的 -->
    	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    		<!-- 数据库连接池 -->
    		<property name="dataSource" ref="dataSource" />
    		<!-- 加载 mybatis 的全局配置文件, 虽然这个全局配置文件是空的, 但是这个全 局配置文件是必不可少的 -->
    		<property name="configLocation" value="classpath:mybatis-config.xml" />
    		<!-- 扫描 sql 配置文件:mapper 需要的 xml 文件 -->
    		<property name="mapperLocations" value="classpath:mapper/*.xml" />
    	</bean>
    	<!-- 配置 Mapper 扫描器 -->
    	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		<property name="basePackage" value="cn.yuechenc.manager.dao.mapper" />
    	</bean>
    </beans>
    

    三 service 整合

    3.1 spring-service.xml 配置文件

    在此配置文件中配置所有的 service 包扫描以及事务管理配置。 具体配置文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
    		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
    	<context:component-scan base-package="cn.yuechenc.manager.service"></context:component-scan>
    	<!-- spring 声明式事务管理控制 配置事务管理器类 -->
    	<bean id="txManager"
    		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    		<property name="dataSource" ref="dataSource" />
    	</bean>
    	<!-- 配置事务增强(如何管理事务, 只读、 读写...) -->
    	<tx:advice id="txAdvice" transaction-manager="txManager">
    		<tx:attributes>
    			<tx:method name="save*" propagation="REQUIRED" />
    			<tx:method name="insert*" propagation="REQUIRED" />
    			<tx:method name="delete*" propagation="REQUIRED" />
    			<tx:method name="update*" propagation="REQUIRED" />
    			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
    			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
    		</tx:attributes>
    	</tx:advice>
    	<!-- aop 配置, 拦截哪些方法(切入点表达式, 拦截上面的事务增强) -->
    	<aop:config>
    		<aop:pointcut id="pt"
    			expression="execution(* cn.yuechenc.manager.service.*.*(..))" />
    		<aop:advisor advice-ref="txAdvice" pointcut-ref="pt" />
    	</aop:config>
    </beans>
    

    3.2 web.xml 文件

    在上面的整合过程中, 编写了两个 spring 的配置文件:spring-dao.xml;spring-service.xml。
    那么那么程序是怎么知道这 2 个文件的呢? 这就需要在服务层初始化 spring 容器了, 方法是
    在 ycshop-manager-service 工程下的 web.xml 文件中进行配置。
    内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    	id="WebApp_ID" version="3.1">
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath:spring-*.xml</param-value>
    	</context-param>
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>
    </web-app>
    

    四 web 层(表现层) 整合

    在ycshop-manager-web 工程中创建 spring-mvc.xml 文件。 如下:
    在这里插入图片描述
    具体内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:mvc="http://www.springframework.org/schema/mvc"
    	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
    		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    
    	<context:component-scan base-package="cn.yuechenc.manager.controller" />
    	<mvc:annotation-driven />
    	<bean
    		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<property name="prefix" value="/WEB-INF/jsp/" />
    		<property name="suffix" value=".jsp" />
    	</bean>
    </beans>
    

    4.2 web.xml 文件

    在 ycshop-manager-web 工程中创建 web.xml 配置文件。 文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    	version="3.1">
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    	<servlet>
    		<servlet-name>dispatcherServlet</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<!-- spring-*.xml:表示所有以 spirng-开头, 以.xml 结束的所有文件 classpath:表示类路径下 -->
    			<param-value>classpath:spring-*.xml</param-value>
    		</init-param>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>dispatcherServlet</servlet-name><!-- 匹配所有以.do 结尾的请求 -->
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    </web-app>
    

    到此, 开发框架就已尽整合完成, 并且完成了一个简单的示例程序。 但是到目前为止,
    我们运行程序的时候是不会成功的。 原因很简单, 在 web 层中并没有对 servie 层(服务层
    接口实现) 的引用。 而 service 层是独立发布的, 而现在我们 web 层并不能引用到 service 服
    务层的实现。
    现在就需要使用到 dubbo 来进行服务的发布。
    下一篇中来进行 dubbo 服务的发布和引用。

    展开全文
  • Eclipse搭建java分布式商城项目 博主也是在学习,看到一篇博客,自己一边学习,一边写下了这篇博客 项目模块划分 tyh-parent: 父工程, 其打包方式是 pom, 主要管理 jar 包的版本号。 项目中的所有工程都应该...

    Eclipse搭建java分布式商城项目

    项目模块划分

    • ycshop-parent: 父工程, 其打包方式是 pom, 主要管理 jar 包的版本号。 项目中的所有工程都应该继承父工程。
    • ycshop-common: 存放一些通用的工具类。 其打包方式为 jar, 被其他的工程所依赖。
    • ycshop-pojo: 存放 pojo 对象, 其打包方式是 jar。
    • ycshop-manager: 服务层工程, 又称之为聚合工程或 pom 工程。
    • ycshop-manager-dto: 数据传输对象。 (继承自 tyh-pojo 对象)
    • ycshop-manager-dao: 这是一个独立的模块, 其打包方式是 jar。
    • ycshop-manager-interfaces: 打包方式是 jar。
    • ycshop-manager-service: 打包方式是 war, 主要为了方便部署。
    • ycshop-manager-web: 表现层工程, 打包方式是 war。

    搭建工程

    1. 在这里我使用 maven 来搭建 ycshop-parent 这个父工程。

    tyh-parent 本身就是一个父工程,所以它不需要继承其他的工程, 我们主要在父工程中定义依赖 jar 包的版本和 Maven 插件的版本信息。 注意, 此处我使用的 maven 是 apache-maven-3.3.9 这个版本。
    首先点击【File】 菜单选项, 并在下拉框中选中【New】 , 接着点击【Other】!
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    修改pom文件,添加依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>cn.yuechenc</groupId>
    	<artifactId>ycshop-parent</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>pom</packaging>
    
    	<!-- 集中定义依赖版本号 -->
    	<properties>
    		<junit.version>4.12</junit.version>
    		<slf4j.version>1.6.4</slf4j.version>
    		<!-- spring 使用 4 版本, spring5 需要 JDK1.8 与 tomcat7 插件有冲突 -->
    		<spring.version>4.3.18.RELEASE</spring.version>
    		<aspectj.version>1.9.1</aspectj.version>
    		<aopalliance.version>1.0</aopalliance.version>
    		<mysql-connector.version>5.1.46</mysql-connector.version>
    		<c3p0.version>0.9.5.2</c3p0.version>
    		<jstl.version>1.2</jstl.version>
    		<servlet-api.version>2.5</servlet-api.version>
    		<jsp-api.version>2.0</jsp-api.version>
    		<jackson.version>2.9.6</jackson.version>
    		<fileupload.version>1.3.3</fileupload.version>
    		<mybatis.version>3.4.6</mybatis.version>
    		<mybatis-spring.version>1.3.1</mybatis-spring.version>
    		<pagehelper.version>5.1.2</pagehelper.version>
    	</properties>
    	<dependencyManagement>
    		<dependencies>
    			<!-- 单元测试 -->
    			<dependency>
    				<groupId>junit</groupId>
    				<artifactId>junit</artifactId>
    				<version>${junit.version}</version>
    				<scope>test</scope>
    			</dependency>
    			<!-- 日志处理 -->
    			<dependency>
    				<groupId>org.slf4j</groupId>
    				<artifactId>slf4j-log4j12</artifactId>
    				<version>${slf4j.version}</version>
    			</dependency>
    			<!-- spring 相关依赖包 -->
    			<dependency>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring-context</artifactId>
    				<version>${spring.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring-core</artifactId>
    				<version>${spring.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring-beans</artifactId>
    				<version>${spring.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring-webmvc</artifactId>
    				<version>${spring.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring-jdbc</artifactId>
    				<version>${spring.version}</version>
    			</dependency>
    			<!-- aop 相关 -->
    			<dependency>
    				<groupId>org.aspectj</groupId>
    				<artifactId>aspectjrt</artifactId>
    				<version>${aspectj.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>org.aspectj</groupId>
    				<artifactId>aspectjweaver</artifactId>
    				<version>${aspectj.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>aopalliance</groupId>
    				<artifactId>aopalliance</artifactId>
    				<version>${aopalliance.version}</version>
    			</dependency>
    			<!-- mysql 驱动 -->
    			<dependency>
    				<groupId>mysql</groupId>
    				<artifactId>mysql-connector-java</artifactId>
    				<version>${mysql-connector.version}</version>
    			</dependency>
    			<!-- c3p0 连接池 -->
    			<dependency>
    				<groupId>com.mchange</groupId>
    				<artifactId>c3p0</artifactId>
    				<version>${c3p0.version}</version>
    			</dependency>
    			<!-- jstl -->
    			<dependency>
    				<groupId>javax.servlet</groupId>
    				<artifactId>jstl</artifactId>
    				<version>${jstl.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>javax.servlet</groupId>
    				<artifactId>servlet-api</artifactId>
    				<version>${servlet-api.version}</version>
    				<scope>provided</scope>
    			</dependency>
    			<dependency>
    				<groupId>javax.servlet</groupId>
    				<artifactId>jsp-api</artifactId>
    				<version>${jsp-api.version}</version>
    				<scope>provided</scope>
    			</dependency>
    			<!-- json 相关 -->
    			<dependency>
    				<groupId>com.fasterxml.jackson.core</groupId>
    				<artifactId>jackson-core</artifactId>
    				<version>${jackson.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>com.fasterxml.jackson.core</groupId>
    				<artifactId>jackson-annotations</artifactId>
    				<version>${jackson.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>com.fasterxml.jackson.core</groupId>
    				<artifactId>jackson-databind</artifactId>
    				<version>${jackson.version}</version>
    			</dependency>
    			<!-- 文件上传组件 -->
    			<dependency>
    				<groupId>commons-fileupload</groupId>
    				<artifactId>commons-fileupload</artifactId>
    				<version>${fileupload.version}</version>
    			</dependency>
    			<!-- mybatis -->
    			<dependency>
    				<groupId>org.mybatis</groupId>
    				<artifactId>mybatis</artifactId>
    				<version>${mybatis.version}</version>
    			</dependency>
    			<!-- mybatis 与 spring 继承 -->
    			<dependency>
    				<groupId>org.mybatis</groupId>
    				<artifactId>mybatis-spring</artifactId>
    				<version>${mybatis-spring.version}</version>
    			</dependency>
    			<!-- 分页组件 -->
    			<dependency>
    				<groupId>com.github.pagehelper</groupId>
    				<artifactId>pagehelper</artifactId>
    				<version>${pagehelper.version}</version>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    	<build>
    		<finalName>${project.artifactId}</finalName>
    		<plugins>
    			<!-- 资源文件拷贝插件 -->
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-resources-plugin</artifactId>
    				<version>2.7</version>
    				<configuration>
    					<encoding>UTF-8</encoding>
    				</configuration>
    			</plugin>
    			<!-- java 编译插件 -->
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>3.2</version>
    				<configuration>
    					<source>1.7</source>
    					<target>1.7</target>
    					<encoding>UTF-8</encoding>
    				</configuration>
    			</plugin>
    		</plugins>
    		<pluginManagement>
    			<plugins>
    				<!-- 配置 Tomcat 插件 -->
    				<plugin>
    					<groupId>org.apache.tomcat.maven</groupId>
    					<artifactId>tomcat7-maven-plugin</artifactId>
    					<version>2.2</version>
    				</plugin>
    			</plugins>
    		</pluginManagement>
    	</build>
    
    </project>
    

    Pom.xml 文件说明:
    1、 节点: 依赖管理, 管理的就是 jar 包的版本号, 它里面并
    不是真正的依赖, 如果你继承 ycshop-parent 这个工程, 会发现什么 jar 包也没有依赖过来。 工
    程中用到的所有 jar 包都应该在这里有定义。
    2、 provided属性: 除了打包时不打包, 部署时也不会部署; 别的时候
    都会全程参与, 编译、 测试、 运行时候都会用到。 因为我们要把这个 war 包部署到 tomcat
    里面去, tomcat 里面都会提供 servlet 和 jsp 的 API, 如果把它也打包到 war 包里面, 可能会
    有冲突。
    3、 节点: pluginManagemen 也是管理插件的版本, 这里面并不是
    对插件实际的依赖, 而只是管理插件的版本。

    2. 搭建 ycshop-common 工程

    ycshop-common 工程主要存放通用的工具类, 它本身是一个子工程, 所以它需要继承父工
    程, 并且它的打包方式是 jar。 注意, ycshop-common 工程并不是一个独立的模块。
    与创建 ycshop-parent 项目一样的操作方式, 创建一个【maven project】 。

    在这里插入图片描述
    修改pom文件,添加依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>cn.yuechenc</groupId>
    		<artifactId>ycshop-parent</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    	</parent>
    	<artifactId>ycshop-common</artifactId>
    
    	<!-- 依赖 jar 包:先只添加单元测试和日志处理的 jar 包依赖 -->
    	<dependencies>
    		<!-- 单元测试 -->
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<!-- 日志处理 -->
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-log4j12</artifactId>
    		</dependency>
    	</dependencies>
    </project>
    
    3.搭建 ycshop-pojo 工程

    ycshop-pojo 工程主要存放项目中通用的 pojo 对象。
    和创建ycshop-commom工程同样的方法创建一个名为“ycshop-pojo”的maven工程
    在这里插入图片描述
    修改pom文件,添加依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>cn.yuechenc</groupId>
    		<artifactId>ycshop-parent</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    	</parent>
    	<artifactId>ycshop-pojo</artifactId>
    
    	<!-- 依赖 jar 包:先只添加单元测试的 jar 包依赖 -->
    	<dependencies>
    		<!-- 单元测试 -->
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    </project>
    
    4. 搭建 ycshop-manager 工程

    搭建 ycshop-manager 工程, 这是后台管理子项目服务工程。 这个工程里面需要很多模块,
    我们须把这些模块单独拆分, 所以它应该是一个聚合工程。
    聚合工程选择 pom 打包形式。 并选择父项目 ycshop-parent
    在这里插入图片描述
    修改pom文件,使其依赖于ycshop-common和ycshop-pojo工程

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>cn.yuechenc</groupId>
    		<artifactId>ycshop-parent</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    	</parent>
    	<artifactId>ycshop-manager</artifactId>
    	<packaging>pom</packaging>
    
    	<dependencies>
    		<dependency>
    			<groupId>cn.yuechenc</groupId>
    			<artifactId>ycshop-common</artifactId>
    			<version>0.0.1-SNAPSHOT</version>
    		</dependency>
    		<dependency>
    			<groupId>cn.yuechenc</groupId>
    			<artifactId>ycshop-pojo</artifactId>
    			<version>0.0.1-SNAPSHOT</version>
    		</dependency>
    	</dependencies>
    </project>
    
    5.搭建 ycshop-manager-dto 模块工程

    在这里插入图片描述
    在这里插入图片描述
    此模块作为一个辅助的jar包,不需要其他的依赖。

    6.搭建ycshop-manager-dao模块工程

    搭建 tyh-manager-dao 模块的步骤同上面 tyh-manager-dto 一样, 只不过是模块名字改为
    tyh-manager-dao 而已。
    修改pom文件,添加dao层所需依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>cn.yuechenc</groupId>
    		<artifactId>ycshop-manager</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    	</parent>
    	<artifactId>ycshop-manager-dao</artifactId>
    
    	<dependencies>
    		<!-- 对 dto 的依赖 -->
    		<dependency>
    			<groupId>cn.yuechenc</groupId>
    			<artifactId>ycshop-manager-dto</artifactId>
    			<version>0.0.1-SNAPSHOT</version>
    		</dependency>
    		<!-- 单元测试 -->
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<!-- 日志处理 -->
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-log4j12</artifactId>
    		</dependency>
    		<!-- mysql 驱动 -->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    		</dependency>
    		<!-- c3p0 连接池 -->
    		<dependency>
    			<groupId>com.mchange</groupId>
    			<artifactId>c3p0</artifactId>
    		</dependency>
    		<!-- mybatis -->
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis</artifactId>
    		</dependency>
    		<!-- mybatis 与 spring 集成 -->
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis-spring</artifactId>
    		</dependency>
    		<!-- 分页组件 -->
    		<dependency>
    			<groupId>com.github.pagehelper</groupId>
    			<artifactId>pagehelper</artifactId>
    		</dependency>
    	</dependencies>
    </project>
    
    7.搭建 ycshop-manager-interfaces 模块工程

    ycshop-manager-interfaces 模块为 service 模块的接口模块。
    搭建方式与 dao 模块的搭建方式一致, 打包方式为 jar 包方式。(此处省略)
    修改pom文件,使其依赖于dto和dao两个模块。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>cn.yuechenc</groupId>
    		<artifactId>ycshop-manager</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    	</parent>
    	<artifactId>ycshop-manager-interfaces</artifactId>
    
    	<dependencies>
    		<!-- 对 dto 的依赖 -->
    		<dependency>
    			<groupId>cn.yuechenc</groupId>
    			<artifactId>ycshop-manager-dto</artifactId>
    			<version>0.0.1-SNAPSHOT</version>
    		</dependency>
    		<!-- 对 dao 的依赖 -->
    		<dependency>
    			<groupId>cn.yuechenc</groupId>
    			<artifactId>ycshop-manager-dao</artifactId>
    			<version>0.0.1-SNAPSHOT</version>
    		</dependency>
    	</dependencies>
    </project>
    
    8.搭建 ycshop-manager-service 模块工程

    该模块是个 war 工程, 既然 tyh-manager 工程是个聚合工程, 故可以聚合无数个模块,
    但是总归要靠一个 war 工程来将所有的模块聚合起来, 因此我们才需要新建一个 war 工程,
    将来用于部署使用(可以单独部署 service 应用做到前后端分离) 。

    在这里插入图片描述
    此时工程会报错,是因为缺少web.xml文件
    在这里插入图片描述
    在图中的webapp文件夹下创建WEB-INF文件夹,在他下面创建一个xml文件,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"  version="3.1">
    </web-app>
    

    在这里插入图片描述
    此时已近解决了报错的问题,接下来开始添加依赖——服务处需要调用dao层,所以要依赖于dao,另外还需要使用spring,

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>cn.yuechenc</groupId>
    		<artifactId>ycshop-manager</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    	</parent>
    	<artifactId>ycshop-manager-service</artifactId>
    	<packaging>war</packaging>
    
    	<dependencies>
    		<!-- 对 dao 的依赖 -->
    		<dependency>
    			<groupId>cn.yuechenc</groupId>
    			<artifactId>ycshop-manager-dao</artifactId>
    			<version>0.0.1-SNAPSHOT</version>
    		</dependency>
    		<!-- 对接口的依赖 -->
    		<dependency>
    			<groupId>cn.yuechenc</groupId>
    			<artifactId>ycshop-manager-interfaces</artifactId>
    			<version>0.0.1-SNAPSHOT</version>
    		</dependency>
    		<!-- spring 相关依赖包 -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-core</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-beans</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    		</dependency>
    		<!-- aop 相关 -->
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjrt</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjweaver</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>aopalliance</groupId>
    			<artifactId>aopalliance</artifactId>
    		</dependency>
    	</dependencies>
    </project>
    
    9.搭建 ycshop-manager-web 工程

    ycshop-manager-web 工程虽然从名称上看好像是一个 ycshop-manager 的子工程。 但是在创建
    的时候为了让服务和前端页面分离开来, 最好是将 web 工程单独作为一个项目, 不要作为
    聚合工程的子工程
    在这里插入图片描述
    在这里插入图片描述
    因为是war打包方式,同样会报错,解决方式和service一样
    修改pom文件,添加依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>cn.yuechenc</groupId>
    		<artifactId>ycshop-parent</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    	</parent>
    	<artifactId>ycshop-manager-web</artifactId>
    	<packaging>war</packaging>
    
    	<dependencies>
    		<!-- 单元测试 -->
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<!-- 日志处理 -->
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-log4j12</artifactId>
    		</dependency>
    		<!-- spring 相关依赖包 -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-core</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-beans</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    		</dependency><!-- aop 相关 -->
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjrt</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjweaver</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>aopalliance</groupId>
    			<artifactId>aopalliance</artifactId>
    		</dependency>
    		<!-- jstl -->
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>jstl</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>servlet-api</artifactId>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>jsp-api</artifactId>
    			<scope>provided</scope>
    		</dependency>
    	</dependencies>
    </project>
    

    到此,我们的第一个系统架构就算是搭建完成了

    10.使用 maven tomcat 插件启动工程

    如果要运行 web 工程, 按照传统的方式应该是将其发布到一个 tomcat 服务器中, 然后
    启动服务器来运行这个工程。
    但是在这里我们应该在其 pom.xml 文件中配置一个 maven 的 tomcat 插件。 那么为什么
    要使用 maven tomcat 插件来启动 web 工程呢?
    这是因为在互联网项目中, 动辄十几个甚至好几十个 web 工程, 如果按照传统的添加
    tomcat 服务器的方式来启动的话, 那么我们为了避免端口冲突, 每增加一个 web 工程都要
    修改三个端口, 非常麻烦。 而使用 maven tomcat 插件来启动工程, 则只需改一个端口即可,
    显然简单了很多。
    先来看 web 工程。 它可以独立运行, 那么应该怎么运行呢?
    为了方便测试, 在 webapp 文件夹下, 创建一个 Index.jsp 文件。 如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1>欢迎进入越宸阁!</h1>
    </body>
    </html>
    

    在web工程的pom文件中加入tomcat插件

    <!-- 配置 tomcat 插件 -->
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.tomcat.maven</groupId>
    				<artifactId>tomcat7-maven-plugin</artifactId>
    				<configuration>
    					<port>8080</port>
    					<path>/</path>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    

    说明:
    1、 其中<path>/<path>的意思是输入完 localhost:端口号之后便可以直接访问工程首页了
    2、 <port>8080</port>的意思是指定该 web 工程的访问端口号。
    此时我们最好对之前的项目都进行install使其重新编译
    因为项目之间存在依赖关系,所以最好按照创建顺序依次install
    在这里插入图片描述
    下面,我们启动项目
    在这里插入图片描述
    在 Goals 输入框中输入: clean tomcat7:run, 点击【Apply】 和【Run】 来运行该 web 工程。
    在这里插入图片描述
    运行完成,会在控制台打印出运行的url和端口
    在这里插入图片描述
    最后,我们在浏览器中访问此url
    在这里插入图片描述

    11.使用 maven tomcat 插件启动聚合工程

    与上一节基本一样。 在 ycshop-manager 项目 pom.xml 中配置 tomcat 插件。 并修改其端口,
    与 web 项目端口不同。

    <!-- 配置 tomcat 插件 -->
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.tomcat.maven</groupId>
    				<artifactId>tomcat7-maven-plugin</artifactId>
    				<configuration>
    					<port>8081</port>
    					<path>/</path>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    

    和启动web同样的方法启动manager项目
    此时会打印出8081端口的url
    在这里插入图片描述
    到此我们的工程就算是搭建完成了。

    下一篇,将会对整个系统进行ssm框架的整合

    展开全文
  • 学习笔记(1)分布式商城技术与业务概述 分布式商城主要面临两个问题,其一是面临高并发高可用的技术问题,另一是面临复杂的业务问题。下面依次简要分析两种问题。 高并发高可用技术概述 概念 首先明确什么是分布式...

    学习笔记(1)分布式商城技术与业务概述

    分布式商城主要面临两个问题,其一是面临高并发高可用的技术问题,另一是面临复杂的业务问题。下面依次简要分析两种问题。

    高并发高可用技术概述

    概念

    首先明确什么是分布式系统

    “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。分布式系统(distributed system)是建立在网络之上的软件系统。——《分布式系统原理与范型》

    集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。

    系统防线

    海量的请求会涌向系统前台,后台服务器和数据库服务器。三者都面临这高并发高可用的巨大挑战,因此必须采取各种措施优化其性能,保证用户体验。此次分布式商城项目为前后端分离项目。该项目的集中点为后台和数据库服务器。

    对于后台服务器,大量合法请求会涌到后台服务器。因此,后台服务器就需要解决高并发造成的各种问题,举例如下。

    数据的准确性。例如超卖问题、并发一致性问题等。超卖问题,即用户成功下单的数量超过了商品的库存。在处理超卖时,还要考虑一些不良的恶意行为。例如,如果竞争对手故意将商品抢到手但却不付款,该如何处理?并发环境下的一致性问题。如果使用了缓存,如何保证缓存的一致性?如果使用了分布式,如何保证分布式事务的一致性?

    数据的时效性。除了要在并发环境下保证数据的准确性以外,还要控制数据的时效性。例如,用户在下单后,系统务必要在几秒内返回结果,保证用户体验。

    系统的可用性。为了防止单节点故障,保证系统的高可用性,就需要将秒杀系统部署在由多个节点组成的集群上。集群如何搭建?应该依据什么将海量请求分流到集群中的不同节点上?在机房部署集群时,应该如何具体划分?

    系统的稳定性。除了高可用以外,我们也应当尽力提高集群中各个节点的性能。高并发会导致部分节点的性能下降,甚至造成某些节点的崩溃。我们如何在有限的硬件条件下,提高单节点的性能,从而提高整个集群系统的稳定性?“系统的可用性”是指搭建集群,“系统的稳定性”是指提高集群中每个节点的性能。

    数据库服务器。数据库作为整个系统的最后一道防线。在高并发问题中,数据库面对的核心问题是“并发量”、“并发访问”和“存储容量”。

    并发量。对于一般的单节点关系型数据库来说,仅仅能够稳定的支撑千位数的并发量。因此在高并发环境中,往往最先遇到并发瓶颈的就是数据库。简言之,数据库是整个系统最重要的一环,但同时又是并发能力较弱的一层。

    并发数。当海量请求经过了前台和后台的重重拦截抵达数据库时,必然会产生并发问题。那么,应该如何既避免并发带来的问题,又能高效进行数据存储呢?

    存储容量。一个关系型数据库的存储容量有限。对于大型电商平台而言,是无法将全部的数据保存到同一个数据库中的。那么,数据应该如何存储?存储后,如何保证数据库的高可用?

    分布式服务调用

    分布式服务调用使用RPC技术,下面为学习笔记:

    RPC

    RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

    在一个典型 RPC 的使用场景中,包含了服务发现、负载、容错、网络传输、序列化等组件,其中“RPC 协议”就指明了程序如何进行网络传输和序列化。下图为RPC的流程图。

    img

    RPC 核心功能是指实现一个 RPC 最重要的功能模块,就是上图中的”RPC 协议”部分:

    一个 RPC 的核心功能主要有 5 个部分组成,分别是:客户端、客户端 Stub、网络传输模块、服务端 Stub、服务端等。

    img

    下面分别介绍核心 RPC 框架的重要组成:

    • 客户端(Client):服务调用方。
    • 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端。
    • 服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理。
    • 服务端(Server):服务的真正提供者。
    • Network Service:底层传输,可以是 TCP 或 HTTP。

    Dubbo

    Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

    节点角色说明
    节点 角色说明
    Provider 暴露服务的服务提供方
    Consumer 调用远程服务的服务消费方
    Registry 服务注册与发现的注册中心
    Monitor 统计服务的调用次数和调用时间的监控中心
    Container 服务运行容器
    调用关系说明
    1. 服务容器负责启动,加载,运行服务提供者。
    2. 服务提供者在启动时,向注册中心注册自己提供的服务。
    3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
    4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。

    连通性

    • 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
    • 监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
    • 服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
    • 服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
    • 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
    • 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
    • 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
    • 注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

    健壮性

    • 监控中心宕掉不影响使用,只是丢失部分采样数据
    • 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
    • 注册中心对等集群,任意一台宕掉后,将自动切换到另一台
    • 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
    • 服务提供者无状态,任意一台宕掉后,不影响使用
    • 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

    伸缩性

    • 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心
    • 服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者

    升级性

    当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力。下图是未来可能的一种架构:

    节点角色说明
    节点 角色说明
    Deployer 自动部署服务的本地代理
    Repository 仓库用于存储服务应用发布包
    Scheduler 调度中心基于访问压力自动增减服务提供者
    Admin 统一管理控制台
    Registry 服务注册与发现的注册中心
    Monitor 统计服务的调用次数和调用时间的监控中心

    分布式商城业务概述

    下面介绍整个分布式商城的业务逻辑:

    本项目由两个系统,其一为面向公众的前台系统,另一为管理和业务人员的后台系统
    在这里插入图片描述

    在这里插入图片描述

    后台管理系统的架构:gmall-admin-web用于接收前端传来的请求并处理相应请求。后台提供的服务有商品服务、用户服务、订单服务、内容服务以及营销服务。各服务之间的调用通过RPC实现。

    前台管理系统的架构:gmall-shop-portal(boot-web)用于接收前端传来的请求并处理相应请求。后台提供的服务有商品服务、搜索服务、订单服务、购物车服务以及支付服务。各服务之间的调用通过RPC实现。

    项目结构:
    gmall-parent[pom]
    gmall-common(通用模块)【工具类,通用依赖】
    gmall-api(dubbo分包建议,接口层&Model层抽取)
    gmall-portal-web(前端web RestAPI层,对接app以及web)
    gmall-admin-web(后台管理web-restapi层,对接前端的Vue项目)
    gmall-pms(商品管理系统)
    gmall-oms(订单管理系统)
    gmall-ums(用户管理系统)
    gmall-sms(营销管理系统[优惠券、活动等])
    gmall-cart(购物车系统)
    gmall-search(检索系统)
    gmall-order(订单系统)

    展开全文
  • java分布式商城项目环境搭建4-CentOS7.6-搭建分布式文件系统 FastDFS FastDFS简介 FastDFS 是一个开源的高性能分布式文件系统(DFS)。它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要...
  • ​ 各位小伙伴大家好,有段时间没有更新文章了,最近打算更新一个系列文章,给大家手把手的完成一个基于SpringCloudAlibaba的分布式商城系统,以下是内容的相关大纲 1、商城业务架构知识介绍   本章主要是通过电商...
  • 分布式商城项目–编写UserService测试接口 接下来我们来编写一个测试接口,测试整个项目能否成功运行 首先我们在数据库的“user”表中增加一条记录,作为测试使用; 这里我们做这样一个测试,编写一个方法去通过...
  • 基于SSM+Dubbo+Zookeeper+Redis+Elasticsearch+ActiveMQ+Shiro+Nginx+Vue的大型分布式购物电商系统 需要源码、数据库、开发部署文档、教程、ppt、文档的私聊qq:804625792 ...
  • 分布式商城项目-后台开发-文件上传和下载 一 fastdfs-client-java 依赖包 在 编 写 文 件 上 传 下 载 客 户 端 之 前 , 需 要 处 理 fastdfs-client-java 依 赖 包 。 获 取 fastdfs-client-java 依赖包有两种方式...
  • 分布式商城项目-后台开发1-商品分类功能实现 首先我们从一个最简单的,不涉及数据关系的功能入手——商品分类功能 商品分类管理包括: 功能拆分 实现方式 查询商品分类信息 编写select方法查询数据库记录 ...
  • 分布式商城项目–dubbo 服务的发布和引用。 dubbo服务需要zookeeper服务的支持,之前我们已经介绍过zookeeper的安装配置,这里就不在赘述 1.启动zookeeper 2. Provider 服务提供者 service 配置发布到 dubbo 在本...
  • java分布式商城项目环境搭建4-CentOS7.6-安装Zookeeper 首先要安装zookeeper服务,需要先下载zookeeper的安装包。 进入Download(自己创建的存贮下载资源的文件夹)文件夹下 执行下载命令: [root@localhost ...
  • java分布式商城项目环境搭建1-CentOS7.6-安装JDK1.8 首先检索包含java的列表 yum list java* 检索1.8的列表 yum list java-1.8* 安装1.8.0的所有文件 yum install java-1.8.0-openjdk* -y 使用命令检查是否安装成功 ...
  • java分布式商城项目环境搭建1-CentOS7.6-安装MySQL5.7 1 下载并安装MySQL官方的 Yum Repository [root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 使用上面...
  • 分布式商城项目–逆向工程生成pojo对象和mapper文件 使用逆向工程我们需要使用到一个工具包下面我给出该工具类的下载地址: 首先我们将工具类解压到E盘,进入文件夹,如图: 修改generator-ycshop文件 保存退出 ...
  • LDBZ-SHOP 使用技术(个人时间和精力有限,项目不定期更新中....): 后台 Jenkins作为持续集成 使用Spring+Spring MVC+MyBatisSSM框架 数据存储使用MySQL和Redis 网页采用freemarker生成静态化页面 ...
  • java分布式商城项目环境搭建3-CentOS7.6-安装Tomcat 9.0 首先到Tomcat官网下载Tomcat。 接下来,在家目录创建一个Download文件夹,用来存储,我们下载的资源 下载Tomcat9.0 在图中标注的地方右键=>复制链接, 就...
  • 分布式商城购物车实现

    千次阅读 2018-12-05 17:25:50
    title: 完成购物工程和订单工程 购物工程流程 购物车添加 业务方法 @Override public String addCart(Cart cart, User user, String cartToken) { ... //是否登录进行不同的处理 ... if(user == null){//没有用户登录...
  • 分布式商城项目-后台开发2-商品管理功能实现(一) 商品管理功能包括: 功能拆分 实现方法 显示商品列表 查询数据库信息并展示 添加商品 通过后端程序在数据库增加记录 修改商品 通过后端程序更新数据库...
  • 分布式商城秒杀实现

    千次阅读 2018-12-05 17:22:07
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变title: 秒杀工程的演变,在一致性要求下面对高并发和高速读写秒杀页面倒计时秒杀核心service的演变存在问题问题解决演变:1.业务层共享资源加锁1.1悲观锁的思想...
  • shop-dubbox 分布式商城

    千次阅读 2017-05-06 13:22:30
    分布式框架: zookeeper dubbox2.8.4 分布式分布式调用链 zikpin brove 分布式日志分析 elk Elasticsearch,Logstash,Kibana Elasticsearch:搜索,提供分布式全文搜索引擎  Logstash: 日志收集,管理,存储 ...
  • java分布式商城项目环境搭建6-CentOS7.6搭建Nginx & FastDFS 整体架构 一、 Nginx 介绍 1.1 Nginx 简介 Nginx 是一款自由的、 开源的、 高性能的 HTTP 服务器和反向代理服务器; 同时也是一 个 IMAP、 POP3、 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,613
精华内容 1,845
关键字:

分布式商城