商城專案--工程搭建

努力--坚持發表於2024-11-21

  一、專案結構
專案結構:

如下圖:

專案工程簡介:

changgou_auth: oauth2.0授權認證管理中心
changgou_common:公共模組
changgou_common_db:公共模組
changgou_eureka:註冊中心
shangchneg_reverser:
changgou_gateway: 閘道器模組。
changgou_service: 微服務模組,該模組用於存放所有獨立的微服務工程。
changgou_service_api: 對應工程的JavaBean、Feign、以及Hystrix配置,該工程主要對外提供依賴。
changgou_transaction_fescar: 分散式事務模組,將分散式事務抽取到該工程中,任何工程如需要使用分散式事務,只需依賴該工程即可。
changgou_web: web服務工程,對應功能模組如需要呼叫多個微服務,可以將他們寫入到該模組中,例如網站後臺、網站前臺等

  二、工程搭建


工程搭建步驟:

步驟一:建立父工程changgou_parent,刪除src檔案,並配置pom.xml檔案

建立父工程changgou_parent,並配置pom.xml檔案

步驟二:建立二級父工程

建立changgou_gateway、changgou_service、changgou_service_api、changgou_web工程,工程全部為pom工程,並將所有工程的src檔案刪除。

步驟三:Eureka微服務搭建

建立changgou_eureka模組,並配置pom.xml檔案,引入依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>


建立配置檔案application.yml,新增如下配置

server:
  port: 6868
eureka:
  client:
    register-with-eureka: false #是否將自己註冊到eureka中
    fetch-registry: false #是否從eureka中獲取資訊
    service-url:
      defaultZone: http://127.0.0.1:${server.port}/eureka/


建立包com.changgou.eureka ,包下建立啟動類

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class);
    }
}


步驟四:公共模組搭建

建立全域性公共模組changgou_common,並配置pom.xml

<dependencies>
    <!--web起步依賴-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- redis 使用-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.51</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

建立com.changgou.entity包 ,包下封裝相關公共實體類。

返回結果實體類:

package com.changgou.entity;
​
/**
 * 返回結果實體類
 */
public class Result<T> {
​
    private boolean flag;//是否成功
    private Integer code;//返回碼
    private String message;//返回訊息
private T data;//返回資料
public Result(boolean flag, Integer code, String message, Object data) {
        this.flag = flag;
        this.code = code;
        this.message = message;
        this.data = (T)data;
    }
​
    public Result(boolean flag, Integer code, String message) {
        this.flag = flag;
        this.code = code;
        this.message = message;
    }
​
    public Result() {
        this.flag = true;
        this.code = StatusCode.OK;
        this.message = "執行成功";
    }
​
    //getter and setter..
}
​


分頁結果類:

/**
 * 分頁結果類
 */
public class PageResult<T> {
​
    private Long total;//總記錄數
    private List<T> rows;//記錄
public PageResult(Long total, List<T> rows) {
        this.total = total;
        this.rows = rows;
    }
​
    public PageResult() {
    }
​
    //getter and setter ......
}

返回狀態碼實體類:

/**
 * 返回狀態碼實體類
 */
public class StatusCode {
​
    public static final int OK=20000;//成功
    public static final int ERROR =20001;//失敗
    public static final int LOGINERROR =20002;//使用者名稱或密碼錯誤
    public static final int ACCESSERROR =20003;//許可權不足
    public static final int REMOTEERROR =20004;//遠端呼叫失敗
    public static final int REPERROR =20005;//重複操作
}

步驟五:資料訪問公共模組搭建

這個公共模組是連線mysql資料庫的公共微服務模組,所以需要連線mysql的微服務都繼承自此工程。

建立公共模組changgou_common_db,並配置pom檔案,引入依賴

<dependencies>
    <dependency>
        <groupId>com.changgou</groupId>
        <artifactId>changgou_common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--通用mapper起步依賴-->
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>2.0.4</version>
    </dependency>
    <!--MySQL資料庫驅動-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!--mybatis分頁外掛-->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.3</version>
    </dependency>
</dependencies>

步驟六:商品微服務搭建

1)商品微服務API工程搭建

在changgou_service_api 模組中,引入依賴 feign依賴和java實體類的依賴,在changgou_service_api 下建立changgou_service_goods_api子模組並新增common依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>
        <version>1.0</version>
        <scope>compile</scope>
    </dependency>
</dependencies>


2)商品微服務API工程搭建

在changgou_service工程下建立changgou_service_goods子模組 ,配置pom.xml檔案,引入依賴

<dependencies>
    <dependency>
        <groupId>com.changgou</groupId>
        <artifactId>changgou_common_db</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.changgou</groupId>
        <artifactId>changgou_service_goods_api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

在changgou_service_goods工程中,建立配置檔案application.yml

server:
  port: 9011
spring:
  application:
    name: goods
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.200.128:3306/changgou_goods?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: root
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:6868/eureka
  instance:
    prefer-ip-address: true
feign:
  hystrix:
    enabled: true
    
#hystrix 配置
hystrix:
  command:
    default:
      execution:
        timeout:
        #如果enabled設定為false,則請求超時交給ribbon控制
          enabled: true
        isolation:
          strategy: SEMAPHORE

在changgou_service_goods工程中,com.changgou.goods 包下,建立啟動類

@SpringBootApplication
@EnableEurekaClient
@MapperScan(basePackages = {"com.changgou.goods.dao"})
public class GoodsApplication {
    public static void main(String[] args) {
        SpringApplication.run(GoodsApplication.class);
    }
}


步驟七:商品微服務測試

商品微服務測試:測試服務是否可以正常的被訪問以及操作,

在changgou_service_goods工程中,建立測試controller

 1 package com.changgou.service.goods.controller;
 2  
 3 import org.springframework.web.bind.annotation.GetMapping;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RestController;
 6  
 7 @RequestMapping("/demo")
 8 @RestController  //@controller,@responseBody
 9 public class DemoController {
10  
11     @GetMapping("/test")
12     public String demo(){
13         return "demo message";
14     }
15 }


啟動changgou_service_goods工程,檢視Eureka server 管理後臺,發現GOODS服務成功註冊到E註冊中心,埠號為9011。瀏覽器訪問localhost:9011/demo/test,正常訪問,測試透過,商品微服務搭建成功。

相關文章