Springboot搭建微服务案例之Eureka注册中心
一、父工程依赖管理
<?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>org.mumu</groupId><artifactId>eureka</artifactId><packaging>pom</packaging><version>1.0</version><modules><module>common</module><module>consumer</module><module>springcloud-service-provider</module></modules><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><mysql.version>5.1.47</mysql.version><lombok.version>1.16.18</lombok.version><druid.version>1.1.16</druid.version><mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>2.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>2.2.1.RELEASE</version></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-project-info-reports-plugin</artifactId><version>3.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.2.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version><scope>runtime</scope></dependency><!-- <!- druid->--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring.boot.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><addResources>true</addResources></configuration></plugin></plugins></build></project>
二、搭建公共模块common
放一些pojo类
1. 依赖引入
<?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>eureka</artifactId><groupId>org.mumu</groupId><version>1.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloud-service-common</artifactId><version>1.0</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency></dependencies></project>
2.实体类
@Data // 省略写get set方法
@NoArgsConstructor //提供无参数的构造函数
@AllArgsConstructor //提供带所有参数的构造函数
public class Payment implements Serializable {private long id;private String serial;
}
三、搭建服务提供方provider
1.依赖引入
<?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>eureka</artifactId><groupId>org.mumu</groupId><version>1.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloud-service-provider</artifactId><version>1.0</version><groupId>org.mumu</groupId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.mumu</groupId><artifactId>springcloud-service-common</artifactId><version>1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><!--mysql-connector-java--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--jdbc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--eureka-client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies></project>
2.配置类
server:port: 8001 #配置服务端口号
spring:application:name: service-provider # 配置服务提供方的名称datasource: # 配置连接数据库的基本信息driver-class-name: com.mysql.jdbc.Driver # 驱动url: jdbc:mysql://localhost:3306/cloud2023 # 连接数据库的urlusername: root # 连接数据库的用户名password: 123456 # 连接数据库的密码
mybatis:config-location: classpath:/mybatis/sqlMapConfig.xml # 引入mybatis的核心配置文件mapper-locations: classpath:/mybatis/mapper/*.xml # 引入mybatis的映射文件
eureka:client:register-with-eureka: true # 允许将当前服务注册到eureka注册中心fetch-registry: true # 允许当前微服务拉取注册中心中的服务信息service-url:defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/ # eureka注册中心的地址
3.编写启动类
@SpringBootApplication
@MapperScan(basePackages = "com.xq.dao")
@EnableDiscoveryClient //开启服务发现的功能
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class,args);}
}
4. 编写业务逻辑
(1)整合mybatis
dao层
public interface PaymentDao {//根据id查询payment信息public Payment findById(long id);//新增payment信息public void add(Payment payment);
}
创建dao接口的映射文件还有mybatis的核心配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="org.mumu.dao.PaymentDao"><!--根据id查询payment信息--><select id="findById" parameterType="long" resultType="payment">SELECT * FROM `payment` WHERE id = #{id}</select><!--新增payment信息--><insert id="add" parameterType="payment">INSERT INTO `payment`(`id`,`serial`) VALUES(#{id},#{serial})</insert>
</mapper>
配置 MyBatis 的类型别名,简化 MyBatis 映射文件中的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--取别名--><typeAliases><package name="org.mumu.pojo"></package></typeAliases>
</configuration>
(2)Service
@Service
public class PaymentServiceImpl implements PaymentService {@ResourcePaymentDao paymentDao;@Overridepublic Payment findById(long id) {return paymentDao.findById(id);}@Overridepublic void add(Payment payment) {paymentDao.add(payment);}@Overridepublic void save(Payment payment) {paymentDao.add(payment);}
}
5.定义控制器
@RestController
@RequestMapping("provider")
public class PaymentController {@ResourcePaymentService paymentService;@Value("${server.port}")String port;@RequestMapping("findById")public Result<Payment> findById(@RequestParam("id") long id){try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}Payment payment = paymentService.findById(id);return new Result<>(200,"数据查询成功,当前服务端口号是:" + this.port,payment);}
}
四、搭建服务消费方consumer
1.依赖引入
<dependencies><dependency><groupId>org.mumu</groupId><artifactId>springcloud-service-common</artifactId><version>1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--eureka-client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies>
2.配置类
server:port: 80
spring:application:name: service-consumer
eureka:client:register-with-eureka: true # 允许将当前服务注册到eureka注册中心fetch-registry: true # 允许当前微服务拉取注册中心中的服务信息service-url:defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/ # eureka注册中心的地址
3.启动类
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class,args);}
}
4.注入RestTemplate组件到ioc容器
@Configuration
public class MyConfig {@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}
5.定义控制器
@RestController
@RequestMapping("consumer")
@Slf4j
public class PaymentController {@ResourceRestTemplate restTemplate;@RequestMapping("findById/{id}")public Result<Payment> findById(@PathVariable("id") long id){String url = "http://localhost:8001/provider/findById?id=" + id; //维护服务提供方的ip+端口Result result = restTemplate.getForObject(url, Result.class);return result;}
} 五、搭建服务注册中心
1.引入依赖server
<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version> <!-- 使用与Tomcat 9.0.29 兼容的版本 --></dependency><!--eureka服务端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><!--web启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency></dependencies> 2.配置类
这里不需要要进行服务注册,因为这个模块的server模块
负责对其他Client进行服务注册
server:port: 7001
# 配置eureka服务端
eureka:client:register-with-eureka: false # 禁止自己注册自己fetch-registry: false # 禁止抓取注册中心中的服务信息service-url:defaultZone: http://localhost:7001/eureka/ # eureka服务端的地址 3.启动类
@SpringBootApplication
@EnableEurekaServer // 标识当前服务是Eurkea服务端
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class,args);}
} 六、启动
访问地址:http://localhost:7001

