SpringCloud学习笔记(一)_快速入门

news2024/11/24 12:47:48

SpringCloud简介

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。

官网:https://spring.io/projects/spring-cloud

特点

Spring Cloud专注于为典型的用例和可扩展性机制(包括其他用例)提供良好的开箱即用体验。

  • 分布式/版本化配置

  • 服务注册和发现

  • 路由

  • 服务到服务的呼叫

  • 负载均衡

  • 断路器

  • 全局锁

  • 领导选举和集群状态

  • 分布式消息传递

Spring Cloud 架构图

SpringCloud项目搭建

学习SpringCloud先要有,SpringBoot的相关知识,参考【SpringBoot】SpringBoot快速入门(一)

SpringBoot 是基于 SpringFramework 来构建的,SpringFramework 是一种 J2EE 的框架,SpringBoot 是一种快速构建 Spring 应用,SpringCloud 是构建 Spring Boot 分布式环境,也就是常说的云应用,SpringBoot 中流砥柱,承上启下

本例项目架构

环境准备

**** 1)JDK 环境必须是 1.8 及以上,本例使用版本:1.8.0_181

2)Maven 项目管理工具,3.6.0及以上版本,本例使用版本:3.6.3

3)开发工具使用 IDEA

搭建项目父工程

1、新建一个maven空工程test-springcloud

2、编写pom文件,引入项目所需要依赖的包

本例使用的SpringBoot版本是2.2.5.RELEASE,SpringCloud版本是Hoxton.SR3

使用其他版本,需要注意SpringBoot和SpringCloud版本的兼容问题

 1  <!-- spring boot -->
 2 <dependency>
 3     <groupId>org.springframework.boot</groupId>
 4     <artifactId>spring-boot-dependencies</artifactId>
 5     <version>2.2.5.RELEASE</version>
 6     <type>pom</type>
 7     <scope>import</scope>
 8 </dependency>
 9 <!-- spring cloud -->
10 <dependency>
11     <groupId>org.springframework.cloud</groupId>
12     <artifactId>spring-cloud-dependencies</artifactId>
13     <version>Hoxton.SR3</version>
14     <type>pom</type>
15     <scope>import</scope>
16 </dependency>

完整pom文件如下:

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0"
  3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5     <modelVersion>4.0.0</modelVersion>
  6 
  7     <groupId>com.test</groupId>
  8     <artifactId>test-springcloud</artifactId>
  9     <version>1.0-SNAPSHOT</version>
 10     <packaging>pom</packaging>
 11 
 12 
 13     <modules>
 14         <module>test-springcloud-eureka-server8761</module>
 15         <module>test-springcloud-order8000</module>
 16         <module>test-springcloud-provider-payment8001</module>
 17     </modules>
 18 
 19 
 20     <!-- 统一管理jar包版本 -->
 21     <properties>
 22         <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
 23         <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
 24         <!--        <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>-->
 25         <mybatis-spring-boot.version>2.1.2</mybatis-spring-boot.version>
 26         <mysql.version>8.0.12</mysql.version>
 27         <druid.version>1.1.21</druid.version>
 28         <lombok.version>1.18.12</lombok.version>
 29         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 30         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 31         <java.version>1.8</java.version>
 32     </properties>
 33 
 34 
 35     <!-- 依赖管理:子模块继承后,提供作用:锁定版本 + 子module 不用写 version -->
 36     <dependencyManagement>
 37         <dependencies>
 38             <!-- spring boot -->
 39             <dependency>
 40                 <groupId>org.springframework.boot</groupId>
 41                 <artifactId>spring-boot-dependencies</artifactId>
 42                 <version>${spring-boot.version}</version>
 43                 <type>pom</type>
 44                 <scope>import</scope>
 45             </dependency>
 46             <!-- spring cloud -->
 47             <dependency>
 48                 <groupId>org.springframework.cloud</groupId>
 49                 <artifactId>spring-cloud-dependencies</artifactId>
 50                 <version>${spring-cloud.version}</version>
 51                 <type>pom</type>
 52                 <scope>import</scope>
 53             </dependency>
 54             <!-- spring cloud alibaba -->
 55             <!--            <dependency>-->
 56             <!--                <groupId>com.alibaba.cloud</groupId>-->
 57             <!--                <artifactId>spring-cloud-alibaba-dependencies</artifactId>-->
 58             <!--                <version>${spring-cloud-alibaba.version}</version>-->
 59             <!--                <type>pom</type>-->
 60             <!--                <scope>import</scope>-->
 61             <!--            </dependency>-->
 62 
 63             <!-- mybatis -->
 64             <dependency>
 65                 <groupId>org.mybatis.spring.boot</groupId>
 66                 <artifactId>mybatis-spring-boot-starter</artifactId>
 67                 <version>${mybatis-spring-boot.version}</version>
 68             </dependency>
 69 
 70             <!-- mysql -->
 71             <dependency>
 72                 <groupId>mysql</groupId>
 73                 <artifactId>mysql-connector-java</artifactId>
 74                 <version>${mysql.version}</version>
 75             </dependency>
 76 
 77             <!-- druid -->
 78             <dependency>
 79                 <groupId>com.alibaba</groupId>
 80                 <artifactId>druid-spring-boot-starter</artifactId>
 81                 <version>${druid.version}</version>
 82             </dependency>
 83 
 84             <!-- lombok -->
 85             <dependency>
 86                 <groupId>org.projectlombok</groupId>
 87                 <artifactId>lombok</artifactId>
 88                 <version>${lombok.version}</version>
 89             </dependency>
 90 
 91             <!-- test -->
 92             <dependency>
 93                 <groupId>org.springframework.boot</groupId>
 94                 <artifactId>spring-boot-starter-test</artifactId>
 95                 <version>${spring-boot.version}</version>
 96                 <scope>test</scope>
 97                 <exclusions>
 98                     <exclusion>
 99                         <groupId>org.junit.vintage</groupId>
