Spring Cloud简介–配置(第一部分)

1.概述

Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的某些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。

它有助于管理构建分布式系统所涉及的复杂性。

2.微服务

微服务是一种软件开发体系结构样式,它将应用程序分解为一组松散耦合的服务。

它提高了模块性,从而使应用程序更易于开发,测试和部署。

通过使小型团队并行处理不同的服务,这也使开发过程更加高效。

在微服务架构中,服务之间的通信,管理配置等也存在各种困难。

应该通过“ 十二要素应用宣言”来解决微服务体系结构所引起的许多问题。

3. Spring Cloud Config

Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持。

它具有两个组件,即配置服务器和配置客户端。

Config Server是在所有环境中管理应用程序外部属性的中心位置。 我们还可以使用Git对配置文件进行版本控制。 它公开了REST API,供客户端连接并获取所需的配置。 我们还可以利用Spring Profiles为不同的Profile(环境)管理不同的配置文件。

3.依存关系

我们将使用Gradle构建我们的项目。 我建议使用Spring Initializr引导您的项目。

我们将使用:

  • Spring靴2
  • Spring Webflux
  • Spring Reactive Data MongoDB
  • Spring Security反应式Webflux
  • Lombok

并非所有的Spring库都有稳定的版本。

Lombok用于减少模型和POJO的样板代码。 它可以自动生成setter / getter,默认构造函数,toString等方法。

buildscript {ext {springBootVersion = '2.0.0.M2'}
...
}dependencies {compile('org.springframework.boot:spring-boot-starter-data-mongodb-reactive')compile('org.springframework.boot:spring-boot-starter-webflux')compile('org.springframework.security:spring-security-core')compile('org.springframework.security:spring-security-config')compile('org.springframework.security:spring-security-webflux')compileOnly('org.projectlombok:lombok')
...
}

4.自动配置

我们将让Spring Boot根据添加的依赖项自动配置我们的应用程序。

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

为了在应用程序配置中使用非默认值,我们可以将它们指定为属性,Spring Boot会自动使用它们来创建bean。

spring.data.mongodb.database=demo

MongoDB,Web和安全性所需的所有bean将自动创建。

5.数据库

我们将在示例中使用MongoDB和一个简单的POJO。 将自动创建一个PersonRepository bean。

@Data
@NoArgsConstructor
@Document
public class Person {@Id private String id;private String name;
}public interface PersonRespository extends ReactiveMongoRepository<Person, String> {Flux<Person> findByName(String name);
}

6. Web API

我们将为Person创建REST端点。

Spring 5增加了对在功能上创建路由的支持,同时仍然支持基于注释的传统创建方式。

让我们在示例的帮助下看看它们两个。

基于注释

这是创建端点的传统方式。

@RestController
@RequestMapping("/person")
public class PersonController {@Autowiredprivate PersonRespository personRespository;@GetMappingpublic Flux<Person> index() {return personRespository.findAll();}
}

这将创建一个REST端点/ person ,它将以响应方式返回所有Person记录。

路由器功能

这是创建端点的一种新的简洁方法。

@Bean
RouterFunction<?> routes(PersonRespository personRespository) {return nest(path("/person"),route(RequestPredicates.GET("/{id}"),request -> ok().body(personRespository.findById(request.pathVariable("id")), Person.class)).andRoute(method(HttpMethod.POST),request -> {personRespository.insert(request.bodyToMono(Person.class)).subscribe();return ok().build();}));
}

nest方法用于创建嵌套路由,其中​​一组路由共享一个公共路径(前缀),标头或其他RequestPredicate

因此,在本例中,所有相应的路由都具有公共前缀/ person

在第一个途径中,我们公开了GET API / person / {id} ,它将检索相应的记录并返回它。

在第二种方法中,我们公开了一个POST API / person ,它将接收一个Person对象并将其保存在数据库中。

cURL命令相同:

curl http://localhost:8080/person -v -u tom:password
curl http://localhost:8080/person/{id} -v -u tom:password
curl http://localhost:8080/person -X POST -d '{"name":"John Doe","age":20}' -H "Content-Type: application/json" -v -u tom:password

我们应该在Spring配置文件中定义路由。

7.安全性

在示例中,我们将使用非常简单的基本身份验证机制。

@Bean
UserDetailsRepository userDetailsRepository() {UserDetails tom = withUsername("tom").password("password").roles("USER").build();UserDetails harry = withUsername("harry").password("password").roles("USER", "ADMIN").build();return new MapUserDetailsRepository(tom, harry);
}

