Feign:简化微服务通信的利器

介绍

1.1 什么是 Feign?

Feign 是一个声明式、模板化的 HTTP 客户端,它简化了编写 Web 服务客户端的过程。它的主要目的是使 HTTP API 客户端的开发变得更加简单和直观。Feign 的设计理念是将 HTTP 客户端的细节隐藏在背后,使开发者可以专注于定义与服务端通信的接口而无需关注底层的实现细节。

1.2 Feign 的历史

Feign 最初是由 Netflix 开发的,在其开源的微服务框架中扮演了重要角色。Netflix 在构建其微服务架构时,意识到开发人员经常需要与其他服务进行通信,因此需要一种简单且易于使用的方式来完成这一任务。这就促成了 Feign 的诞生。随着微服务架构的兴起,Feign 逐渐受到了更多开发者的关注和应用,并成为了构建分布式系统的重要工具之一。

1.3 Feign 的优势

Feign 的优势体现在以下几个方面:

  • 声明式 API 定义:Feign 允许开发者使用简单的接口和注解来定义客户端与服务端的通信协议,而无需编写复杂的 HTTP 请求代码。

  • 与 Spring Cloud 集成:Feign 可与 Spring Cloud 集成,使得在基于 Spring Cloud 的微服务架构中更加容易实现服务间的通信。

  • 负载均衡和服务发现:Feign 集成了负载均衡和服务发现功能,使得开发者可以轻松地实现对服务实例的动态调用和负载均衡。

  • 支持多种编码器和解码器:Feign 支持多种编码器和解码器,包括 JSON、XML 等,使得开发者可以根据实际需求选择合适的数据格式。

  • 可定制性和扩展性:Feign 提供了丰富的扩展点和定制选项,开发者可以根据需要定制 Feign 的行为,满足各种复杂场景下的需求。

Feign 的这些优势使得它成为了开发者首选的 HTTP 客户端工具之一,尤其在构建基于微服务架构的应用程序时更是如此。

为什么选择 Feign?

2.1 简化 HTTP 客户端调用

使用传统的方式编写 HTTP 客户端代码通常涉及创建连接、构造请求、处理响应等繁琐的步骤,而 Feign 的声明式 API 定义能够极大地简化这个过程。通过定义接口和使用注解,开发者可以轻松地描述服务端的 HTTP API,而无需关心底层的 HTTP 请求细节。这种声明式的风格使得代码更加清晰、易于理解和维护。

2.2 集成了负载均衡和服务发现

在微服务架构中,服务实例的动态变化和负载均衡是常见的需求。Feign 与服务发现组件(如 Netflix Eureka)集成,能够自动地发现服务实例并实现负载均衡。开发者无需手动管理服务实例列表,Feign 会自动处理这些细节,使得调用服务变得更加简单和可靠。

2.3 支持多种编码器和解码器

Feign 提供了对多种数据格式的支持,包括 JSON、XML 等。开发者可以根据实际需求选择合适的编码器和解码器,使得客户端和服务端能够以最合适的数据格式进行通信。这种灵活性使得 Feign 能够适用于各种不同的场景,满足不同项目的需求。

2.4 可定制性和扩展性

Feign 提供了丰富的扩展点和定制选项,开发者可以根据需要对其行为进行定制和扩展。例如,可以通过自定义拦截器来实现请求和响应的日志记录、实现超时和重试机制、实现自定义的错误处理逻辑等。这种可定制性和扩展性使得 Feign 能够满足各种复杂场景下的需求,同时也为其在开发中的应用提供了更大的灵活性和可塑性。

如何使用 Feign

3.1 引入 Feign 依赖

首先,需要在项目的依赖管理文件中引入 Feign 的相关依赖。如果是基于 Maven 进行项目管理,可以在 pom.xml 文件中添加如下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

这个依赖将会引入 Spring Cloud 对 Feign 的集成支持,以及 Feign 本身所需要的核心库。

3.2 创建 Feign 接口

接下来,需要创建一个接口来定义 Feign 客户端的调用方式。这个接口应该使用 Feign 提供的注解来描述服务端的 HTTP API。例如:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "example-service")
public interface ExampleFeignClient {

    @GetMapping("/example")
    String getExampleData();
}

