up:: SpringCloud之session共享机制

说明: 本篇博客主要是关于商品分类与商品模块的编写,至于为何这两部分放进同一模块中,请复习前面的所讲内容

SpringCloud模块如何拆分

一条准则: 将有关代码连同包名复制粘贴过来,根据爆红问题修改代码!!!


新建模块

说明: 模块的新建过程前面讲过很多了嘞。。。

新建多模块项目

先新建包,包名的命名方式如上图所示,上面我们开发的模块里面的包名建立方式以及命名方式也是和上图一样的。。。

本方法适用于上面我们开发的用户模块。。。前面忘记说了。。。这里补上


引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>cloud-mall-practice</artifactId>
        <groupId>com.imooc</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
 
    <artifactId>cloud-mall-category-product</artifactId>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.imooc</groupId>
            <artifactId>cloud-mall-user</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.13</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
    </dependencies>
 
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

有些依赖是后续在开发中遇到添加到,后面遇到会进行说明。。

配置文件

server.port=8082
 
spring.datasource.name=imooc_mall_datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/imooc_mall?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=20020829
 
mybatis.mapper-locations=classpath*:mappers/*.xml
 
logging.pattern.console=%clr(%d{${LOG_DATEFORMAT_PATTERN:HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}
 
eureka.client.service-url.defaultZone=http://localhost:8000/eureka/
 
spring.application.name=cloud-mall-category-product
 
spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=

主要是修改下端口号,其它配置前面学习都有说明。。。

先开发商品分类,将有关代码都复制过来

说明: 相关代码可以复习;

SpringBoot电商项目商品分类模块介绍

处理报红

先处理相关报红的导包问题。。。

观察错误可知,除了MVC三层相关类外,还需要这几个类,我们继续复制粘贴过来

同理,还有VO层下的:

最后就是xml文件的导包问题

我们批量替换即可

有关此模块中的商品分类改造完成,下面的商品详情的改造方法与此篇博客一致,不再赘述!

添加启动类

package com.imooc.cloud.mall.practice.categoryproduct;
 
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
 
/**
 * 描述:     CategoryProductApplication
 */@SpringBootApplication
@EnableRedisHttpSession
@EnableFeignClients
@MapperScan(basePackages = "com.imooc.cloud.mall.practice.categoryproduct.model.dao")
public class CategoryProductApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(CategoryProductApplication.class, args);
    }
}

说明: 我们使用了Redis进行缓存,所以我们依赖于用户模块,用户模块配置了session缓存的。。。而且商品模块也要依赖于用户模块的登陆,所以我们依赖引入了用户模块。

        <dependency>
            <groupId>com.imooc</groupId>
            <artifactId>cloud-mall-user</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

参考:SpringCloud之session共享机制

配置缓存

说明: 忘记了springboot电商项目为啥添加redis缓存的可以复习: SpringBoot电商项目商品分类模块利用Redis缓存加速响应

将商品分类目录缓存下来,因为不经常改动,redis访问速度远远大于mysql的。

网关配置过滤商品分类

我们前面配置过用户过滤SpringCloud之网关模块开发SpringCloud之管理员过滤器开发

注意上面的path路径,我们访问测试的时候,上下文需要添加这个路径,才能经过网关过滤。。。

测试!!!

登陆普通用户

登陆管理员账户

添加目录

更新目录

删除目录