相关文章:
Springboot搭建微服务案例之Eureka注册中心
一、父工程依赖管理 <?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…...
【MySQL】用户管理权限控制
文章目录 前言一. 用户管理1. 创建用户2. 删除用户3. 修改用户密码 二. 权限控制1. 用户授权2. 查看权限3. 回收权限 结束语 前言 MySQL的数据其实也以文件形式保存,而登录信息同样保存在文件中 MySQL的数据在Linux下默认路径是/var/lib/mysql 登录MySQL同样也可以…...
若依框架前后端分离版服务器部署,前端nginx的配置
server {listen 80;server_name 120.46.177.184;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/qilaike-vue/dist;#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则#error_page 404/404.html;#SSL-END…...
基于单片机的滚筒洗衣机智能控制系统设计
收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、系统整体设计方案2.1控制系统的功能2.2设计的主要内容 二、硬件设计3.1 控制系统整体框图3.2 电源电路 三 软件设计主程序设计仿真设计 四、 结论 概要 因此我们需要一个完善的智能系统来设计一个全自动滚筒洗…...
简述多模态学习中,对齐、融合和表示
在多模态学习中,对齐、融合和表示是三个核心概念,它们相互关联,共同支持多模态数据的处理和分析。 对齐(Alignment) 对齐是多模态学习中的一个关键步骤,它涉及到如何在不同的数据模态之间发现和建立对应关…...
Kotlin 进阶函数式编程技巧
Kotlin 进阶函数式编程技巧 Kotlin 简介 软件开发环境不断变化,要求开发人员不仅适应,更要进化。Kotlin 以其简洁的语法和强大的功能迅速成为许多人进化过程中的信赖伙伴。虽然 Kotlin 的初始吸引力可能是它的简洁语法和与 Java 的互操作性,…...
操作系统——内存映射文件(王道视频p57)
1.总体概述: 2.传统文件访问方式: 我认为,这种方式最大的劣势在于,如果要对整个文件的不同部分进行多次操作的话,这样确实开销可能会大一些,而且程序员还要指定对应的“分块”载入到内存中 3.内存映射文件…...
王道p18 07.将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。(c语言代码实现)
视频讲解在这:👇 p18 第7题 c语言代码实现王道数据结构课后代码题_哔哩哔哩_bilibili 本题代码如下 int merge(struct sqlist* A, struct sqlist* B, struct sqlist* C) {if (A->length B->length > C->length)//大于顺序表的最大长度r…...
2024最新mac电脑清理垃圾的软件有哪些?
mac电脑是许多人喜爱的电子产品,它拥有优美的设计、流畅的操作系统和强大的性能。但是,随着使用时间的增长,mac电脑也会积累一些不必要的垃圾文件,这些文件会占用宝贵的存储空间,影响电脑的运行速度和稳定性。因此&…...
2023年【山东省安全员C证】考试技巧及山东省安全员C证模拟试题
题库来源:安全生产模拟考试一点通公众号小程序 山东省安全员C证考试技巧考前必练!安全生产模拟考试一点通每个月更新山东省安全员C证模拟试题题目及答案!多做几遍,其实通过山东省安全员C证模拟考试题很简单。 1、【多选题】《环境…...
2024最新免费的mac电脑清理垃圾的软件有哪些?
mac电脑是许多人喜爱的电子产品,它拥有优美的设计、流畅的操作系统和强大的性能。但是,随着使用时间的增长,mac电脑也会积累一些不必要的垃圾文件,这些文件会占用宝贵的存储空间,影响电脑的运行速度和稳定性。因此&…...
linux下sqlplus登录oracle显示问号处理办法
问题描述 昨天紧急通过rpm按安装方式给客户装了一台linux的19c数据库,操作系统是CentOs Stream release 9,过程不再回忆了… 今天应用发现sqlplus登入后部分显示问号?,需要处理下 原因分析: 很明显,这就是…...
Git 删除本地和远程分支
目录 删除本地和远程分支分支删除验证验证本地分支验证远程分支 开源项目微服务商城项目前后端分离项目 删除本地和远程分支 删除 youlai-mall 的 dev 本地和远程分支 # 删除本地 dev 分支(注:一定要切换到dev之外的分支才能删除,否则报错&…...
Selenium元素定位之页面检测技巧
在进行web自动化测试的时候进行XPath或者CSS定位,需要检测页面元素定位是否正确,如果用脚本去检测,那么效率是极低的。 一般网上推选装额外的插件来实现页面元素定位检测 如:firebug。 其实F12开发者工具就能直接在页面上检测元…...
C# 文件 文件夹 解除占用
文件/文件夹 解除占用或直接删除。 编程语言:C# 这个就不用过多功能描述了。 注册windows 文件/文件夹 右键菜单。 文件夹解除占用:遍历文件夹所有文件,判断是否被占用,先解除文件占用,后解除文件夹占用࿰…...
数据库 存储引擎
存储引擎概念 在mysql当中数据库用不同的技术存储在文件中,每一种技术都是使用不同的存储引擎机制,索引技巧,锁定水平,以及最终提供的不同的功能和能力,这些就是我们说的存储引擎 主要功能 1mysql将数据存储在文件系…...
操作系统复习(2)进程管理
一、概述 1.1程序的顺序执行 一个具有独立功能的程序独占CPU运行,直至得到最终结果的过程称为程序的顺序执行。 程序的并发执行所表现出的特性说明两个问题 ⑴ 程序和计算机执行程序的活动不再一一对应 ⑵ 并发程序间存在相互制约关系(要求共享信息&…...
通过51单片机控制28byj48步进电机按角度正反转旋转
一、前言 本项目基于STC89C52单片机,通过控制28BYJ-48步进电机实现按角度正反转旋转的功能。28BYJ-48步进电机是一种常用的电机,精准定位和高扭矩输出,适用于许多小型的自动化系统和机械装置。 在这个项目中,使用STC89C52单片机…...
二十三种设计模式全面解析-装饰器模式的高级应用:打造灵活可扩展的通知系统
在现代软件开发中,通知系统是一个广泛应用的功能,用于实时向用户发送各种类型的通知,如短信、微信、邮件以及系统通知。然而,通知系统的需求通常是多变且动态的,因此需要一种灵活可扩展的设计模式来满足不同类型的通知…...
使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令
背景 最近面对一个庞大的项目,但是只需要修改某个模块,每次都手搓命令太麻烦了,于是就想着能不能写个脚本来辅助处理这些事情。 解决方案 定制化一键 ESLint,执行文件下载地址: https://github.com/mazeyqian/go-g…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