在这个示例中,@FeignClient 注解用于指定要调用的服务的名称,@GetMapping 注解用于指定要调用的具体 HTTP API。开发者可以根据实际情况自定义接口和注解。

3.3 注解说明

Feign 提供了一系列注解来描述服务端的 HTTP API,常用的注解包括:

  • @FeignClient:指定要调用的服务的名称,并可指定其他属性,如 URL、fallback 等。
  • @RequestMapping@GetMapping@PostMapping 等:用于指定要调用的具体 HTTP 方法和路径。
  • @RequestParam@PathVariable@RequestBody 等:用于指定请求参数的来源和格式。

这些注解使得开发者可以通过简单的方式描述服务端的 HTTP API,而无需编写复杂的 HTTP 请求代码。

3.4 自定义 Feign 配置

Feign 提供了丰富的配置选项,开发者可以通过配置文件或代码的方式来自定义 Feign 的行为。例如,可以配置连接超时时间、读取超时时间、重试次数等。自定义 Feign 配置通常有以下几种方式:

  • 使用 application.propertiesapplication.yml 文件配置默认的 Feign 属性。
  • 创建一个配置类,并使用 @Configuration 注解和 @Bean 注解来配置 Feign 的属性。
  • 使用 @FeignClient 注解的 configuration 属性来指定一个配置类。

通过自定义 Feign 配置,开发者可以根据实际需求来调整 Feign 的行为,使得其能够更好地适应项目的特定场景和需求。

简单应用

4.1 基本使用示例

下面是一个简单的基本使用示例,演示了如何使用 Feign 客户端调用远程服务的 HTTP API。

首先,定义一个 Feign 接口:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "example-service")
public interface ExampleFeignClient {

    @GetMapping("/example")
    String getExampleData();
}

然后,在你的业务代码中注入并使用这个 Feign 客户端:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ExampleService {

    @Autowired
    private ExampleFeignClient exampleFeignClient;

    public String fetchDataFromRemoteService() {
        return exampleFeignClient.getExampleData();
    }
}

4.2 与 Spring Cloud 集成示例

在 Spring Cloud 中使用 Feign 可以更轻松地实现微服务间的通信。下面是一个示例,演示了如何在 Spring Cloud 中使用 Feign 客户端。

首先,确保你的 Spring Boot 应用程序已经添加了 Spring Cloud 的依赖,并且服务注册中心(如 Eureka)已经启用。

然后,定义一个 Feign 接口:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "example-service")
public interface ExampleFeignClient {

    @GetMapping("/example")
    String getExampleData();
}

最后,在你的业务代码中注入并使用这个 Feign 客户端,与之前的示例相似。

4.3 与 Spring Boot 集成示例

除了与 Spring Cloud 集成外,Feign 也可以与普通的 Spring Boot 应用程序集成。下面是一个示例,演示了如何在 Spring Boot 中使用 Feign 客户端。

首先,添加 Spring Cloud OpenFeign 的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

然后,定义一个 Feign 接口:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "example-service")
public interface ExampleFeignClient {

    @GetMapping("/example")
    String getExampleData();
}

最后,在你的 Spring Boot 应用程序中注入并使用这个 Feign 客户端,与之前的示例相似。

这些示例展示了 Feign 在不同场景下的使用方式,无论是基本的 HTTP 客户端调用还是与 Spring Cloud 或 Spring Boot 的集成,Feign 都能够简化服务间的通信,提高开发效率。

常见问题和解决方案

5.1 如何处理 Feign 的超时

Feign 提供了超时设置的配置选项,可以通过配置文件或代码来设置 Feign 的连接超时时间和读取超时时间。以下是一种常见的处理超时的方法:

配置文件方式:

application.propertiesapplication.yml 文件中添加如下配置:

# 设置连接超时时间(单位:毫秒)
feign.client.config.default.connectTimeout=5000
# 设置读取超时时间(单位:毫秒)
feign.client.config.default.readTimeout=5000
代码方式:

创建一个配置类,使用 @Configuration 注解和 @Bean 注解来配置 Feign 的属性:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import feign.Request;

@Configuration
public class FeignConfiguration {

    @Bean
    public Request.Options options() {
        return new Request.Options(5000, 5000);
    }
}

通过配置连接超时时间和读取超时时间,可以有效地处理 Feign 的超时问题。

5.2 如何处理 Feign 的重试

