谷粒商城项目实战——01前期工作(写得比较乱, 后期需要重新整理)

本文详细介绍了一个基于微服务架构的电商项目实践,包括各业务模块的数据源配置、代码生成流程、前后端开发框架的选择与配置、服务注册与发现、远程调用、配置中心管理及网关路由设置等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

零.

1. 业务对应的数据库
  1. product -> gulimall-pms
  2. coupon -> gulimall-sms
  3. member -> gulimall-ums
  4. order -> gulimall-oms
  5. ware -> gulimall-wms

一. 人人开源

1. renren-fast-vue: 前台
  1. renren-fast-vue

https://www.jianshu.com/p/2be02670484e

2. renren-fast: 后台
  1. 查看application.yml配置文件中调用的环境

    image-20210427115010087

  2. 在对应的环境中修改数据源信息

    spring:
        datasource:
            type: com.alibaba.druid.pool.DruidDataSource
            druid:
                driver-class-name: com.mysql.cj.jdbc.Driver
                url: jdbc:mysql://www.jiangfengtime.top:3307/gulimall_admin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
                username: root
                password: 123456
    

    image-20210427115208918

  3. 在数据库中创建所需的数据库

    image-20210427115313525

3. renren-generator代码生成器
1. 代码生成
  1. 下载

  2. 导入项目

  3. 配置

    image-20210427123406543

    image-20210427123459299

  4. 启动项目

    启动后通过浏览器访问:localhost:80就是代码生成器的可视化界面

    image-20210427123716805

  5. 点击生成代码, 就会下载所生成的代码, 把main目录下的代码拷贝到指定的模块中即可

    image-20210427124412875
2. 相关包引入

由于此时还有很多的包没有引入, 所以还需要引入所需的包

  1. 创建一个公共模块, 用于引入公共的配置

  2. 解决dao层的缺少的依赖, 引入mybatis-plus

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.2</version>
    </dependency>
    
  3. 解决en’tity层缺少的依赖, 引入lombok

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.20</version>
    </dependency>
    
  4. 引入service缺少的工具类

    image-20210427130459367

    去之前导入的renren-fast项目中导入对应的公共类

    image-20210427130602495

  5. 引入R后, R中会报错, 还需要引入

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.4.14</version>
    </dependency>
    
  6. 引入Query后, Query会报错

    image-20210427131432099

    还需要引入

    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>
    

    image-20210427132328767

  7. 此时只有controller层报错

    image-20210427130752004

    这个是和权限控制相关的注解, 现在还用不到可以去代码生成器中将这些注解注释掉

    image-20210427132503701

  8. 然后重新使用代码生成器生成相关代码, 导入到项目即可

2. nacos注册中心
  1. 下载nacos服务器并启动

    1. 下载地址: https://github.com/alibaba/nacos/releases

    2. 启动

    image-20210426095804090

  2. 引入maven依赖

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
  3. 在application.yml中配置

# 配置nacos的服务地址
spring:
    cloud:
      nacos:
        discovery:
          server-addr: 127.0.0.1:8848
    # 为每个服务设置一个服务名, 如果不配置则看不到
    application:
      name: gulimall-coupon
  1. 在启动类中添加注解

    @EnableDiscoveryClient
    
  2. web ui页面: http://localhost:8848/nacos/

    image-20210426095408683

3. 集成Feign
  1. 引入openFeign依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
  2. 编写一个接口, 告诉SpringCloud这个接口需要调用远程服务

    如果要在member模块中远程调用coupon中的方法, 则需要在member中创建一个接口方法, 用于指定该方法对应的远程调用发服务名和其对应的方法

    /**
     * 指定远程调用的服务名
     */
    @FeignClient("gulimall-coupon")
    public interface CouponFeignService {
        /**
         * 如果本模块中调用接口中的当前方法, 就会去注册中心找
         * "gulimall-coupon"中的"/coupon/coupon/member/list"方法
         *
         * @return
         */
        @RequestMapping("/coupon/coupon/member/list")
        public R memberCoupons();
    }
    
  3. 在启动类中开启远程调用

    @SpringBootApplication
    @EnableDiscoveryClient  // 开启Nacos服务
    // 开启Feign服务, 并指定远程调用接口的全路径包名
    @EnableFeignClients(basePackages = "com.hjf.gulimall.member.feign")    
    public class GulimallMemberApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(GulimallMemberApplication.class, args);
        }
    }
    