100                         <artifactId>junit-vintage-engine</artifactId>
101                     </exclusion>
102                 </exclusions>
103             </dependency>
104         </dependencies>
105     </dependencyManagement>
106 
107     <!-- SpringBoot打包插件,可以将代码打包成一个可执行的jar包 -->
108     <build>
109         <finalName>${project.artifactId}</finalName>
110         <plugins>
111             <plugin>
112                 <groupId>org.apache.maven.plugins</groupId>
113                 <artifactId>maven-compiler-plugin</artifactId>
114                 <configuration>
115                     <source>${java.version}</source>
116                     <target>${java.version}</target>
117                 </configuration>
118             </plugin>
119             <plugin>
120                 <groupId>org.springframework.boot</groupId>
121                 <artifactId>spring-boot-maven-plugin</artifactId>
122                 <version>${spring-boot.version}</version>
123                 <configuration>
124                     <fork>true</fork>
125                     <addResources>true</addResources>
126                 </configuration>
127             </plugin>
128         </plugins>
129     </build>
130 </project>
131 
132 pom.xml

pom.xml

3、项目结构图如下:

搭建Eureka注册中心

即Eureka的服务端

1、在父项目上,new module 新建一个模块Eureka注册中心,及Eureka服务端 test-springboot-eureka-server8761

2、编写pom.xml文件

Eureka服务端依赖如下:

1 <!-- eureka server -->
2 <dependency>
3     <groupId>org.springframework.cloud</groupId>
4     <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
5 </dependency>

完整pom.xml文件如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <artifactId>test-springcloud</artifactId>
 7         <groupId>com.test</groupId>
 8         <version>1.0-SNAPSHOT</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11 
12     <artifactId>test-springcloud-eureka-server8761</artifactId>
13 
14     <dependencies>
15         <!-- eureka server -->
16         <dependency>
17             <groupId>org.springframework.cloud</groupId>
18             <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
19         </dependency>
20 
21         <!-- spring boot -->
22         <dependency>
23             <groupId>org.springframework.boot</groupId>
24             <artifactId>spring-boot-starter-web</artifactId>
25         </dependency>
26         <dependency>
27             <groupId>org.springframework.boot</groupId>
28             <artifactId>spring-boot-starter-actuator</artifactId>
29         </dependency>
30         <dependency>
31             <groupId>org.springframework.boot</groupId>
32             <artifactId>spring-boot-devtools</artifactId>
33             <scope>runtime</scope>
34             <optional>true</optional>
35         </dependency>
36 
37         <dependency>
38             <groupId>org.springframework.boot</groupId>
39             <artifactId>spring-boot-starter-test</artifactId>
40             <scope>test</scope>
41         </dependency>
42 
43     </dependencies>
44 
45     <build>
46         <finalName>test-springcloud-eureka-server8761</finalName>
47     </build>
48 </project>