Feign 默认不支持重试机制,但可以通过集成 Spring Retry 或者使用自定义的重试机制来实现重试功能。以下是一种常见的处理重试的方法:

集成 Spring Retry:

首先,确保你的项目中已经添加了 Spring Retry 的依赖:

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>

然后,创建一个重试配置类:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.retry.annotation.EnableRetry;

@EnableRetry
@Configuration
public class RetryConfiguration {

}

最后,在 Feign 接口的方法上使用 @Retryable 注解来标记需要重试的方法,可以指定重试的次数和延迟时间。

5.3 如何处理 Feign 的请求和响应日志

Feign 提供了日志打印的功能,可以通过配置来开启请求和响应的日志记录。以下是一种常见的处理请求和响应日志的方法:

配置文件方式:

application.propertiesapplication.yml 文件中添加如下配置:

# 开启 Feign 的请求和响应日志记录
logging.level.feign=DEBUG
代码方式:

创建一个配置类,使用 @Configuration 注解来配置 Feign 的日志级别:

import org.springframework.context.annotation.Configuration;

import feign.Logger;

@Configuration
public class FeignLoggingConfiguration {

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL; // 设置日志级别为 FULL
    }
}

通过配置日志级别为 FULL,可以记录 Feign 的详细请求和响应日志,方便排查和分析问题。

进阶主题

6.1 使用拦截器定制 Feign 客户端行为

Feign 提供了拦截器(Interceptor)的机制,可以在请求发出前和响应返回后对请求和响应进行处理。通过自定义拦截器,可以实现对 Feign 客户端行为的定制。以下是一种常见的使用拦截器定制 Feign 客户端行为的方法:

首先,创建一个拦截器类,实现 feign.RequestInterceptor 接口:

import feign.RequestInterceptor;
import feign.RequestTemplate;

public class CustomFeignInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {
        // 在请求发出前对请求进行处理
        // 可以添加请求头、修改请求参数等
        // 示例:添加一个自定义的请求头
        template.header("Custom-Header", "value");
    }
}

然后,在 Feign 接口上使用 @FeignClient 注解的 configuration 属性来指定使用的拦截器类:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfiguration {

    @Bean
    public CustomFeignInterceptor customFeignInterceptor() {
        return new CustomFeignInterceptor();
    }
}

通过自定义拦截器,可以实现对 Feign 客户端行为的灵活定制,满足各种特定的需求。

6.2 使用 Feign 的 Hystrix 容错机制

在微服务架构中,服务之间的调用可能会存在不稳定因素,如网络延迟、服务故障等。为了提高系统的稳定性和容错能力,Feign 提供了与 Hystrix 的集成支持,可以在调用远程服务时使用 Hystrix 进行容错处理。以下是一种常见的使用 Feign 的 Hystrix 容错机制的方法:

首先,确保你的项目中已经添加了 Hystrix 的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

然后,在 Feign 接口上使用 @FeignClient 注解的 fallback 属性来指定一个容错处理类:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "example-service", fallback = ExampleFeignClientFallback.class)
public interface ExampleFeignClient {

    @GetMapping("/example")
    String getExampleData();
}

最后,创建一个容错处理类,实现 Feign 接口的备用逻辑:

import org.springframework.stereotype.Component;

@Component
public class ExampleFeignClientFallback implements ExampleFeignClient {

    @Override
    public String getExampleData() {
        return "Fallback Data"; // 返回备用数据
    }
}

通过使用 Feign 的 Hystrix 容错机制,可以实现对远程服务调用的容错处理,提高系统的稳定性和可靠性。

6.3 使用 Feign 的断路器

Feign 的断路器功能是通过集成 Hystrix 实现的,它可以在远程服务调用失败时快速失败,避免资源的长时间占用,从而保护系统的稳定性。以下是一种常见的使用 Feign 的断路器的方法:

首先,确保你的项目中已经添加了 Hystrix 的依赖,如前面介绍的那样。

然后,在 Feign 接口上使用 @FeignClient 注解的 fallbackFactory 属性来指定一个断路器工厂类:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "example-service", fallbackFactory = ExampleFeignClientFallbackFactory.class)
public interface ExampleFeignClient {

    @GetMapping("/example")
    String getExampleData();
}

最后,创建一个断路器工厂类,用于创建断路器实例:

import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;

@Component
public class ExampleFeignClientFallbackFactory implements FallbackFactory<ExampleFeignClient> {

    @Override
    public ExampleFeignClient create(Throwable throwable) {
        return new ExampleFeignClient() {
            @Override
            public String getExampleData() {
                return "Fallback Data"; // 返回备用数据
            }
        };
    }
}

通过使用 Feign 的断路器,可以在远程服务调用失败时快速失败,并返回备用数据,保护系统的稳定性和可靠性。

与其它 HTTP 客户端对比

7.1 Feign vs. RestTemplate

Feign:

  • 声明式 API 定义: Feign 允许使用简单的接口和注解来定义客户端与服务端的通信协议,而无需编写复杂的 HTTP 请求代码。

  • 集成了负载均衡和服务发现: Feign 集成了负载均衡和服务发现功能,使得调用服务变得更加简单和可靠。

  • 与 Spring Cloud 集成: Feign 能够轻松地与 Spring Cloud 集成,使得在基于 Spring Cloud 的微服务架构中更加容易实现服务间的通信。

RestTemplate:

  • 传统的 HTTP 客户端: RestTemplate 是 Spring 提供的传统的 HTTP 客户端工具,需要手动构造 HTTP 请求和处理响应。

  • 缺乏声明式 API: RestTemplate 缺乏声明式的 API 定义,开发者需要手动构造 HTTP 请求和处理响应,代码相对冗长且不直观。

  • 功能较为单一: RestTemplate 主要用于发送 HTTP 请求和处理响应,功能相对较为单一,不支持负载均衡和服务发现等功能。

在选择使用 Feign 还是 RestTemplate 时,如果你希望简化 HTTP 客户端调用、与 Spring Cloud 集成、支持负载均衡和服务发现等功能,那么可以选择使用 Feign。如果你更喜欢传统的方式编写 HTTP 客户端代码,或者项目中不需要使用负载均衡和服务发现等功能,那么可以选择使用 RestTemplate。

7.2 Feign vs. WebClient

Feign:

  • 声明式 API 定义: Feign 允许使用简单的接口和注解来定义客户端与服务端的通信协议,代码更加简洁清晰。

  • 集成了负载均衡和服务发现: Feign 集成了负载均衡和服务发现功能,使得调用服务变得更加简单和可靠。

  • 依赖于 Spring Cloud: Feign 依赖于 Spring Cloud,需要与 Spring Cloud 集成使用。

WebClient:

  • 非阻塞、响应式: WebClient 是 Spring WebFlux 提供的非阻塞、响应式的 HTTP 客户端,适用于构建响应式应用程序。

  • 更灵活: WebClient 提供了更灵活的 API,可以支持更多复杂的场景,如流式数据处理等。

  • 更适用于响应式应用: WebClient 更适用于构建响应式应用程序,可以处理大量的并发请求。

在选择使用 Feign 还是 WebClient 时,如果你正在构建响应式应用程序,或者需要处理大量的并发请求,那么可以选择使用 WebClient。如果你更喜欢声明式的 API 定义、与 Spring Cloud 集成、以及使用简单的 HTTP 客户端,那么可以选择使用 Feign。

7.3 Feign vs. HttpClient

Feign:

  • 声明式 API 定义: Feign 允许使用简单的接口和注解来定义客户端与服务端的通信协议,代码更加简洁清晰。

  • 集成了负载均衡和服务发现: Feign 集成了负载均衡和服务发现功能,使得调用服务变得更加简单和可靠。

  • 依赖于 Spring Cloud: Feign 依赖于 Spring Cloud,需要与 Spring Cloud 集成使用。

HttpClient:

  • 原生 HTTP 客户端: HttpClient 是 Java 标准库中的原生 HTTP 客户端,可以灵活地处理各种 HTTP 请求和响应。

  • 更灵活、更强大: HttpClient 提供了更灵活、更强大的 API,可以处理各种复杂的 HTTP 场景,如连接池管理、代理设置、身份认证等。

  • 独立于任何框架: HttpClient 是独立于任何框架的原生 HTTP 客户端,可以在任何 Java 应用程序中使用。

