springboot
文章平均质量分 94
我乐了.
这个作者很懒,什么都没留下…
展开
-
服务测试:如何使用 Spring 测试 Web 服务层组件?
通过前面内容的学习,相信你已经感受到了各种测试注解在测试 Spring Boot 应用程序的过程中所发挥的核心作用。如下所示表格,我们罗列了一些经常使用的测试注解及其描述。原创 2024-02-04 13:46:39 · 909 阅读 · 0 评论 -
数据测试:如何使用 Spring 测试数据访问层组件?
虽然这我们指定的是 SpringRunner.class,实际上,SpringRunner 就是 SpringJUnit4ClassRunner 的简化,它允许 JUnit 和 Spring TestContext 整合运行,而 Spring TestContext 则提供了用于测试 Spring 应用程序的各项通用的支持功能。在上面的例子中,我们是通过直接使用 @SpringBootTest 注解提供的默认功能对作为 Bootstrap 类的 Application 类进行测试。原创 2024-02-04 13:43:22 · 752 阅读 · 0 评论 -
运行管理:如何使用 Admin Server 管理 Spring 应用程序?
从上图中,我们不难看出,Spring Boot Admin 的整体架构中存在两大角色,即服务器端组件 Admin Server 和客户端组件 Admin Client。在 Spring 家族中,存在一个用于构建微服务架构的 Spring Cloud 框架,而该框架中恰好存在一款专门实现服务注册和发现的组件——服务注册中心 Spring Cloud Netflix Eureka ,且 Spring Boot Admin 内置了与这款注册中心实现工具的无缝集成。这样,Eureka 服务就构建完毕了。原创 2024-02-04 13:42:21 · 792 阅读 · 0 评论 -
指标定制:如何实现自定义度量指标和 Actuator 端点?
在日常开发过程中,扩展现有端点有时并不一定能满足业务需求,而自定义 Spring Boot Actuator 监控端点算是一种更灵活的方法。在这段代码中我们可以看到,MySystemEndpoint 主要通过系统环境变量获取所需监控信息。//端点 id//是否默认启动标志位这段代码中的 @Endpoint 注解主要用于设置端点 id 及是否默认启动的标志位。且在案例中,我们指定了 id 为“mysystem”,enableByDefault 标志为 true。原创 2024-02-04 13:41:19 · 648 阅读 · 0 评论 -
服务监控:如何使用 Actuator 组件实现系统监控?
显然,通过扩展 Health 端点为我们实时监控系统中各个服务的正常运行状态提供了很好的支持,我们也可以根据需要构建一系列有用的 HealthIndicator 实现类,并添加报警等监控手段。很多时候,Spring Boot 自身提供的 Info 端点并不能满足我们的业务需求,这就需要我们编写一个自定义的 InfoContributor 对象。根据 Spring Boot Actuator 默认提供的端点列表,我们将部分常见端点的类型、路径和描述梳理在如下表格中,仅供参考。原创 2024-02-04 13:40:09 · 1038 阅读 · 0 评论 -
服务授权:如何基于 Spring Security 确保请求安全访问?
在一个 Web 应用中,权限管理的对象是通过 Controller 层暴露的一个个 HTTP 端点,而这些 HTTP 端点就是需要授权访问的资源。开发人员使用 Spring Security 中提供的一系列丰富技术组件,即可通过简单的设置对权限进行灵活管理。实现访问授权的第一种方法是使用配置方法,关于配置方法的处理过程也是位于 WebSecurityConfigurerAdapter 类中,但使用的是 configure(HttpSecurity http) 方法,如下代码所示:上述代码就是 Spring原创 2024-02-04 13:38:46 · 543 阅读 · 0 评论 -
用户认证:如何基于 Spring Security 构建用户认证体系?
从上述代码中,我们看到 withUser 方法返回的是一个 UserDetailsBuilder 对象,通过该对象可以实现类似 .withUser("springcss_user").password("password1").roles("USER") 这样的链式语法,从而完成用户信息的设置。在 SpringSecurity 中,初始化用户信息所依赖的配置类是 WebSecurityConfigurer 接口,该接口实际上是一个空接口,继承了更为基础的 SecurityConfigurer 接口。原创 2024-02-04 13:37:29 · 1765 阅读 · 0 评论 -
安全架构:如何理解 Spring 安全体系的整体架构?
Spring Security 是 Spring 家族中历史比较悠久的一个框架,在 Spring Boot 出现之前,Spring Security 已经发展了很多年,尽管 Spring Security 的功能非常丰富,相比 Apache Shiro 这种轻量级的安全框架,它的优势就不那么明显了,加之应用程序中集成和配置 Spring Security 框架的过程比较复杂,因此它的发展过程并不是那么顺利。而正是随着 Spring Boot 的兴起,带动了 Spring Security 的发展。原创 2024-02-04 13:35:26 · 640 阅读 · 0 评论 -
消息驱动:如何使用 Rabbit Template 集成 RabbitMQ?
上图中,不同的路由算法存在不同的 Exchange 类型,而 AMQP 规范中指定了直接式交换器(Direct Exchange)、广播式交换器(Fanout Exchange)、主题式交换器(Topic Exchange)和消息头式交换器(Header Exchange)这几种 Exchange 类型,不过这一讲我们将重点介绍直接式交换器。消息中包含一个路由键(Routing Key),它由消息发送者产生,并提供给 Exchange 路由这条消息的标准。原创 2024-02-04 13:34:26 · 852 阅读 · 0 评论 -
消息驱动:如何使用 JMS Template 集成 ActiveMQ?
针对 ActiveMQ,目前有两个实现项目可供选择,一个是经典的 5.x 版本,另一个是下一代的 Artemis,关于这两者之间的关系,我们可以简单地认为 Artemis 是 ActiveMQ 的未来版本,代表 ActiveMQ 的发展趋势。而在 SpringCSS 案例中,Kafka、ActiveMQ 及 16 讲将要介绍的 RabbitMQ 都是消息中间件,在案例系统运行过程中,我们需要选择其中一种中间件演示消息发送和接收到过程,这样我们就需要针对不同的中间件设置不同的 Profile 了。原创 2024-02-04 13:31:16 · 554 阅读 · 0 评论 -
消息驱动:如何使用 KafkaTemplate 集成 Kafka?
消息通信机制的整体工作流程如下图所示:消息通信机制示意图上图中位于流程中间的就是各种消息中间件,消息中间件一般提供了消息的发送客户端和接收客户端组件,这些客户端组件会嵌入业务服务中。消息的生产者负责产生消息,在实际业务中一般由业务系统充当生产者;而消息的消费者负责消费消息,在实际业务中一般是后台系统负责异步消费。消息通信有两种基本模型,即发布-订阅(Pub-Sub)模型和点对点(Point to Point)模型,发布-订阅支持生产者消费者之间的一对多关系,而点对点模型中有且仅有一个消费者。原创 2024-02-04 13:29:33 · 855 阅读 · 0 评论 -
服务调用:如何正确理解 RetTemplate 远程调用实现原理?
创建 ClientHttpRequest 的过程是一种典型的工厂模式应用场景,这里我们直接创建了一个实现 ClientHttpRequestFactory 接口的 SimpleClientHttpRequestFactory 对象,然后再通过这个对象的 createRequest 方法创建了客户端请求对象 ClientHttpRequest 并返回给上层组件进行使用。在这里,我们发现这段代码实际上并没有真正处理返回的数据,而只是执行了错误处理。显然,我们应该进一步关注这里的 execute 方法。原创 2024-02-03 13:19:06 · 661 阅读 · 0 评论 -
服务调用:如何使用 RetTemplate 消费 RESTful 服务?
事实上,OrderMapper 与 Order 对象的内部字段一一对应,它们分别位于两个不同的代码工程中,为了以示区别我们才故意在命名上做了区分。原创 2024-02-03 13:17:30 · 534 阅读 · 0 评论 -
服务发布:如何构建一个 RESTful 风格的 Web 服务?
REST(Representational State Transfer,表述性状态转移)本质上只是一种架构风格而不是一种规范,这种架构风格把位于服务器端的访问入口看作一个资源,每个资源都使用 URI(Universal Resource Identifier,统一资源标识符) 得到一个唯一的地址,且在传输协议上使用标准的 HTTP 方法,比如最常见的 GET、PUT、POST 和 DELETE。当然,你也可以继续使用原先的 @RequestMapping 实现同样的效果。id=XXX 这种路径形式。原创 2024-02-03 13:15:52 · 565 阅读 · 0 评论 -
ORM 集成:如何使用 Spring Data JPA 访问关系型数据库?
从上面代码中我们发现,OrderJpaRepository 是一个继承了 JpaRepository 接口的空接口,基于 09 讲的介绍,我们知道 OrderJpaRepository 实际上已经具备了访问数据库的基本 CRUD 功能。原创 2024-02-03 13:13:23 · 796 阅读 · 0 评论 -
数据抽象:Spring Data 如何对数据访问过程进行统一抽象?
首先我们需要指定一些查询关键字,常见的关键字如下表所示:方法名衍生查询中查询关键字列表有了这些查询关键字后,在方法命名上我们还需要指定查询字段和一些限制性条件。例如,在前面的示例中,我们只是基于“fistName”和“lastName”这两个字段做查询。事实上,我们可以查询的内容非常多,下表列出了更多的方法名衍生查询示例,你可以参考下。方法名衍生查询示例在 Spring Data 中,方法名衍生查询的功能非常强大,上表中罗列的这些也只是全部功能中的一小部分而已。原创 2024-02-03 13:12:15 · 731 阅读 · 0 评论 -
数据访问:如何剖析 JdbcTemplate 数据访问实现原理?
首先,CallbackJdbcTemplate 不是一个抽象类。其次,execute 方法签名上传入的是一个 StatementCallback 对象,而具体的定制化处理是通过 Statement 传入到 Callback 对象中完成的,我们也可以认为是把原有需要子类抽象方法实现的功能转嫁到了 StatementCallback 对象上。原创 2024-02-03 13:10:39 · 888 阅读 · 0 评论 -
数据访问:如何使用 JDBC Template 访问关系型数据库?
上述 saveOrderWithJdbcTemplate 的方法比想象中要复杂,主要原因在于我们需要在插入 order 表的同时返回数据库中所生成的自增主键,因此,这里使用了 PreparedStatementCreator 工具类封装 PreparedStatement 对象的构建过程,并在 PreparedStatement 的创建过程中设置了 Statement.RETURN_GENERATED_KEYS 用于返回自增主键。我们通过构建一个 Map 对象,然后把需要添加的字段设置成一个个键值对。原创 2024-02-03 13:09:42 · 903 阅读 · 0 评论 -
基础规范:如何理解 JDBC 关系型数据库访问规范?
从接口的命名上看,我们可以判断该接口起到一种包装器的作用。正如前面的 JDBC 规范整体架构图中所示,JDBC 中的 DriverManager 主要负责加载各种不同的驱动程序(Driver),并根据不同的请求向应用程序返回相应的数据库连接(Connection),应用程序再通过调用 JDBC API 实现对数据库的操作。所谓预编译,是指数据库的编译器会对 SQL 语句提前编译,然后将预编译的结果缓存到数据库中,下次执行时就可以通过替换参数并直接使用编译过的语句,从而大大提高 SQL 的执行效率。原创 2024-02-03 13:07:01 · 931 阅读 · 0 评论 -
自动配置:如何正确理解 Spring Boot 自动配置实现原理?
当服务提供者提供了服务接口的一种实现之后,我们可以在 jar 包的 META-INF/services/ 目录下创建一个以服务接口命名的文件,该文件里配置着一组 Key-Value,用于指定服务接口与实现该服务接口具体实现类的映射关系。可以看到, @ConditionalOnClass 注解本身带有两个属性,一个 Class 类型的 value,一个 String 类型的 name,所以我们可以采用这两种方式中的任意一种来使用该注解。如果有对应的配置类,则按条件进行判断,决定是否需要装配。原创 2024-02-03 13:05:43 · 712 阅读 · 0 评论 -
定制配置:如何创建和管理自定义的配置信息?
在现实的开发过程中,面对纷繁复杂的应用场景,Spring Boot 所提供的内置配置信息并不一定能够完全满足开发的需求,这就需要开发人员创建并管理各种自定义的配置信息。例如,对于一个电商类应用场景,为了鼓励用户完成下单操作,我们希望每完成一个订单给就给到用户一定数量的积分。这里,我们设置了每个订单对应的积分为 10,那么应用程序该如何获取这个配置项的内容呢?通常有两种方法。原创 2024-02-03 13:04:08 · 1000 阅读 · 0 评论 -
多维配置:如何使用 Spring Boot 中的配置体系?
另一方面,为了达到集中化管理的目的,Spring Boot 对配置文件的命名也做了一定的约定,分别使用 label 和 profile 概念来指定配置信息的版本以及运行环境,其中 label 表示配置版本控制信息,而 profile 则用来指定该配置文件所对应的环境。好了,现在我们已经明白如何构建、打包以及运行一个简单的 Web 应用程序了,这是一切开发工作的起点,后续所有的案例代码我们都将通过这种方式展现在你面前,包括接下来要介绍的 Spring Boot 配置体系也是一样。原创 2024-02-03 12:37:53 · 951 阅读 · 0 评论 -
案例驱动:如何剖析一个 Spring Web 应用程序?
其中,@RequestMapping 用于指定请求地址的映射关系,@GetMapping 的作用等同于指定了 GET 请求的 @RequestMapping 注解,而 @RestController 注解是传统 Spring MVC 中所提供的 @Controller 注解的升级版,相当于就是 @Controller 和 @ResponseEntity 注解的结合体,会自动使用 JSON 实现序列化/反序列化操作。所以,我们对案例的业务流程做了高度的简化,但涉及的各项技术都可以直接应用到日常开发过程中。原创 2024-02-03 12:36:43 · 1007 阅读 · 0 评论 -
家族生态:如何正确理解 Spring 家族的技术体系?
Spring 框架自 2003 年由 Rod Johnson 设计并实现以来,经历了多个重大版本的发展和演进,已经形成了一个庞大的家族式技术生态圈。目前,Spring 已经是 Java EE 领域最流行的开发框架,在全球各大企业中都得到了广泛应用。原创 2024-02-03 12:34:51 · 613 阅读 · 0 评论