天天看點

谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)

零.

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

    配置檔案中調用的環境

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  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
               
    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  3. 在資料庫中建立所需的資料庫

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
3. renren-generator代碼生成器

1. 代碼生成

  1. 下載下傳
  2. 導入項目
  3. 配置

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  4. 啟動項目

    啟動後通過浏覽器通路:

    localhost:80

    就是代碼生成器的可視化界面

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  5. 點選生成代碼, 就會下載下傳所生成的代碼, 把main目錄下的代碼拷貝到指定的子產品中即可
    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)

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缺少的工具類

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)

    去之前導入的renren-fast項目中導入對應的公共類

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  5. 引入R後, R中會報錯, 還需要引入
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.4.14</version>
    </dependency>
               
  6. 引入Query後, Query會報錯
    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
    還需要引入
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>
               
    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  7. 此時隻有controller層報錯
    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)

    這個是和權限控制相關的注解, 現在還用不到可以去代碼生成器中将這些注解注釋掉

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  8. 然後重新使用代碼生成器生成相關代碼, 導入到項目即可

2. nacos注冊中心

  1. 下載下傳nacos伺服器并啟動
    1. 下載下傳位址: https://github.com/alibaba/nacos/releases
    2. 啟動
    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  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. 在啟動類中添加注解
  2. web ui頁面:

    http://localhost:8848/nacos/

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)

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
               
    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  3. nacos配置中建立配置檔案

    啟動項目時日志檔案中可以看見項目加載一個日志檔案, 檔案名:

    應用名.properties

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)

    Data ID 就是配置檔案的名稱

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  4. 在項目的controller中添加自動重新整理的注解

    @RefreshScope

    , 以及通過@Value來動态擷取配置檔案中的值

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  5. 此時隻要修改配置中心中的配置檔案内容, 就可以動态的修改其配置内容
2. nacos細節

1. 命名空間

  1. 命名空間: 配置隔離,
  2. 預設是調用

    public

    命名空間的配置檔案
  3. 調用指定命名空間

    檢視命名空間對應的id

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  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
           

谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  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. 将配置檔案拆分成多個配置檔案

    谷粒商城項目實戰——01前期工作(寫得比較亂, 後期需要重新整理)
  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
               

繼續閱讀