在选择使用 Feign 还是 HttpClient 时,如果你更喜欢声明式的 API 定义、与 Spring Cloud 集成、以及使用简单的 HTTP 客户端,那么可以选择使用 Feign。如果你需要更灵活、更强大的 HTTP 客户端,并且不依赖于任何框架,那么可以选择使用 HttpClient。

结语

在今天的信息时代,构建稳健、高效的网络应用程序至关重要。选择合适的工具和技术对于项目的成功至关重要。本文对于 Feign 这一现代化的 HTTP 客户端工具进行了全面的介绍和分析,并与其他常见的 HTTP 客户端进行了比较。无论是简化的声明式 API 定义、与 Spring Cloud 集成的便捷性,还是灵活的定制性和强大的扩展性,Feign 在构建分布式系统和微服务架构中都扮演着重要的角色。

希望本文能够帮助读者更好地理解 Feign,并为选择合适的 HTTP 客户端工具提供一些参考。在日益复杂的网络环境中,选择适合项目需求的工具和技术,是项目成功的关键之一。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

右键新建没有TXT文本文档的解决办法

电脑右键新建&#xff0c;发现没有txt了&#xff0c;我查网上办法都有点复杂&#xff0c;诸如注册表的&#xff0c;但是其实很简单&#xff0c;重启windows资源管理器就可以了。 点击重新启动&#xff0c;之后新建就有txt文档了。

Windows server 由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开。

问题现象&#xff1a; 解决办法 临时远程方式1: 打开 mstsc 时带上 /admin 等参数&#xff0c;如下图所示&#xff1a; 使用“mstsc /admin /v:目标ip”来强制登录服务器&#xff0c;但只能是管理员身份。 远程方式2&#xff1a; 通过VM远程登陆系统后&#xff0c;运行输入R…

安卓速度下载v1.0.5/聚合短视频解析下载

功能特色 短视频下载与高级管理 – 支持短视频下载&#xff0c;为您提供一系列高级视频管理功能包括视频内容提取、智能防重复技术、视频体积压缩以及视频转换成GIF图片等&#xff1b; 磁-力链接下载升级 – 现支持磁力链接下载&#xff0c;实现边下载边播放的便捷体验&#x…

LLaMA2模型训练加速秘籍:700亿参数效率提升195%!

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID &#xff5c; 计算机视觉研究院 学习群 &#xff5c; 扫码在主页获取加入方式 开源地址&#xff1a;https://github.com/hpcaitech/ColossalAI 计算机视觉研究院专栏 Column of Computer Vision Ins…

【深度学习】服务器炼丹代码配置、Python使用指定gpu显卡运行代码

【显卡】服务器炼丹代码配置 写在最前面一、查看哪几块显卡能用二、使用指定gpu运行代码1、指定使用GPU0运行脚本&#xff08;默认是第一张显卡, 0代表第一张显卡的id,其他的以此类推&#xff09;2、指定使用多张显卡运行脚本 三、如何使用1、单块显卡使用2、多GPU训练使用Data…

亚太杯赛题思路发布(中文版)

导读&#xff1a; 本文将继续修炼回归模型算法&#xff0c;并总结了一些常用的除线性回归模型之外的模型&#xff0c;其中包括一些单模型及集成学习器。 保序回归、多项式回归、多输出回归、多输出K近邻回归、决策树回归、多输出决策树回归、AdaBoost回归、梯度提升决策树回归…

javaSE知识点整理总结(上)

目录 一、面向对象 1. 类、对象、方法 2.面向对象三大特征 &#xff08;1&#xff09;封装 &#xff08;2&#xff09;继承 &#xff08;3&#xff09;多态 二、常用类 1.Object类 2.Array类 3.基本数据类型包装类 4.String类 5.StringBuffer类 6.Math类 7.Random…

ONLYOFFICE 8.1 桌面编辑器测评:引领数字化办公新潮流

目录 前言 下载安装 新功能概述 1.PDF 编辑器的改进 2. 演示文稿中的幻灯片版式 3.语言支持的改进 4. 隐藏“连接到云”板块 5. 页面颜色设置和配色方案 界面设计&#xff1a;简洁大方&#xff0c;操作便捷 性能评测&#xff1a;稳定流畅&#xff0c;高效运行 办公环…

恭喜!Apache SeaTunnel2024开源之夏学生中选名单出炉!

