Spring集成
0. 官网
1. 集成Nacos
2. 集成Feign
声明式远程调用
OpenFeign如何接入
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>- 开启feign功能
@EnableFeignClients(basePackages="cn.slienceme.gulimall.pms.feign")- 声明远程接口
@FeignClient("gulimall-ware")
public interface WareFeignService {
@PostMapping("/ware/waresku/skus")
public Resp<List<SkuStockVo>> skuWareInfos(@RequestBody List<Long> skuIds);
}3. 集成GateWay
引入依赖
xml<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>配置文件
yamlspring: cloud: gateway: routes: - id: route_name uri: lb://aplication.name predicates: - Path=/api/name/** filters: - RewritePath=/api/(?<segment>.*),/$\{segment} - id: host_route_name uri: lb://aplication.name predicates: - Host=example.com
4. 集成Rabbitmq
5. 集成Redis
6. 集成SpringCache
7. 集成SpringSession
Spring Session 是一个提供会话管理的框架,它为 Spring 应用程序提供了更灵活和可扩展的会话管理功能。与传统的基于 HTTP 的 HttpSession 不同,Spring Session 提供了更强的分布式支持和更易于集成的特性。
7.1 简介
持久化会话数据:Spring Session 允许将会话数据存储在外部存储中(例如 Redis、JDBC、MongoDB 等),从而可以在分布式环境中共享会话,避免了传统方式下仅能在单一节点上管理会话的问题。
支持集群和分布式系统:在微服务架构中,Spring Session 可以通过 Redis 等工具实现会话的跨服务共享,这样即使请求被路由到不同的服务节点,依然可以共享同一个会话。
会话管理的灵活性:Spring Session 提供了对 HTTP 会话的增强,包括对会话的创建、获取、删除和更新操作的封装。还支持集成 Spring Security,提供对用户认证信息的管理。
自动配置和可扩展性:它为不同的会话存储提供了自动配置支持,可以方便地通过配置文件或注解进行集成。
7.2 集成Spring Session
添加依赖在pom.xml中添加 Spring Session 和所需的存储依赖。例如,如果使用 Redis 存储会话:xml<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>配置 Redis 存储在application.properties或application.yml中配置 Redis 连接信息:propertiesspring.redis.host=localhost spring.redis.port=6379 spring.session.store-type=redis server.servlet.session.timeout=30m启用 Spring Session在 Spring Boot 应用中,自动配置通常可以直接启用 Spring Session。如果需要对会话存储类型进行更多配置,可以通过注解或 Java 配置类进行自定义。java@SpringBootApplication @EnableRedisHttpSession public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }@EnableRedisHttpSession注解启用 Redis 会话管理。自定义会话存储(可选)如果想要自定义会话存储(例如使用其他数据源),可以通过实现HttpSessionRepository接口来定制会话的持久化方式。自定义配置文件
javaimport org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.session.web.http.CookieSerializer; import org.springframework.session.web.http.DefaultCookieSerializer; /** * 配置类:SessionConfig * 用于配置 Spring Session 的相关参数,主要包括 Redis 序列化器和 Cookie 序列化器。 */ @Configuration public class SessionConfig { /** * 配置 Spring Session 默认的 Redis 序列化器 * 使用 GenericJackson2JsonRedisSerializer 来将对象序列化为 JSON 格式。 * * @return RedisSerializer<Object> 序列化器 */ @Bean public RedisSerializer<Object> springSessionDefaultRedisSerializer() { // 返回一个使用 JSON 格式的 Redis 序列化器 return new GenericJackson2JsonRedisSerializer(); } /** * 配置 Cookie 序列化器,设置用于保存会话信息的 Cookie 名称和域名 * 主要用于 Spring Session 中,设置自定义的 Cookie 配置。 * * @return CookieSerializer 配置好的 Cookie 序列化器 */ @Bean public CookieSerializer cookieSerializer() { // 创建一个默认的 Cookie 序列化器实例 DefaultCookieSerializer serializer = new DefaultCookieSerializer(); // 设置 Cookie 名称为 GULISESSION serializer.setCookieName("GULISESSION"); // 设置 Cookie 的域名为 gulimall.com,确保跨域共享 serializer.setDomainName("gulimall.com"); // 返回配置好的 Cookie 序列化器 return serializer; } }
7.3 常见应用场景
- 微服务架构中的会话管理 在微服务环境下,不同服务可能会部署在多个不同的节点上,使用 Spring Session 可以共享用户会话,避免会话丢失。
- 分布式缓存 通过将会话存储到 Redis 等缓存系统中,不仅能提高会话的可靠性,还能利用缓存提升性能。
- 跨应用会话共享 在一些应用场景下,多个应用之间需要共享用户会话(例如一个单点登录系统),Spring Session 允许多个应用共享同一个会话。
8. 集成Redisson
8.1 Redisson 简介
Redisson 是一个基于 Redis 的 Java 客户端,提供了丰富的分布式功能,并且可以作为 Redis 数据结构的增强版。它封装了对 Redis 的操作,并提供了许多高层次的分布式功能,如分布式锁、分布式集合、分布式队列等。
Redisson 的主要特点:
支持多种分布式对象:如分布式锁、分布式列表、集合、映射等。集成支持:它与 Spring、Spring Boot 和其他框架有很好的集成支持。易于使用:提供了与 Redis 的交互封装,简化了客户端代码。高效的集群支持:支持 Redis Sentinel 和 Redis Cluster,能够在分布式环境中保持高可用性。高性能:优化了对 Redis 服务器的操作性能,支持异步操作。
8.2 Redisson 的分布式功能
分布式锁:Redisson 提供了分布式锁机制,保证多个客户端在不同节点之间的同步。可以通过RLock接口来使用。分布式集合和映射:Redisson 提供了多种分布式集合,如RMap,RList,RSet,RQueue等,支持常见的集合操作。分布式计数器和信号量:支持分布式计数器 (RAtomicLong)、信号量 (RSemaphore) 等操作。分布式队列:支持RBlockingQueue和RDeque等阻塞队列操作。分布式主题和消息:提供RTopic用于发布/订阅模式。Redis 集群和哨兵支持:原生支持 Redis Sentinel 和 Redis Cluster,能够轻松应对分布式环境。
8.3 Redisson 集成 Spring Boot
Redisson 提供了很好的与 Spring Boot 的集成。集成过程简单,可以通过配置文件来完成。
步骤:
添加依赖: 在 Spring Boot 项目的pom.xml中加入 Redisson 的依赖:xml<dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.17.4</version> </dependency>配置 Redis 连接: 在application.yml或application.properties中配置 Redis 连接:yamlredisson: address: "redis://127.0.0.1:6379" password: "your_password" database: 0使用 Redisson 客户端: 通过RedissonClient来访问 Redis 数据结构:java@Autowired private RedissonClient redissonClient; public void useRedisson() { RLock lock = redissonClient.getLock("myLock"); lock.lock(); try { // 执行操作 } finally { lock.unlock(); } }注解支持: Redisson 还支持@RedissonLock注解,可以更简便地使用分布式锁:java@RedissonLock("myLock") public void methodWithLock() { // 执行操作 }
可以使用配置类
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
@Configuration
public class MyRedissonConfig {
/**
* 创建 RedissonClient 实例,这是与 Redis 进行交互的入口
* @param url Redis 主机地址,从配置文件中读取(spring.redis.host)
* @return 返回 RedissonClient 实例,所有对 Redisson 的使用都通过该实例进行
* @throws IOException 如果在创建 RedissonClient 实例时发生 I/O 异常,抛出该异常
*/
@Bean(destroyMethod = "shutdown") // 定义一个 Bean,并指定在 Spring 容器销毁时调用 shutdown 方法
public RedissonClient redisson(@Value("${spring.redis.host}") String url) throws IOException {
// 1. 创建 Redis 配置对象
Config config = new Config();
// 设置 Redis 单节点的地址
config.useSingleServer().setAddress("redis://"+url+":6379");
// 2. 根据配置创建 RedissonClient 实例
// RedissonClient 是与 Redis 交互的主要对象
return Redisson.create(config);
}
}8.4 Redisson 与 Redis 的关系
Redisson 作为 Redis 的一个 Java 客户端,不仅仅是对 Redis 操作的封装,还扩展了很多高级特性:
Redis 的基本操作:如字符串、哈希、列表、集合等基础数据结构的操作都可以通过 Redisson 来实现。高级特性:分布式锁、计数器、信号量等高级功能是 Redis 本身没有的,Redisson 提供了这些功能的实现。事务支持:Redisson 也提供了事务支持,可以在分布式环境中进行更复杂的操作。
8.5 常见使用场景
分布式锁:适用于需要跨多个服务和应用实例进行同步的场景。分布式队列:适用于任务队列、消息队列等场景。分布式缓存:利用 Redis 的高性能缓存能力,可以作为分布式缓存使用。分布式计数器:用于计数、累加等操作,如页面访问计数、订单编号生成等。