我们为应用程序添加了一些用户,并为其分配了不同的角色。

8.结论

我尝试用一​​个简单的示例解释如何使用Spring Boot构建一个简单的Reactive Web应用程序。

您可以阅读有关以下内容的更多信息:

  • 春云
  • Spring数据反应式
  • Spring Functional Web框架

您可以在Github上找到Config Server & Library Service的完整示例。

翻译自: https://www.javacodegeeks.com/2018/04/introduction-to-spring-cloud-config-part-i.html

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

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

相关文章

Linux 实现网页劫持,Linux下实现劫持系统调用的总结(上)--代码及实现

godbach2015-04-07 19:03yzh07137&#xff1a;你好&#xff0c;我看了你的这篇关于linux劫持open调用的文章[url]http://bbs.chinaunix.net/thread-1946913-1-1.html[/url](有点久远了)我在ubuntu12.04.5(内核是3.13.0.20-32-generic)上试验了&#xff0c;结果编译报错了&#…

python下载之后无法启动_安装后启动时,适用于Python的Eric IDE崩溃

On Windows 7 I successfully installed Python 3.73 and then installed Eric 6, the Python IDE. 安装似乎已成功&#xff0c;但是当我启动Eric时&#xff0c;将打开一个窗口&#xff0c;然后出现错误弹出窗口&#xff0c;提示Python已停止。 我非常感谢您为解决此问题提供的…

深度linux更新卡,深度操作系统已发布更新 新增“ apt-get custom-update”命令行

深度操作系统现已发布最新更新&#xff0c;新增“apt-getcustom-update”命令行&#xff0c;支持指定源更新&#xff0c;同时修复了关闭检查应用商店的应用更新后不生效的问题。此外&#xff0c;使用快捷键“ctrlaltR”进行录屏实际触发为截图的问题也已修复。值得一提的是&…

苹果笔记本macbook pro如何安装python_在Mac上兼容安装Python3并保留原先的Python2.7

前言 博主的电脑为2017款macbook pro &#xff0c;电脑自带python2.7版本&#xff0c;在网上查资料得知由于很多系统服务依赖于自带的2.7py&#xff0c;所以不敢卸载&#xff0c;因此只能安装双兼容python&#xff0c;这里以Python3.7版本为例。 1、安装Xcode Command Line Too…

javafx中的tree_JavaFX中的塔防

javafx中的tree我想长时间使用我的游戏引擎来编写《塔防》游戏&#xff0c;但是由于另一个小组努力创建JavaFX《塔防》游戏&#xff0c;所以我认为我宁愿创建另一款游戏。 从邮件列表中&#xff0c;我了解到不再开发其他游戏。 因此&#xff0c;我决定尝试一下。 塔防是一款非…

ubuntu linux theme,如何在Ubuntu 20.04中启用全局暗黑主题

Ubuntu 20.04在设置实用程序中引入了新的Dark暗模式。但是&#xff0c;当您在Gnome Shell中将其打开时&#xff0c;它并不是完全暗黑。系统任务栏菜单&#xff0c;顶部栏中的日历&#xff0c;通知弹出窗口和桌面上下文菜单不是暗的&#xff0c;而且当您在 Light&#xff0c;Dar…

python3语音识别模块_零基础教你玩转语音控制,学习语音控制技术,打造智能生活很简单...

大家好&#xff0c;我是阿乐&#xff0c;今天给大家讲解一下LD3320语音识别模块。先来看看模块实物&#xff0c;它是长这个样子的&#xff1a;LD3320语音识别模块实物我现在用来给大家做讲解的这个模块是已经集成了单片机在上面&#xff0c;这样子开发起来就更简单一些&#xf…

Apache Derby数据库用户和权限

抽象 Apache Derby很棒&#xff01; 尤其是在微服务环境中&#xff0c;服务的数据&#xff08;可能&#xff09;会缩减&#xff0c;并且不需要更强大的RDBMS。 Derby很棒&#xff0c;因为它非常易于使用&#xff0c;尤其是在涉及用户和权限时&#xff0c;您不需要任何东西&…

c语言程序设计常用语句格式,全国计算机考试二级C语言程序设计要求

(一)C语言的结构1、程序的构成&#xff0c;main函数和其他函数。2、头文件、数据说明、函数的开始和结束标志。3、源程序的书写格式。4、C语言的风格。(二)数据类型及其运算1、C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法。2、C运算符的种类、运算优先级和…