经过严格的筛选&#xff0c;开源之夏组委会及导师已经选出并录取项目对应的学生&#xff0c;社区联合中科院开展的开源之夏活动也进入到了激动人心的中选公示阶段。 在这里&#xff0c;我们恭喜下面的同学&#xff0c;已成功匹配到Apache SeaTunnel社区的项目&#xff0c;即将开…

主从复制、哨兵以及Cluster集群

目录 1.Redis高可用 2.Redis主从复制 2.1 主从复制的作用 2.2 主从复制流程 2.3 搭建Redis主从复制 2.3.1 修改Redis配置文件&#xff08;Master节点操作&#xff09; 2.3.2 修改Redis配置文件&#xff08;Slave节点操作&#xff09; 2.3.2 验证主从复制结果 3.Redis哨…

数据分析三剑客-Matplotlib

数据分析三剑客 数据分析三剑客通常指的是在Python数据分析领域中&#xff0c;三个非常重要的工具和库&#xff1a;Pandas、NumPy和Matplotlib。Pandas主要负责数据处理和分析&#xff0c;NumPy专注于数值计算和数学运算&#xff0c;而Matplotlib则负责数据可视化。这三个库相…

聊聊啥项目适合做自动化测试

作为测试从业者&#xff0c;你是否遇到过这样的场景&#xff0c;某天公司大Boss找你谈话。 老板&#xff1a;小李&#xff0c;最近工作辛苦了 小李&#xff1a;常感谢您的认可&#xff0c;这不仅是对我个人的鼓励&#xff0c;更是对我们整个团队努力的认可。我们的成果离不开每…

【python】一篇文零基础到入门:快来玩吧~

本笔记材料源于&#xff1a; PyCharm | 创建你的第一个项目_哔哩哔哩_bilibili Python 语法及入门 &#xff08;超全超详细&#xff09; 专为Python零基础 一篇博客让你完全掌握Python语法-CSDN博客 0为什么安装python和pycharm&#xff1f; 不同于c&#xff0c;c&#xff0…

NFT Insider #136:韩国将为NFT市场带来严格监管,The Sandbox DAO举办Twitter Space AMA

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members &#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜…

已解决javax.transaction.InvalidTransactionException:事务无效的正确解决方法,亲测有效!!!

已解决javax.transaction.InvalidTransactionException&#xff1a;事务无效的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 1. 确保事务的正确启动和结束 Spring中的事务管理 2. 避免嵌套事务问题…

【代码工厂】简单地图生成

要求 &#xff08;图片来自codingame&#xff09; 代码 # 定义一个函数&#xff0c;用于生成模式 def generate_pattern(n, a, border_char): # 初始化一个空列表&#xff0c;用于存储生成地图pattern []# 最上面那一行的处理line n * border_charpattern.append(line)# 遍…

餐饮点餐系统

餐饮点餐系统是一款为餐厅和顾客提供便捷点餐服务的在线平台。 1.DDL CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用户名,password VARCHAR(255) NOT NULL COMMENT 密码,email VARCHAR(100) UNIQUE…

5款提高工作效率的免费工具推荐

SimpleTex SimpleTex是一款用于创建和编辑LaTeX公式的简单工具。它能够识别图片中的复杂公式并将其转换为可编辑的数据格式。该软件提供了一个直观的界面&#xff0c;用户可以在编辑LaTeX代码的同时实时预览公式的效果&#xff0c;无需额外的编译步骤。此外&#xff0c;SimpleT…

MoneyPrinterPlus:AI自动短视频生成工具-腾讯云配置详解

MoneyPrinterPlus可以使用大模型自动生成短视频&#xff0c;其中的语音合成和语音识别部分需要借助于一些第三发云厂商的语音服务。 很多小伙伴可能不知道应该如何配置&#xff0c;这里给大家提供一个详细的腾讯云语音服务的配置教程。 项目已开源&#xff0c;代码地址&#…

基于多模态知识图谱的多模态推理-MR-MKG

MR-MKG论文中提出了一种新的多模态推理方法&#xff0c;即利用多模态知识图&#xff08;Multimodal Knowledge Graph, MMKG&#xff09;进行多模态推理的方法。这种方法旨在通过从MMKG中学习&#xff0c;扩展大型语言模型&#xff08;LLMs&#xff09;的多模态知识。 1 三个模…
最新文章