• 谷粒商城-基础篇-Day01


    一、搭建环境

    创建五个模块

    1、gulimall-member(会员模块)

    2、gulimall-order(订单模块)

    3、gulimal-product(商品服务模块)

    4、gulimall-ware(仓储服务模块)

    5、gulimall-coupon(优惠卷模块)

    引入spring-web和openfeign的依赖

    在这里插入图片描述

    整合MybatisPlus

    1、导入数据源

    2、配置

    1、配置数据源:

    ​ (1)、导入数据库的驱动

    ​ (2)、在application.yml配置数据源相关信息

    2、配置MyBatis-Plus

    ​ 使用@MapperScan

    ​ 告诉Mybatis-Plus,Sql映射文件的位置

    mybatis-plus:
      config-location: classpath:/mapper/**/*.xml
    
    • 1
    • 2

    eg:

    spring:
      datasource:
        username: root
        password: "20020630"
        url: jdbc:mysql://192.168.205.128:3306/gulimall_wms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
        driver-class-name: com.mysql.cj.jdbc.Driver
    mybatis-plus:
      config-locations: classpath:/mapper/**/*.xml
      #统一配置id主键自增
      global-config:
        db-config:
          id-type: auto
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    利用逆向工程生成相关代码

    进行相关接口测试

    二、将微服务添加到nacos注册中心中

    common模块导入alibaba.cloud

    
        
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.2.5.RELEASE
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    导入nacos依赖

    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
        2.2.5.RELEASE
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    添加配置

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
            #服务名称
      application:
        name: gulimall-coupon
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用注解开启服务控制与发现

    在微服务模块的启动类上

    @EnableDiscoveryClient
    
    • 1

    已经注册到nacos中

    在这里插入图片描述

    将其他模块的微服务用同样的方法都注册到nacos中

    三、OpenFein测试远程调用

    测试:使得member(会员)模块能远程调用coupon模块(优惠卷)

    在优惠卷模块的contoller中添加一个查询优惠卷的方法

    在member模块的pom文件下添加远程调用依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    @RequestMapping("/member/list")
    public R memberCoupons(){
    
        //使用假数据模拟
        CouponEntity coupon=new CouponEntity();
        coupon.setCouponName("满100减20");
        return R.ok().put("coupons",coupon);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    想要在会员模块远程调用这个方法

    创建一个接口放在feign包下
    使用@FeignClien指明要调用的服务名称

    //注册中心中coupon的服务名
    @FeignClient("gulimall-coupon")
    public interface CouponFeinService {
    //注意:这里要填路径全称
        @RequestMapping("coupon/coupon/member/list")
        public R memberCoupons();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    开启远程调用

    @EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
    
    • 1

    在contoller中添加一个测试方法

    @Autowired
        private CouponFeinService couponFeinService;
    
        //远程调用优惠卷服务
        @RequestMapping("/coupons")
        public R test(){
            MemberEntity memberEntity = new MemberEntity();
            memberEntity.setNickname("张三");
    
            R r = couponFeinService.memberCoupons();
            return R.ok().put("member",memberEntity).put("coupons",r.get("coupons"));
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    新版的spring-boot需要loadbalancer进行负载均衡

       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
           <version>2.2.5.RELEASE</version>
    
    <!--不使用ribbon进行客户端负载均衡-->
           <exclusions>
               <exclusion>
                   <groupId>org.springframework.cloud</groupId>
                   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
               </exclusion>
           </exclusions>
       </dependency>
    <!--   使用loadbalancer进行客户端负载均衡-->
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-loadbalancer</artifactId>
           <version>2.2.7.RELEASE</version>
       </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    访问地址http://localhost:8000/member/member/coupons

    在这里插入图片描述

    四、从配置中心获取配置文件

    在common包下导入

    
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
            <version>2.2.5.RELEASEversion>
        dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    测试:

    在coupon模块下创建bootstrap.properties(这个配置文件加载的优先级最高)

    spring:
      application:
      name: gulimall-coupon
    
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在本地resource创建application.properties

    自定义两个数据

    coupon.user.name=zhangsan
    coupon.user.age=18
    
    • 1
    • 2

    在controller中获取application配置文件中的内容

    @Value("${coupon.user.name}")
    private String name;
    @Value("${coupon.user.age}")
    private String age;
    
    @RequestMapping("/test")
    public R test(){
        return R.ok().put("name",name).put("age",age);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    访问localhost:7000/coupon/coupon/test

    在这里插入图片描述

    这样在工程中加载配置文件,修改起来非常麻烦

    所有使用nacos管理配置文件

    在nacos中创建一个配置文件gulimall-coupon

    在这里插入图片描述

    由于我的spring-boot版本高

    需要导入

    
       org.springframework.cloud
       spring-cloud-starter-bootstrap
       3.1.3
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置热更新

    使用@RefreshScope注解开启动态更新配置文件

    为每个微服务配置独立的命名空间

    cloud:
      nacos:
        config:
          server-addr: 127.0.0.1:8848
          #配置命名空间为gulimall-coupon
          namespace: 56b83f9e-eb52-4b48-b0ad-c31a3a46e709
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    为每个微服务配置分组,使用配置分组区分环境,dev,prod

    在这里插入图片描述

    cloud:
      nacos:
        config:
          server-addr: 127.0.0.1:8848
          #配置命名空间为gulimall-coupon
          namespace: 56b83f9e-eb52-4b48-b0ad-c31a3a46e709
          #设置分组为dev环境
          group: dev
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    同时加载多配置集

    微服务的任何配置信息,任何配置文件都可以放在配置中心中

    将原来的applciation.yml

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
      application:
        name: gulimall-coupon
    
    
      datasource:
        username: root
        password: "20020630"
        url: jdbc:mysql://192.168.205.128:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
        driver-class-name: com.mysql.cj.jdbc.Driver
    mybatis-plus:
      config-locations: classpath:/mapper/**/*.xml
      #统一配置id主键自增
      global-config:
        db-config:
          id-type: auto
    
    
    server:
      port: 7000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    拆分出来

    mybatis.yml

    mybatis-plus:
      config-locations: classpath:/mapper/**/*.xml
      #统一配置id主键自增
      global-config:
        db-config:
          id-type: auto
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    datasource.yml

    spring:
      datasource:
        username: root
        password: "20020630"
        url: jdbc:mysql://192.168.205.128:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
        driver-class-name: com.mysql.cj.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    other.yml

    server:
      port: 7000
    
    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
      application:
        name: gulimall-coupon
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    修改bootstrap.yml使用 extension-configs同时加载多个配置文件

    spring:
      application:
      name: gulimall-coupon
    
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848
            #配置命名空间为gulimall-coupon
            namespace: 56b83f9e-eb52-4b48-b0ad-c31a3a46e709
            #设置分组为dev环境
            extension-configs:
              - data-id: datasource.yml
                group: dev
                refresh: true   #热更新
    
              - data-id: mybatis.yml
                group: dev
                refresh: true
    
              - data-id: other.yml
                group: dev
                refresh: true
              - data-id: gulimall-coupon.properties
                group: dev
                refresh: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    五、Gateway

    创建一个model名字为gulimall-gateway继承gulimall-common模块

    引入gateway依赖

    将gulimall-gateway添加到nacos注册中心中

    spring:
      application:
        name: gulimall-gateway
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1
            name: gulimall-gateway
    
    server:
      port: 88
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在启动类上开启服务发现

    @EnableDiscoveryClient
    
    • 1

    启动测试:

    Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.

    这是因为gulimall-gate中引入了mybatis的依赖

    没有配置数据源导致报错

    在启动类上添加排除即可

    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    
    • 1

    给网关添加一个断言

    gateway:
      routes:
        - id: test_route
          uri: https://www.baidu.com/
          predicates:
            - Query=url,baidu
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    当访问的参数url=baidu的时候会自动跳转到https://www.baidu.com/

    测试:

    http://localhost:88/?url=baidu

  • 相关阅读:
    高效复用:RecyclerView内部嵌套横向列表时的优化技巧
    信息学奥赛一本通:1155:回文三位数
    手撕各种排序
    spring gateway给请求添加params
    BIT-7文件操作和程序环境(16000字详解)
    自己动手实现一个 RPC 框架
    SpringBoot-依赖管理和自动配置
    GPU Counter功能更新|支持Adreno、PowerVR芯片
    【k8s初始化过程解析】
    利用EMQX建立MQTT服务器通讯
  • 原文地址:https://blog.csdn.net/qq_57907966/article/details/126691065