python绘制直方图显示数字_python dataframe中各元素出现次数统计及画直方图

比如&#xff1a; print(Counter(a[0])) Counter({sausage: 825, whole milk: 717, frankfurter: 580, tropical fruit: 482, other vegetables: 460, citrus fruit: 453, pork: 385, rolls/buns: 336, chicken: 311, canned beer: 310, beef: 304, soda: 294, root vegetables…

应用c语言编辑画图程序,应用C语言编辑画图程序

您可能感兴趣的话题&#xff1a;C语言核心提示&#xff1a;笔者在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题笔者在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题.由于电力系统一次接线图比较复杂,用一般的编程…

多少秒算长镜头_自从搞烘焙后,遇到烘焙模具换算,秒变数学渣...

从小学到大学我们学习的计量单位简直太多了&#xff0c;秒、米 、千克、开尔文、安培、坎德拉、摩尔......什么长度、体积、面积都知道怎么算&#xff0c;想想上学的时候我还是很强大的。 自从搞烘焙后&#xff0c;遇到烘焙模具换算&#xff0c;秒变数学渣...教程食谱中的一小勺…

怎样实现登录用户管理_如何编写程序实现图书管理系统里面的用户管理功能

上节课完成了库存管理功能。这节课来完成用户管理功能。编写用户管理功能用户管理主要是针对数据库表user进行维护&#xff0c;功能包括查询、新增、编辑和删除。特别注意&#xff0c;删除用户时要确保该用户的不存在订单记录。防止在查询订单时找不到对应的用户信息&#xff0…

rest开发_REST 101开发人员专用

rest开发本地代码执行 诸如C之类的高级语言中的函数将被汇编为Assembly中的过程 。 它们增加了一个间接级别&#xff0c;使我们不必考虑内存地址。 诸如Java之类的面向对象语言中的方法和多态性增加了另一种间接性 &#xff0c;使我们不必考虑一组相似功能的特定变体。 尽管…

c语言 交互式电子白板案例,交互式电子白板教学案例

交互式电子白板教学案例交互式电子白板教学案例——电子白板让修改习作不再难钢城一小 熊莉红前言——转眼间&#xff0c;一年的时间稍瞬即逝。2012年的暑假&#xff0c;我们学校在每一个班级都安装了交互式电子白板&#xff0c;面对着这一新兴的产物&#xff0c;老师们跃跃欲试…

matlabrvctools主要功能及实际应用_【从业必备 | 收藏】ISO26262功能安全标准白皮书:关键组成、软硬件认证、测试过程、合规认证工具...

ISO26262功能安全标准白皮书&#xff1a;关键组成、软硬件认证、测试过程&#xff0c;合规的认证工具目 录背景ISO 26262的关键部分硬件组件认证软件组件认证“在实践中证明”的证据应用于现有流程测试工具认证下一步1. 背景随着各行业引进一系列产品设计和测试的标准化流…

python语言中整型对应的英文_Python基本数据类型详细介绍(转)

1、空&#xff08;None&#xff09;表示该值是一个空对象&#xff0c;空值是Python里一个特殊的值&#xff0c;用None表示。None不能理解为0&#xff0c;因为0是有意义的&#xff0c;而None是一个特殊的空值。 2、布尔类型&#xff08;Boolean&#xff09; 在 Python中&#xf…

JVM体系结构:JVM中的执行引擎

各位读者好&#xff01; 在JVM系列的上一篇文章中&#xff0c;开发人员了解了虚拟机的ClassLoader和Runtime Data Areas组件。 本教程将帮助开发人员正确理解JVM中的执行引擎 。 1.简介 在继续之前&#xff0c;让我们看一下Java虚拟机及其基本特征。 1.1什么是Java虚拟机&…

简单c语言课设计题目,C语言课程设计题目

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼18、学生管理系统(限最多2人完成)使用下面的数据&#xff0c;用C设计一个简单的学籍管理系统&#xff0c;实现出最基本的功能。学生基本信息文件(A.TXT)及其内容&#xff1a;A.TXT文件不需要编程录入数据&#xff0c;可用文本编辑工…

python编程语言优缺点_原创001 第一次接触这个神奇而又无所不能的编程语言:Python...

***********************人生苦短&#xff0c;我用Python&#xff0c;不定期更新博客&#xff0c;小伙伴们记得关注******************** OK&#xff0c;说到Python这个语言&#xff0c;相信大家。对它还是有一点小陌生&#xff0c;对于编程语言来说&#xff0c;我们大家耳熟能…