Spring-Cloud 學習筆記-(2)項目搭建


Spring-Cloud 學習筆記-(2)項目搭建

1、環境介紹

  • [ ] 操作系統:windows
  • [ ] JDK版本:1.8
  • [ ] Spring-Boot版本:2.1.1.RELEASE
  • [ ] Spring-Cloud版本:Finchley.SR2

2、主項目搭建

2.1.新建一個Maven項目作為主項目

2.2.填寫項目信息

2.3.pom文件引入依賴

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bigfly</groupId>
    <artifactId>cloud-demo</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <!--設置打包方式-->
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
    </parent>

    <!--版本號統一管理-->
    <properties>
        <java.verion>1.8</java.verion>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>

    <!--spring-cloud 版本,后面子項目直接拿坐標-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

2.4.導入依賴

2.4.1.idea配置maven

2.4.2.修改maven倉庫為阿里倉庫

修改maven下面的/conf/setting.xml文件

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

2.4.3.拉取依賴

3、服務提供者

在主項目下創建一個moduel作為服務提供者,對外提供用戶信息查詢服務

3.1.新建一個Module

為了便於管理我們把沒用的文件夾:
主項目中的src

新建Module:

依舊新建一個Maven項目:

填寫項目信息:

目錄結構:

3.2.修改pom文件

增加spring-boot-starter-web 依賴

<?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-demo</artifactId>
        <groupId>com.bigfly</groupId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>user-service</artifactId>
    <dependencies>
        <!-- spring-boot Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

拉取依賴:

創建必要文件:

3.2.創建spring-boot啟動類

@SpringBootApplication
public class UserApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class);
    }
}

3.3.創建測試類

@RestController
@RequestMapping("api/v1/user")
public class UserController {

    @RequestMapping("/test")
    public String test(){
        return "我是用戶服務,我是服務的提供者";
    }

}

3.4.測試效果

訪問:http://localhost:8080/api/v1/user/test

3.5.編寫模擬獲取用戶信息代碼

數據包裝類:

package com.bigfly.common;

import org.springframework.stereotype.Component;

import java.io.Serializable;

/*
 * @Author 程鵬飛
 * @Description //TODO 數據包裝類
 * @Date 01:58 2018/12/9 0009
 **/
@Component
public class BaseData {
    /**
     * 返回狀態碼:1:成功 0:失敗
     */
    private int code;

    /**
     * 返回數據
     */
    private Object data;

    /**
     * 錯誤消息
     */
    private String errorMsg;

    /**
     * 空參構造器
     */
    public BaseData() {
    }

    /**
     * 返回成功構造器
     */
    public BaseData(Object data) {
        this.code = 1;
        this.data = data;
    }

    /**
     * 返回失敗構造器
     */
    public BaseData(String errorMsg,Object data) {
        this.code = 0;
        this.errorMsg = errorMsg;
        this.data = data;
    }

    /**
     * getter  setter方法
     */
    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }
}

User對象:

package com.bigfly.entity;

/*
 * @Author 程鵬飛
 * @Description //TODO  用戶對象
 * @Date 02:06 2018/12/9 0009
 **/
public class User {
    /**
     * 用戶id
     */
    private int id;

    /**
     * 姓名
     */
    private String name;

    /**
     * 年齡
     */
    private int age;

    /**
     * 端口號  表示從哪個端口過來的User
     */
    private String port;

    /**
     * 空參構造器
     */
    public User() {
    }

    /**
     *id,name,age構造器
     */
    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    /**
     * getter  setter方法
     */
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }
}

UserService接口:

package com.bigfly.service.service;

import com.bigfly.entity.User;

public interface UserService {

    /**
     * 根據id查詢用戶基本信息
     * @param id  用戶id
     * @return 用戶對象
     */
    User findById(int id);
}

UserServiceImpl實現類:

package com.bigfly.service.service.impl;

import com.bigfly.entity.User;
import com.bigfly.service.service.UserService;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class UserServiceImpl implements UserService {

    /**
     * 模擬數據庫
     */
    private static Map<Integer,User> userMap = new HashMap<>();
    static {
        User u1 = new User(1,"張三",11);
        User u2 = new User(2,"李四",12);
        User u3 = new User(3,"王五",13);
        userMap.put(u1.getId(),u1);
        userMap.put(u2.getId(),u2);
        userMap.put(u3.getId(),u3);
    }

    /**
     * 根據id查詢用戶基本信息
     * @param id  用戶id
     * @return 用戶對象
     */
    @Override
    public User findById(int id) {
        return userMap.get(id);
    }
}

UserController里面增加:

@Autowired
private UserService userService;

@RequestMapping("{user_id}")
public BaseData findUserById(@PathVariable("user_id")int id){
    User user = userService.findById(id);
    return new BaseData(user);
}

測試:

訪問:http://localhost:8080/api/v1/user/2

4、服務消費者

4.1.根據上面方法創建一個消費者Module

目錄結構:

pom文件:

<?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-demo</artifactId>
        <groupId>com.bigfly</groupId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>order-service</artifactId>

    <dependencies>
        <!-- spring-boot Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

4.2.編寫代碼

數據包裝類:

package com.bigfly.common;

/*
 * @Author 程鵬飛
 * @Description //TODO 數據包裝類
 * @Date 01:58 2018/12/9 0009
 **/
public class BaseData {


    /**
     * 返回狀態碼:1:成功 0:失敗
     */
    private int code;

    /**
     * 返回數據
     */
    private Object data;

    /**
     * 錯誤消息
     */
    private String errorMsg;

    /**
     * 空參構造器
     */
    public BaseData() {
    }