4. nacos配置中心
1. 配置

通过@value注解可以读取配置文件中的内容, 但是如果要修改配置文件中的内容则需要重新启动服务, 所以可以通过nacos来动态配置

  1. 引入nacos作为配置中心的依赖

    <!-- 配置中心来做配置管理 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
  2. 在项目中创建bootstrap.properties配置文件, 并在配置文件中指定服务名称和配置中心的地址

    spring.application.name=gulimall-coupon
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    

    image-20210426173347987

  3. nacos配置中创建配置文件

    启动项目时日志文件中可以看见项目加载一个日志文件, 文件名:应用名.properties

    image-20210426172610625

    image-20210426172732393

    Data ID 就是配置文件的名称

    image-20210426172813717

  4. 在项目的controller中添加自动刷新的注解@RefreshScope, 以及通过@Value来动态获取配置文件中的值

    image-20210426172947838

  5. 此时只要修改配置中心中的配置文件内容, 就可以动态的修改其配置内容

2. nacos细节
1. 命名空间
  1. 命名空间: 配置隔离,

  2. 默认是调用public命名空间的配置文件

  3. 调用指定命名空间

    查看命名空间对应的id

    image-20210426175810829

  4. 在配置文件中指定生效命名空间的id

spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 指定命名空间
spring.cloud.nacos.config.namespace=80535f37-eaa4-4b2f-b43d-471c54f63eee
# 指定分组
spring.cloud.nacos.config.group=test

image-20210426175929114

  1. 可以利用命名空间为不同的业务场景生成特定的配置文件. 如: 开发, 测试, 生产
  2. 每个微服务之间互相隔离配置, 每个微服务都创建自己的命名空间, 只加载自己命名空间下的所有配置
2. 配置分组
  1. 默认所有的配置集都属于: DEFAULT_GROUP

  2. 指定分组

    spring.application.name=gulimall-coupon
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    # 指定命名空间
    spring.cloud.nacos.config.namespace=80535f37-eaa4-4b2f-b43d-471c54f63eee
    # 指定分组
    spring.cloud.nacos.config.group=test
    
3. 同时加载多个数据集
  1. 将配置文件拆分成多个配置文件

    image-20210427175410034

  2. bootstrap.properties中进行配置指定

    spring.application.name=gulimall-coupon
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    # 指定命名空间
    spring.cloud.nacos.config.namespace=d77d0c77-269f-4cac-8984-21ec5ad40410
    # 第一个配置文件的名称, 组别, 是否动态更改
    spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
    spring.cloud.nacos.config.ext-config[0].group=dev
    spring.cloud.nacos.config.ext-config[0].refresh=true
    # 第二个配置文件的名称, 组别, 是否动态更改
    spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
    spring.cloud.nacos.config.ext-config[1].group=dev
    spring.cloud.nacos.config.ext-config[1].refresh=true
    # 第三个配置文件的名称, 组别, 是否动态更改
    spring.cloud.nacos.config.ext-config[2].data-id=other.yml
    spring.cloud.nacos.config.ext-config[2].group=dev
    spring.cloud.nacos.config.ext-config[2].refresh=true
    
5. gateway网关
  1. 引入依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    
  2. application.properties配置文件

    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    spring.application.name=gulimall-gateway
    
    server.port=88
    
  3. nacos中的配置信息

    spring:
        application:
            name: gulimall-gateway
    
  4. bootstrap.yml

    spring.application.name=gulimall-coupon
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    spring.cloud.nacos.config.namespace=e498c541-4f0c-4ea4-92fc-15a05052517a
    spring.cloud.nacos.config.group=dev
    
  5. 配置路由规则application.yml

    spring:
      cloud:
        gateway:
          routes:
            - id: baidu_route
              uri: https://www.baidu.com
              predicates:
                - Query=url,baidu
    
            - id: qq_route
              uri: https://www.qq.com
              predicates:
                - Query=url,qq
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值