pom.xml

3、编写application.yml配置文件

 1 # 端口
 2 server:
 3   port: 8761
 4 
 5 spring:
 6   application:
 7     name: cloud-eureka-server
 8 
 9 # Eureka配置
10 eureka:
11   instance:
12     # eureka服务端的实例名称
13     hostname: localhost
14   client:
15     # false表示不向注册中心注册自己
16     register-with-eureka: false
17     # false表示自己端就是注册中心,职责就是维护服务实例,并不需要去检查服务
18     fetch-registry: false
19     # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
20     service-url:
21       defaultZone: http://localhost:8761/eureka

4、编辑SpringBoot启动类EurekaMain8761.java,并使用@EnableEurekaServer

1 // Eureka服务端
2 @EnableEurekaServer
3 @SpringBootApplication
4 public class EurekaMain8761 {
5     public static void main(String[] args) {
6         SpringApplication.run(EurekaMain8761.class, args);
7     }
8 }

5、启动test-springboot-eureka-server8761项目,使用地址:http://localhost:8761/,进行访问

搭建支付模块、服务提供者

即Eureka客户端

需要准备一个test_springcloud的mysql数据库,新建一张表payment,内容如下:

 1 SET NAMES utf8mb4;
 2 SET FOREIGN_KEY_CHECKS = 0;
 3 
 4 -- ----------------------------
 5 -- Table structure for payment
 6 -- ----------------------------
 7 DROP TABLE IF EXISTS `payment`;
 8 CREATE TABLE `payment` (
 9   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
10   `serial` varchar(255) DEFAULT '' COMMENT '流水号',
11   PRIMARY KEY (`id`)
12 ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
13 
14 -- ----------------------------
15 -- Records of payment
16 -- ----------------------------
17 BEGIN;
18 INSERT INTO `payment` VALUES (1, 'No.1');
19 INSERT INTO `payment` VALUES (2, 'No.2');
20 INSERT INTO `payment` VALUES (3, 'No.3');
21 COMMIT;
22 
23 SET FOREIGN_KEY_CHECKS = 1;

View Code

1、在父项目上,new module 新建一个模块支付模块,即Eureka客户端 test-springcloud-provider-payment8001

2、编写payment模块的pom.xml文件,引入Eureka 客户端依赖

1 <!-- eureka client -->
2 <dependency>
3     <groupId>org.springframework.cloud</groupId>
4     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
5 </dependency>

完整pom.xml文件如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <artifactId>test-springcloud</artifactId>
 7         <groupId>com.test</groupId>
 8         <version>1.0-SNAPSHOT</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11 
12     <artifactId>test-springcloud-provider-payment8001</artifactId>
13 
14     <dependencies>
15 
16         <!-- eureka client -->
17         <dependency>
18             <groupId>org.springframework.cloud</groupId>
19             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
20         </dependency>
21 
22         <!-- spring boot -->
23         <dependency>
24             <groupId>org.springframework.boot</groupId>
25             <artifactId>spring-boot-starter-web</artifactId>
26         </dependency>
27         <dependency>
28             <groupId>org.springframework.boot</groupId>
29             <artifactId>spring-boot-starter-actuator</artifactId>
30         </dependency>
31         <dependency>
32             <groupId>org.springframework.boot</groupId>
33             <artifactId>spring-boot-starter-jdbc</artifactId>
34         </dependency>
35         <dependency>
36             <groupId>org.springframework.boot</groupId>
37             <artifactId>spring-boot-devtools</artifactId>
38             <scope>runtime</scope>
39             <optional>true</optional>
40         </dependency>
41         <dependency>
42             <groupId>org.mybatis.spring.boot</groupId>
43             <artifactId>mybatis-spring-boot-starter</artifactId>
44         </dependency>
45         <dependency>
46             <groupId>org.projectlombok</groupId>
47             <artifactId>lombok</artifactId>
48             <optional>true</optional>
49         </dependency>
50         <!-- mysql -->
51         <dependency>
52             <groupId>mysql</groupId>
53             <artifactId>mysql-connector-java</artifactId>
54         </dependency>
55         <!-- druid -->
56         <dependency>
57             <groupId>com.alibaba</groupId>
58             <artifactId>druid-spring-boot-starter</artifactId>
59         </dependency>
60         <dependency>
61             <groupId>org.springframework.boot</groupId>
62             <artifactId>spring-boot-starter-test</artifactId>
63             <scope>test</scope>
64         </dependency>
65 
66     </dependencies>
67 
68     <build>
69         <finalName>test-springcloud-provider-payment8001</finalName>
70     </build>
71 </project>

View Code

3、编辑application.yml配置文件

 1 # 端口
 2 server:
 3   port: 8001
 4 
 5 spring:
 6   application:
 7     name: cloud-payment-service
 8   #   数据源基本配置
 9   datasource:
10     driver-class-name: com.mysql.cj.jdbc.Driver
11     url: jdbc:mysql://localhost:3306/test_springcloud?allowPublicKeyRetrieval=true&useSSL=true
12     username: admin
13     password: 123456
14 
15 eureka:
16   client:
17     # 表示将自己注册进Eureka Server默认为true
18     register-with-eureka: true
19     # 是否从Eureka Server抓去已有的注册信息,默认是true
20     fetch-registry: true
21     # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
22     service-url:
23       defaultZone: http://localhost:8761/eureka
24 
25 mybatis:
26   mapperLocations: classpath:mapper/*Mapper.xml
27   # 所有entity别名类所在的包
28   type-aliases-pachage: com.test.springcloud.entities

4、编写启动类

1 // Eureka客户端
2 @EnableEurekaClient
3 @SpringBootApplication
4 public class PaymentMain8001 {
5     public static void main(String[] args) {
6         SpringApplication.run(PaymentMain8001.class, args);
7     }
8 }

5、新建一个实体类Payment.java

1 @Data
2 @AllArgsConstructor
3 @NoArgsConstructor
4 public class Payment {
5     private Long id;
6     private String serial;
7 }

View Code

6、新建一个实体类映射文件 src/main/resources/mapper/PaymentMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 
 4 <mapper namespace="com.test.springcloud.dao.PaymentDao">
 5 
 6     <resultMap id="BaseResultMap" type="com.test.springcloud.entities.Payment" >
 7         <id property="id" jdbcType="BIGINT" column="id" />
 8         <result property="serial" jdbcType="VARCHAR" column="serial" />
 9     </resultMap>
10 
11     <insert id="insert" parameterType="com.test.springcloud.entities.Payment" useGeneratedKeys="true" keyProperty="id">
12         INSERT INTO payment(serial) values(#{serial})
13     </insert>
14 
15     <select id="getPaymentById" parameterType="Long" resultMap="BaseResultMap" >
16         SELECT * FROM payment WHERE id = #{id}
17     </select>
18 </mapper>

View Code

7、新建一个dao接口

1 @Mapper
2 public interface PaymentDao {
3     // 插入
4     public int insert(Payment payment);
5     // 获取
6     public Payment getPaymentById(@Param("id") Long id);
7 }

View Code

8、新建一个service接口

1 public interface PaymentService {
2     // 插入
3     public int insert(Payment payment);
4     // 获取
5     public Payment getPaymentById(Long id);
6 }

View Code

9、编写一个接口实现类

 1 @Service
 2 public class PaymentServiceImpl implements PaymentService {
 3 
 4     @Autowired
 5     private PaymentDao paymentDao;
 6 
 7     public int insert(Payment payment) {
 8         return paymentDao.insert(payment);
 9     }
10 
11     public Payment getPaymentById(Long id) {
12         return paymentDao.getPaymentById(id);
13     }
14 }

View Code

10、编辑一个通用结果类CommonResult.java

 1 /**
 2  * 通用结果
 3  * @param <T>
 4  */
 5 @Data
 6 @AllArgsConstructor
 7 @NoArgsConstructor
 8 public class CommonResult<T> {
 9 
10     private int code;
11     private String msg;
12     private T data;
13 
14     public CommonResult(int code, String msg) {
15         this.code = code;
16         this.msg = msg;
17     }
18 }

View Code

11、新增一个Controller

 1 @Slf4j
 2 @RestController
 3 public class PaymentController {
 4 
 5 
 6     @Autowired
 7     private PaymentService paymentService;
 8 
 9     @Value("${server.port}")
10     private String serverPort;
11 
12     @PostMapping("/payment/insert")
13     public CommonResult insert(@RequestBody Payment payment) {
14         int result = paymentService.insert(payment);
15         log.info("====== 插入结果:" + result);
16         if(result > 0) {
17             return new CommonResult(200, "插入数据成功,服务端口:" + serverPort);
18         }else {
19             return new CommonResult(500, "插入数据失败");
20         }
21 
22     }
23 
24     @GetMapping("/payment/get/{id}")
25     public CommonResult getPaymentById(@PathVariable("id") Long id) {
26         Payment result = paymentService.getPaymentById(id);
27 
28         log.info("====== 查询结果:" + result);
29         if(result != null) {
30             return new CommonResult(200, "查询成功,服务端口:" + serverPort, result);
31         }else {
32             return new CommonResult(500, "查询失败");
33         }
34 
35     }
36 }

View Code

12、启动payment模块,查看Eureka注册中心

访问地址:http://localhost:8001/payment/get/1

搭建订单模块、服务消费

1、在父项目上,new module 新建一个模块订单模块,即Eureka客户端 test-springcloud-order8000

2、编写order模块的pom.xml文件,引入Eureka 客户端依赖

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <artifactId>test-springcloud</artifactId>
 7         <groupId>com.test</groupId>
 8         <version>1.0-SNAPSHOT</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11 
12     <artifactId>test-springcloud-order8000</artifactId>
13 
14 
15     <dependencies>
16 
17         <!-- eureka client -->
18         <dependency>
19             <groupId>org.springframework.cloud</groupId>
20             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
21         </dependency>
22 
23         <!-- spring boot -->
24         <dependency>
25             <groupId>org.springframework.boot</groupId>
26             <artifactId>spring-boot-starter-web</artifactId>
27         </dependency>
28         <dependency>
29             <groupId>org.springframework.boot</groupId>
30             <artifactId>spring-boot-starter-actuator</artifactId>
31         </dependency>
32         <dependency>
33             <groupId>org.springframework.boot</groupId>
34             <artifactId>spring-boot-devtools</artifactId>
35             <scope>runtime</scope>
36             <optional>true</optional>
37         </dependency>
38 
39         <dependency>
40             <groupId>org.projectlombok</groupId>
41             <artifactId>lombok</artifactId>
42             <optional>true</optional>
43         </dependency>
44         <dependency>
45             <groupId>org.springframework.boot</groupId>
46             <artifactId>spring-boot-starter-test</artifactId>
47             <scope>test</scope>
48         </dependency>
49 
50     </dependencies>
51 
52     <build>
53         <finalName>test-springcloud-order8000</finalName>
54     </build>
55 
56 </project>

View Code

3、编写application.yml配置文件

 1 # 端口
 2 server:
 3   port: 8000
 4 
 5 spring:
 6   application:
 7     name: cloud-order
 8 
 9 eureka:
10   client:
11     # 表示将自己注册进Eureka Server默认为true
12     register-with-eureka: true
13     # 是否从Eureka Server抓去已有的注册信息,默认是true
14     fetch-registry: true
15     # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
16     service-url:
17       defaultZone: http://localhost:8761/eureka

4、编写启动类

1 @EnableEurekaClient
2 @SpringBootApplication
3 public class OrderMain80 {
4     public static void main(String[] args) {
5         SpringApplication.run(OrderMain80.class, args);
6     }
7 }

5、编写一个服务调用配置类,注入RestTemplate,调用服务

 1 @Configuration
 2 public class AppConfig {
 3 
 4     /**
 5      * 注入restTemplate,请用请求rest接口
 6      * @return
 7      */
 8     @Bean
 9     // 标注此注解后,RestTemplate就具有了客户端负载均衡能力
10     // 负载均衡技术依赖于的是Ribbon组件~
11     // RestTemplate都塞入一个loadBalancerInterceptor 让其具备有负载均衡的能力
12     @LoadBalanced
13     public RestTemplate restTemplate(){
14         return new RestTemplate();
15     }
16 }

6、编写实体类Payment.java

1 @Data
2 @AllArgsConstructor
3 @NoArgsConstructor
4 public class Payment {
5     private Long id;
6     private String serial;
7 }

View Code

7、编写通用返回类

 1 @Data
 2 @AllArgsConstructor
 3 @NoArgsConstructor
 4 public class CommonResult<T> {
 5 
 6     private int code;
 7     private String msg;
 8     private T data;
 9 
10     public CommonResult(int code, String msg) {
11         this.code = code;
12         this.msg = msg;
13     }
14 }

View Code

8、编写Controller,使用RestTemplate调用服务

 1 @RestController
 2 @Slf4j
 3 public class OrderController {
 4 
 5 //    public static final String PAYMENT_URL = "http://localhost:8001";
 6     public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
 7 
 8 
 9     @Autowired
10     private RestTemplate restTemplate;
11 
12     @PostMapping("/consumer/payment/insert")
13     public CommonResult<Payment> insert(Payment payment){
14         log.info("====== 请求插入:" + payment);
15         return restTemplate.postForObject(PAYMENT_URL + "/payment/insert", payment, CommonResult.class);
16     }
17 
18     @GetMapping("/consumer/payment/get/{id}")
19     public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
20         return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
21     }
22 }

9、启动order模块,查看Eureka注册中心

访问地址:http://localhost:8000/consumer/payment/get/1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/910312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBaits_Plus

MyBatis_Plus 文章目录 MyBatis_Plus0. 必备知识1.快速入门1.1什么是MyBatis_Plus1.2快速使用 2.配置日志3.CURD的扩展3.1Insert3.2 update3.3自动填充3.4乐观锁3.5delete 4.select4.1基本查询4.2分页查询4.3条件构造器 5.代码自动生成器 0. 必备知识 使用第三方组件一般步骤 …

[已解决]system: No such file or directory #include <filesystem>

make编译&#xff0c;遇到&#xff1a;system: No such file or directory #include <filesystem> &#xff08;1&#xff09;升级gcc[参考][gcc升级参考1][gcc升级参考2]&#xff1a;gcc7.5 升级为 gcc11.1, 未解决问题&#xff1b; &#xff08;2&#xff09;修改头文…

TienChin 渠道管理-工程创建

因为本文章主要围绕着项目开发进行&#xff0c;所以前言不做开头&#xff0c;直接上内容。 添加字段 我们的渠道表&#xff0c;我看到若依脚手架当中有一个是否删除的标志字段&#xff0c;所以我这里也添加一下&#xff1a; ALTER TABLE tienchin_channelADD COLUMN del_flag c…

使用MySQL:5.6和owncloud镜像搭建个人网盘

拉取镜像 [rootkvm ~]# docker pull mysql:5.6[rootkvm ~]# docker pull owncloud启动mysql容器 [rootkvm ~]# docker run -d --name db1 -e MYSQL_ROOT_PASSWORDroot mysql:5.6 db832e4e4333a0e9a7c152a67272721fdbe5381054090c5eb24f90455390a852 [rootkvm ~]# docker ps …

2、Spring_DI

DI 1.概述 概述&#xff1a;Dependency Injection 依赖注入&#xff0c;给对象设置属性&#xff0c;曾经我们需要自己去创建 mapper 对象&#xff0c;才能调用&#xff0c;现在交给 spring 创建&#xff0c;并且使用 DI 注入&#xff0c;直接拿来用&#xff0c;程序员就可以更…

小说作者分享:如何利用爱校对使我的作品更出彩?

在创作小说的过程中&#xff0c;校对和修改是至关重要的步骤。许多作家已经开始利用“爱校对”这一工具&#xff0c;有效地提高他们作品的质量。本篇文章将通过实际案例&#xff0c;展示一些小说作者是如何成功地利用爱校对来精雕细琢他们的文字&#xff0c;并将作品提升到一个…

数据结构,二叉树,前中后序遍历

二叉树的种类 最优二叉树 最优二叉树画法 排序取最小两个值和&#xff0c;得到新值加入排序重复1&#xff0c;2 前序、中序和后序遍历是树形数据结构&#xff08;如二叉树&#xff09;中常用的遍历方式&#xff0c;用于按照特定顺序遍历树的节点。这些遍历方式在不同应用中有不…

x86 分段机制

本篇只是做个记录,把重要的东西记录一下. 不保证正确x86中的物理地址计算过程 8086 时代的分段机制 这要从8086实模式说起 8086实模式 是基于 分段机制的.该模式下有段寄存器该模式下存在 逻辑地址[a:b] 和 (线性地址) 物理地址 // a 存储在段寄存器中,[a:b] 存储了 逻辑地址…

记一次由于整型参数错误导致的任意文件上传

当时误打误撞发现的&#xff0c;觉得挺奇葩的&#xff0c;记录下 一个正常的图片上传的点&#xff0c;文件类型白名单 但是比较巧的是当时刚对上面的id进行过注入测试&#xff0c;有一些遗留的测试 payload 没删&#xff0c;然后在测试上传的时候就发现.php的后缀可以上传了&a…

PostMan 测试项目是否支持跨域

使用PostMan可以方便快速的进行跨域测试。 只需要在请求头中手动添加一个Origin的标头&#xff0c;声明需要跨域跨到的域&#xff08;IP&#xff1a;端口&#xff09;就行&#xff0c;其余参数PostMan会自动生成。添加此标头后&#xff0c;请求会被做为一条跨域的请求来进行处…

Python编程基础-文件的打开和读取

文件的访问 使用 open() 函数 打开文件 &#xff0c;返回一个 file 对象 使用 file 对象的读 / 写方法对文件进行读 / 写的 操作 使用 file 对象的 close() 方法关闭文件 打开文件 open()方法&#xff0c;需要一个字符串路径&#xff0c;并返回一个文件对象&#xff0c;默认是”…

学习maven工具

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f3e8;maven工具产生的背景&#x1f993;maven简介&#x1fa80;pom.xml文件(project object Model 项目对象模型) &#x1fa82;maven工具安装步骤两个前提&#xff1a;下载 m…

Android基础——英文复习资料

一.填空题 1.An Android project must be bulit before it is run&#xff0c;compiling the java source code(.java flises)into Java bytetcode(.class files)and the into .dex files 2.In Android an activity stores the code for a screen of an app&#xff0c; …

.NET6.0 System.Drawing.Common 通用解决办法

最近有不少小伙伴在升级 .NET 6 时遇到了 System.Drawing.Common 的问题&#xff0c;同时很多库的依赖还都是 System.Drawing.Common &#xff0c;而 .NET 6 默认情况下只在 Windows 上支持使用&#xff0c;Linux 上默认不支持这就导致在 Linux 环境上使用会有问题&#xff0c;…

# 电脑好用的工具推荐

电脑好用的工具推荐 文章目录 电脑好用的工具推荐必装工具浏览器火绒安全卸载工具Geek迅雷 记笔记工具Typora印象笔记 开发工具IntelliJ IDEAVisual Studio CodeDbeaverAnother Redis Desktop Manager 备份工具百度网盘阿里云盘一刻相册蓝奏云 必装工具 浏览器 就别装那些乱七…

vue2.x项目从0到1(七)之用户权限

此章节偏理论知识 对于小一点的项目 比如说角色都是平级的 那我们直接像之前 vue2.x项目从0到1&#xff08;二&#xff09;之后台管理侧边栏&#xff08;动态渲染路由以及高亮&#xff09;_vue动态渲染侧边栏_关忆北_的博客-CSDN博客这样渲染就行了 但是一旦项目大了 …

Reids 的整合 Spring Data Redis使用

大家好 , 我是苏麟 , 今天带来强大的Redis . REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选…

如何使用CSS实现一个拖拽排序效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现拖拽排序效果的CSS和JavaScript示例⭐ HTML 结构⭐ CSS 样式 (styles.css)⭐ JavaScript 代码 (script.js)⭐ 实现说明⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦…

【HCIP】02.MSTP

运行RSTP/STP&#xff0c;局域网内所有的VLAN共享一棵生成树&#xff0c;被阻塞后的链路将不承载任何流量&#xff0c;无法在VLAN间实现数据流量的负载均衡&#xff0c;导致链路带宽利用率、设备资源利用率较低。802.1S,MSTP兼容STP和RSTP&#xff0c;通过建立多棵无环路的树&a…

论文及代码详解——HRNet

文章目录 论文详解 &#xff08;High-Resolution Networks&#xff09;Parallel Multi-Resolution ConvolutionsRepeated Multi-Resolution FusionsRepresentation Head 代码详解 论文&#xff1a;《Deep High-Resolution Representation Learning for Visual Recognition》 代…