    /**
     * 返回成功構造器
     */
    public BaseData(Object data) {
        this.code = 1;
        this.data = data;
    }

    /**
     * 返回失敗構造器
     */
    public BaseData(int code, String errorMsg) {
        this.code = 0;
        this.errorMsg = errorMsg;
    }

    /**
     * getter  setter方法
     */
    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }
}

Order訂單實體類:

package com.bigfly.entity;

/*
 * @Author 程鵬飛
 * @Description //TODO  訂單實體類
 * @Date 03:43 2018/12/9 0009
 **/
public class Order {

    /**
     * 訂單名稱
     */
    private String orderName;
    /**
     * 訂單流水號
     */
    private String serialId;

    /**
     * 用戶名稱
     */
    private String userName;

    /**
     * 端口號
     */
    private String port;

    public String getOrderName() {
        return orderName;
    }

    public void setOrderName(String orderName) {
        this.orderName = orderName;
    }

    public String getSerialId() {
        return serialId;
    }

    public void setSerialId(String serialId) {
        this.serialId = serialId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }
}

OrderService訂單接口:

package com.bigfly.service;

import com.bigfly.entity.Order;

/*
 * @Author 程鵬飛
 * @Description //TODO 訂單接口
 * @Date 03:32 2018/12/9 0009
 **/
public interface OrderService {
    /**
     * 根據用戶id 查詢用戶信息
     * @param userId 用戶id
     * @return
     */
    Order findById(int userId);
}

OrderServiceImpl 接口實現類:

package com.bigfly.service.impl;

import com.bigfly.entity.Order;
import com.bigfly.service.OrderService;
import org.springframework.stereotype.Service;

@Service
public class OrderServcieImpl implements OrderService {

    /**
     * 根據用戶id 查詢用戶信息
     * @param userId 用戶id
     * @return
     */
    @Override
    public Order findById(int userId) {
        return null;
    }
}

OrderController:

package com.bigfly.controller;

import com.bigfly.common.BaseData;
import com.bigfly.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("api/v1/order")
public class OrderController {

    @RequestMapping("test")
    public String test(){
        return "我是訂單服務,我是服務的消費者";
    }
    
    @Autowired
    private OrderService orderService;
    
    @RequestMapping("{user_id}")
    public BaseData findUserById(@PathVariable("user_id")int id){
        Order order = orderService.findById(id);
        return new BaseData(order);
    }
}

OrderApplication啟動類:

package com.bigfly;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class);
    }
}

4.3.測試

訪問:http://localhost:8080/api/v1/order/test

5、RestTemplate的使用

5.1.修改代碼

5.1.1.代碼修改(user-service)####

UserServiceImpl:

package com.bigfly.service.service.impl;

import com.bigfly.entity.User;
import com.bigfly.service.service.UserService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class UserServiceImpl implements UserService {
    /**
     * 獲取application.yml配置文件中的端口號
     */
    @Value("${server.port}")
    private String port;
    /**
     * 模擬數據庫
     */
    private static Map<Integer,User> userMap = new HashMap<>();
    static {
        User u1 = new User(1,"張三",11);
        User u2 = new User(2,"李四",12);
        User u3 = new User(3,"王五",13);
        userMap.put(u1.getId(),u1);
        userMap.put(u2.getId(),u2);
        userMap.put(u3.getId(),u3);
    }

    /**
     * 根據id查詢用戶基本信息
     * @param id  用戶id
     * @return 用戶對象
     */
    @Override
    public User findById(int id) {
        User user = userMap.get(id);
        //把端口號放入User對象
        user.setPort(port);
        return user;
    }
}

application.yml增加:

#修改默認端口
server:
  port: 8771

5.1.2.代碼修改(order-service)####

添加Json工具類

添加utils包,在utils包下面創建JsonUtils

package com.bigfly.utils;


import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang.StringUtils;

/*
 * @Author 程鵬飛
 * @Description //TODO Json 工具類
 * @Date 03:57 2018/12/9 0009
 * @return
 **/
public class JsonUtils {
    private static ObjectMapper mapper = new ObjectMapper();

    /**
     * 字符串 轉 JsonNode
     * @param str
     * @return
     */
    public static JsonNode str2JsonNode(String str) {
        if (StringUtils.isBlank(str)) {
            return null;
        }
        JsonNode jsonNode = null;
        try {
            jsonNode = mapper.readTree(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jsonNode;
    }
}
application.yml增加:
#修改默認端口
server:
  port: 8781

OrderApplication增加:

    /**
     * 把RestTemplate注入到Spring容器中
     */
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

OrderServiceImpl:

package com.bigfly.service.impl;

import com.bigfly.entity.Order;
import com.bigfly.service.OrderService;
import com.bigfly.utils.JsonUtils;
import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.UUID;

@Service
public class OrderServcieImpl implements OrderService {

    @Autowired
    private RestTemplate restTemplate;
    /**
     * 根據用戶id 查詢用戶信息
     * @param userId 用戶id
     * @return
     */


    @Override
    public Order findById(int userId) {
        //getForObject 第一個參數url代表訪問路徑 第二個參數代表 返回值類型
        String jsonStr = restTemplate.getForObject("http://localhost:8771/api/v1/user/2", String.class);
        JsonNode jsonNode = JsonUtils.str2JsonNode(jsonStr);
        Order order = new Order();
        order.setOrderName("我是一個訂單");
        order.setSerialId(UUID.randomUUID().toString());
        order.setUserName(jsonNode.get("data").get("name").textValue());
        order.setPort(jsonNode.get("data").get("port").textValue());
        return order;
    }
}

5.2.測試

訪問:http://localhost:8781/api/v1/order/2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM