SpringCloud 2023.0.1

news2025/2/28 19:41:50

本文介绍如何使用 springboot3及cloud2023 进行微服务模块化开发

采用父-module 模块开发

父工程 demo-java

pom.xml

 <!--配置 springboot的依赖的版本号, 方便 module 进行继承-->
     <dependencyManagement>
         <dependencies>
             <!--增加 springboot的依赖-->
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-dependencies</artifactId>
                 <version>3.2.5</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
 ​
             <!--增加 springcloud的依赖-->
             <dependency>
                     <groupId>org.springframework.cloud</groupId>
                     <artifactId>spring-cloud-dependencies</artifactId>
                     <version>2023.0.1</version>
                     <type>pom</type>
                     <scope>import</scope>
             </dependency>
 ​
 ​
         </dependencies>
     </dependencyManagement>
 ​
 ​

子模块 cloud-eureka-server-7001

pom.xml

 ​
     <dependencies>
         <!--增加 boot web的依赖-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
 ​
         <!--增加  eureka-server 的依赖-->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
         </dependency>
     </dependencies>
 ​

启动类:

 package com.ly;
 ​
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
 ​
 @SpringBootApplication
 @EnableEurekaServer
 public class CloudEurekaServer7001 {
     public static void main(String[] args) {
         SpringApplication.run(CloudEurekaServer7001.class,args);
     }
 }
 ​

配置文件 application.yml

 # 设置端口号为 7001
 server:
   port: 7001
 ​
 ​
 eureka:
   instance:
     hostname: localhost
   client:
     fetch-registry: false    #如果fetch-registry为false, 则表示自己为注册中心
     register-with-eureka: false  #表示是否向eureka注册中心注册自己
     service-url:
       defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka   # 服务地址
 ​
 ​
 ​
 ​

启动测试:

子模块 cloud-eureka-provider-8001

pom.xml

 <dependencies>
         <!--增加 boot web的依赖-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
         <!--增加 eureka client 依赖-->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
         </dependency>
      <!--增加 监控 boot 依赖-->
       <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
     </dependencies>

启动类

 package com.ly;
 ​
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 ​
 ​
 @SpringBootApplication
 @EnableDiscoveryClient
 public class EurekaProvider8001 {
     public static void main(String[] args) {
         SpringApplication.run(EurekaProvider8001.class,args);
     }
 }
 ​

application.yaml

 ​
 #设置端口号
 server:
   port: 8001
 ​
 ​
 ​
 eureka:
   client:
     fetch-registry: true #是提供者,不是注册中心 ,可省略
     register-with-eureka: true #向注册中心 注册服务,可省略
     service-url: #服务地址
       defaultZone: http://localhost:7001/eureka
 ​
 ​

刷新 之前的 server

如何 解决 unknow ?修改 provider-8001 的 yaml文件,增加 spring.application.name

为了 模拟 用户管理 ---provider8001 , 订单管理--provider8002, 消费者来 消费服务

子模块 cloud-eureka-common-api

pom.xml

  <dependencies>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
     </dependencies>

创建 实体层 User.java 与 OrderInfo.java

 package com.ly.entity;
 ​
 ​
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.ToString;
 ​
 /**
  * 用户 实体
  */
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 @ToString
 public class User {
     private int userId; //用户编号
     private String username;//用户名
     private String phone;//电话
 }
 ​
 package com.ly.entity;
 ​
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.ToString;
 ​
 import java.time.LocalDateTime;
 ​
 /**
  * 订单 实体
  */
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 @ToString
 public class OrderInfo {
     private int orderNo;//订单编号
     private String title;// 标题
     private double price;//单价
     private double count;//个数
     private LocalDateTime time;//购买时间
     private int userId;// 用户编号
 }
 ​

修改 provider8001 的 pom.xml

增加

 <!--引入  common-api module-->
 <dependency>
     <groupId>com.ly</groupId>
     <artifactId>cloud-eureka-common-api</artifactId>
     <version>1.0-SNAPSHOT</version>
 </dependency>

为 provider8001 增加 controller

 package com.ly.controller;
 ​
 import com.ly.entity.User;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RestController;
 ​
 /**
  * provider8001 --模拟的就是用户管理 模块
  */
 @RestController
 public class UserController {
 ​
     @GetMapping("/user/{id}")
     public User find(@PathVariable("id")int id){
 ​
         // 模拟数据返回
          return  new User(1001,"李四","137526154875");
     }
 ​
 ​
 ​
 ​
 }
 ​

启动 provider8001 进行测试

看到以上 截图表示 成功

子模块 eureka-provider-8002

pom.xml

  <dependencies>
         <!--增加 boot web的依赖-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
         <!--增加 eureka client 依赖-->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
         </dependency>
         <!--增加 监控 boot 依赖-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
 ​
         <!--引入  common-api module-->
         <dependency>
             <groupId>com.ly</groupId>
             <artifactId>cloud-eureka-common-api</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
 ​
     </dependencies>

application.yaml

 ​
 #设置端口号
 server:
   port: 8002
 ​
 ​
 ​
 eureka:
   client:
     fetch-registry: true #是提供者,不是注册中心 ,可省略
     register-with-eureka: true #向注册中心 注册服务,可省略
     service-url: #服务地址
       defaultZone: http://localhost:7001/eureka
 spring:
   application:
     name: provider-8002        # 设置应用名, 注意, 值 不允许使用 下划线
 ​

启动类

 package com.ly;
 ​
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 ​
 @SpringBootApplication
 @EnableDiscoveryClient
 public class EurekaProvider8002 {
     public static void main(String[] args) {
         SpringApplication.run(EurekaProvider8002.class,args);
     }
 }
 ​

controller

 package com.ly.controller;
 ​
 import com.ly.entity.OrderInfo;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RestController;
 ​
 import java.time.LocalDateTime;
 ​
 /**
  * provider8002 模拟就是 订单管理 模块
  */
 @RestController
 public class OrderInfoController {
     
     @GetMapping("/order/{userId}")
     public OrderInfo find(@PathVariable("userId")int userId){
         //模拟数据返回
         return new OrderInfo(1003,"保温杯",50,1, LocalDateTime.now(),1001);
     }
 }
 ​

启动 provider8002, 测试 7001

子模块 cloud-eureka-consumer-80

pom.xml

<dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.ly</groupId>
            <artifactId>cloud-eureka-common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

启动类

package com;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApp80 {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApp80.class,args);
    }
}

配置文件

 ​
 #设置端口号
 server:
   port: 80
 ​
 ​
 eureka:
   client:
     fetch-registry: true #是提供者,不是注册中心 ,可省略
     register-with-eureka: false #向注册中心 不注册服务,因此 是消费服务的
     service-url: #服务地址
       defaultZone: http://localhost:7001/eureka
 spring:
   application:
     name: consumer80      # 设置应用名, 注意, 值 不允许使用 下划线
 ​

配置类 注入 RestTemplate

 package com;
 ​
 ​
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.client.RestTemplate;
 ​
 /**
  * 配置类
  */
 @Configuration
 public class MyConfig {
 ​
     @Bean
     public RestTemplate restTemplate(){
         return new RestTemplate();
     }
 }
 ​

controller

 package com.controller;
 ​
 import com.ly.entity.OrderInfo;
 import com.ly.entity.User;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.client.RestTemplate;
 ​
 @RestController
 public class TestController {
 ​
     @Autowired
     private RestTemplate restTemplate;
 ​
     /**
      * 模拟查询 用户信息
      * @param id
      * @return
      */
     @GetMapping("/user/{id}")
     public User queryUser(@PathVariable("id")int id){
          //访问 8001 获得 数据
          return restTemplate.getForObject("http://localhost:8001/user/1",User.class);
 ​
     }
 ​
     /**
      * 模糊查询订单
      * @param id
      * @return
      */
     @GetMapping("/order/{id}")
     public OrderInfo queryOrder(@PathVariable("id")int id){
         //访问 8002 获得数据
       return restTemplate.getForObject("http://localhost:8002/order/3",OrderInfo.class);
     }
 ​
 ​
 }
 ​

启动 consumer 进行 测试

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

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

相关文章

亲测-wordpress文章实时同步发布修改删除多个站点的WP2WP插件

一款将wordpress文章同步到其他WordPress网站的插件&#xff0c;通过这款插件&#xff0c;可以保持不同博客之间文章发布、修改、删除的同步。 安装步骤&#xff1a; 主站和分站都要上传这个插件 1.把插件上传到wp-content\plugins解压出来wp2wp文件夹&#xff0c;然后启用插…

【强训笔记】day20

NO.1 思路&#xff1a;先判断能对砍几个回合&#xff0c;取最小值&#xff0c;因为回合数是整数&#xff0c;所以可能存在都大于0的情况&#xff0c;再判断一下如果都存活就再对砍一次&#xff0c;直到一家存活或者都死亡。 代码实现&#xff1a; #include<iostream>u…

【智能算法】最优捕食算法(OFA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2017年&#xff0c;GY Zhu受到动物行为生态学理论启发&#xff0c;提出了最优捕食算法&#xff08;Optimal Foraging Algorithm, OFA&#xff09;。 2.算法原理 2.1算法思想 OFA灵感来源…

四川景源畅信:小白做抖音电商怎么样?

在数字时代&#xff0c;抖音已成为一个不可忽视的电商平台。对于初入行的小白来说&#xff0c;涉足抖音电商似乎既充满机遇又伴随着挑战。要判断小白做抖音电商的可行性&#xff0c;我们不妨从几个关键方面进行深入探讨。 一、市场趋势与流量获取 抖音作为新媒体的代表之一&…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第一周) - 自然语言处理介绍和线性分类

自然语言处理介绍和线性分类 1. 自然语言处理介绍2. 线性二分类3. 情感分析和基础特征提取 3.1. 情感分析3.2. 特征提取3.3. 文本预处理 4. 学习的基础-梯度下降算法5. 感知机6. 逻辑回归7. 情感分析8. 感知机和逻辑回归 1. 自然语言处理介绍 自然语言处理的目标是什么 能够解…

最新兼职副业推荐,支付宝生活号分成计划上线,千万不要错过

支付宝之所以推出分成计划&#xff0c;是因为目前支付宝正在努力迎头赶上市场&#xff0c;不能让抖音独占鳌头。因此&#xff0c;从1月份开始&#xff0c;支付宝推出了直播板块&#xff0c;紧接着在4月份又启动了视频分成计划。 周周近财&#xff1a;让网络小白少花冤枉钱&…

Git 的原理与使用(上)

Git是一个分布式版本控制系统&#xff0c;它被广泛用于协作开发和管理软件项目。开发人员可以通过Git来跟踪文件的变化、协调工作、并管理项目的不同版本。 Git允许用户在不同的分支上开发新功能&#xff0c;然后合并这些分支并确保团队成员之间的工作协调一致。此外&#xff…

打印图形(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i, j;//循环打印&#xff1b;for (i 0; i < 5; i){//列&#xff1b;for (j 0; j &…

数据链路层——计算机网络学习笔记三

使用点对点信道的数据链路层 前言&#xff1a; 1.数据链路层的重要性&#xff1a;网络中的主机、路由器都必须实现数据连输层&#xff1b; 2.数据链路层中使用的信道&#xff1a; 点对点信道&#xff1a;这种信道是一对一的通信方式&#xff1b; 广播信道&#xff1a;使用一对多…

爱普生推出5G基站可用耐高温高稳定性温补晶振

爱普生推出了六款新的温补晶振型号:TG7050CKN&#xff0c;TG7050SKNTG7050CMN&#xff0c;TG7050SMN&#xff0c;TG-5510CA&#xff0c;TG-5511CA。这几款的特点就是耐高温温度可达105℃C高温&#xff0c;而且都是高稳定性温补晶振&#xff0c;而且都是7050尺寸&#xff0c;这个…

python代码实现TF-IDF

1、TF-IDF解释 TF-IDF&#xff08;Term frequency–inverse document frequency&#xff09;&#xff0c;中文翻译就是词频 - 逆文档频率&#xff0c;是一种用来计算关键词的传统方法。 TF&#xff08;Term Frequency&#xff09;&#xff1a;TF 的意思就是词频&#xff0c;是…

031.下一个排列Java实现

题意 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&#…

上位机图像处理和嵌入式模块部署(树莓派4b使用的注意事项)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 树莓派系列开发板最早的时候&#xff0c;价格还是比较高的。不过由于它生态比较丰富&#xff0c;使用起来比较方便&#xff0c;所以大家都默认了它…

光学镜片镀膜自动上下料工艺解决方案

在当今竞争激烈的制造业市场中&#xff0c;如何提高产品质量和生产效率成为了企业关注的焦点。富唯镀膜上下料设备以其高精度上下料技术&#xff0c;成为了产业升级的得力助手。 产品介绍 实现功能&#xff1a;富唯镀膜上下料设备拥有先进的设计理念和精湛的技术工艺&#xff…

前端小技巧:如何自定义网页的右键菜单(如何禁用网页的右键菜单)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 右键菜单设置 📒📝 自定义右键菜单实现步骤📝 示例代码📝 涉及的JavaScript语法和参数📝 禁用特定区域的右键菜单⚓️ 相关链接 ⚓️📖 介绍 📖 在网页设计中,一个直观且个性化的右键菜单可以显著提升用户的交互…

【机器学习数据可视化-04】Pyecharts数据可视化宝典

一、引言 在大数据和信息爆炸的时代&#xff0c;数据可视化成为了信息传递和展示的关键手段。通过直观的图表和图形&#xff0c;我们能够更好地理解数据&#xff0c;挖掘其背后的信息。Pyecharts&#xff0c;作为一款基于Python的数据可视化库&#xff0c;凭借其丰富的图表类型…

【回溯 字典树(前缀树)】212. 单词搜索 II

本文涉及知识点 回溯 字典树&#xff08;前缀树&#xff09; LeetCode212. 单词搜索 II 给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元…

代码随想录——二叉树的层序遍历(Leetcode102)二叉树层序遍历的模板

题目链接 层序遍历&#xff08;队列&#xff09; 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。 需要借用一个辅助数据结构即队列来实现&#xff0c;队列先进先出&#xff0c;符合一层一层遍历的逻辑&#xff0c;而用…

【C/C++】C/C++ 校园失物招领系统设计与实现(源码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【雷音系·雷修】倪琴古琴,倪诗韵亲签古琴

雷音系列雷修&#xff1a;“修”字取意善、美好的&#xff0c;更有“使之完美”之意。精品桐木或普通杉木制&#xff0c;栗壳色&#xff0c;纯鹿角霜生漆工艺。方形龙池凤沼。红木配件&#xff0c;龙池上方有“倪诗韵”亲笔签名&#xff0c;凤沼下方位置处有“雷•修”等级葫芦…