🍊
翻译橙
🍊返回主站🤖参与贡献
  • hello,这里是翻译橙
  • spring boot参考文档
    • 1. 法律
    • 2. 寻求帮助
    • 3. 文档概述
    • 4. 入门
    • 5. 升级Spring Boot
    • 6. 使用 Spring Boot 进行开发
      • 6.1. 构建系统
      • 6.2. 构建你的代码
      • 6.3. 配置类
      • 6.4. 自动配置
      • 6.5. Spring Bean 和依赖注入
      • 6.6. 使用@SpringBootApplication注解
      • 6.7. 运行您的应用程序
      • 6.8. 开发者工具
      • 6.9. 打包您的生产应用程序
      • 6.10. 接下来读什么
    • 7.核心特性
      • 7.1. SpringApplication
      • 7.2. 外部化配置
      • 7.3.Profile配置
      • 7.4.日志记录
      • 7.5.国际化
      • 7.6 面向切面的编程
      • 7.7. JSON
      • 7.8. 任务执行与调度
      • 7.9. 单元测试
        • 7.9.1. 测试范围依赖
        • 7.9.2. 测试 Spring 应用程序
        • 7.9.3. 测试 Spring Boot 应用程序
        • 7.9.4. 测试容器
        • 7.9.5. 测试工具
      • 7.10. Docker Compose 支持
      • 7.11. 测试容器支持
      • 7.12. 创建您自己的自动配置
      • 7.13. Kotlin 支持
      • 7.14 SSL
      • 7.15.接下来要读什么
    • 8. 网络
      • 8.1. Servlet Web 应用程序
        • 8.1.1. “Spring Web MVC 框架”
        • 8.1.2. JAX-RS 和Jersey
        • 8.1.3. 嵌入式 Servlet 容器支持
      • 8.2 反应式网络应用程序
        • 8.2.1. “Spring WebFlux 框架”
        • 8.2.2. 嵌入式反应式服务器支持
        • 8.2.3. 反应式服务器资源配置
      • 8.3. 优雅关机
      • 8.4. spring安全
        • 8.4.1. MVC安全
        • 8.4.2. WebFlux 安全
        • 8.4.3. OAuth2
        • 8.4.4. SAML 2.0
      • 8.5. spring 会话
      • 8.6.GraphQL
      • 8.7. Spring HATEOAS
      • 8.8.接下来读什么
    • 9. 数据
      • 9.1. SQL数据库
      • 9.2. 使用 NoSQL 技术
      • 9.3. 接下来读什么
    • 10. 消息
      • 10.1. JMS
      • 10.2. AMQP
      • 10.3. Apache Kafka 支持
      • 10.4. Apache Pulsar 支持
      • 10.5. RSocket
      • 10.6. Spring Integration
      • 10.7. WebSockets
      • 10.8. What to Read Next
    • 11. IO
      • 11.1. 缓存
      • 11.2. Hazelcast
      • 11.3. Quartz 调度程序
      • 11.4. 发送电子邮件
      • 11.5. 验证
      • 11.6. 调用 REST 服务
      • 11.7. web services
      • 11.8. 使用 JTA 进行分布式事务
      • 11.9. 接下来读什么
    • 12. 容器镜像
  • Spring核心功能
    • 1.IOC容器和Bean简介
      • 1.2. 容器概述
      • 1.3. Bean概述
      • 1.4. 依赖项
        • 1.4.1. 依赖注入
        • 1.4.2. 详细的依赖关系和配置
        • 1.4.3. 使用depends-on
        • 1.4.4. 延迟初始化的 Bean
        • 1.4.5. 自动装配协作者
        • 1.4.6. 方法注入
    • 2. Resources
      • 2.1. 介绍
      • 2.2. Resource接口
      • 2.3. 内置Resource实现
      • 2.4. ResourceLoader接口
      • 2.5. ResourcePatternResolver接口
      • 2.6. ResourceLoaderAware接口
      • 2.7. 资源作为依赖
      • 2.8. 应用程序上下文和资源路径
    • 3. 验证、数据绑定和类型转换
      • 3.1. 使用 Spring 的 Validator 接口进行验证
      • 3.2. 将代码解析为错误消息
      • 3.3. Bean 操作和BeanWrapper
      • 3.4. spring类型转换
      • 3.5. spring字段格式
      • 3.6. 配置全局日期和时间格式
      • 3.7. Java Bean 验证
    • 4. SpEL表达式
    • 5. Spring 面向切面编程
      • 5.1. AOP 概念
      • 5.2. Spring AOP 的能力和目标
      • 5.3. AOP 代理
      • 5.4. @AspectJ 支持
        • 5.4.1. 启用@AspectJ 支持
        • 5.4.2. 声明一个切面
        • 5.4.3. 声明切入点
        • 5.4.4. 声明切点
        • 5.4.5. 切面说明
        • 5.4.6. 切面实例化模型
        • 5.4.7. AOP 示例
      • 5.5. 基于模式的 AOP 支持
      • 5.6. 选择要使用的 AOP 声明样式
      • 5.7. 混合切面类型
      • 5.8. 代理机制
      • 5.9. @AspectJ 代理的程序化创建
      • 5.10. 在 Spring 应用程序中使用 AspectJ
      • 5.11.更多资源
    • 6. Spring AOP API
      • 6.1. Spring中的切入点API
      • 6.2. Spring 中的 Advice API
      • 6.3. Spring 中的 Advisor API
      • 6.4. 使用ProxyFactoryBean创建 AOP 代理
      • 6.5. 简洁的代理定义
      • 6.6. 以编程方式创建 AOP 代理ProxyFactory
      • 6.7. 操作切面对象
      • 6.8. 使用“自动代理”工具
      • 6.9. 使用TargetSource实现
      • 6.10. 定义新的切面类型
    • 7. 空指针安全
    • 8. 数据缓冲器和编解码器
    • 9. 日志
    • 10. 附录
      • 10.1. XML 模式
      • 10.2. 自定义XML Schema
        • 10.2.1. 创作 Schema
        • 10.2.2. 编码一个NamespaceHandler
        • 10.2.3. 使用BeanDefinitionParser
        • 10.2.4. 注册处理程序和模式
        • 10.2.5. 在 Spring XML 配置中使用自定义扩展
        • 10.2.6. 更详细的例子
      • 10.3. 应用程序启动步骤
  • 使用redis实现分布式锁
  • Java 安全标准算法名称
  • JDK 9 JEP
  • JDK 10 JEP
  • 人件
    • 《人件》
    • 第一部分 管理人力资源
      • 01 此时此刻,一个项目正在走向失败
      • 02 干酪汉堡,做一个,卖一个
      • 03 维也纳在等你
      • 04 质量——如果时间允许
      • 05 再谈帕金森定律
      • 06 苦杏素
    • 第二部分 办公环境
      • 07 家具警察
      • 08 “朝九晚五在这里啥也完成不了。”
      • 09 在空间上省钱
      • 间奏曲:生产效率度量和不明飞行物
      • 10 大脑时问与身体时间
      • 11 电话
      • 12 门的回归
      • 13 采取保护步骤
    • 第三部分 正确的人
      • 14 霍恩布洛尔因素
      • 15 谈谈领导力
      • 16 雇一名杂耍演员
      • 17 与他人良好合作
      • 18 童年的终结
      • 19 在这儿很开心
      • 20 人力资本
    • 第四部分 高效团队养成
      • 21 整体大于部分之和
      • 22 黑衣团队
      • 23 团队自毁
      • 24 再谈团队自毁
      • 25 竞争
      • 26 一顿意面晚餐
      • 27 敞开和服
      • 28 团队形成的化学反应
    • 第五部分 沃土
      • 29 自我愈复系统
      • 30 与风险共舞
      • 3l 会议、独白和交流
      • 32 终极管理罪恶得主是……
      • 33 “邪恶”电邮
      • 34 让改变成为可能
      • 35 组织型学习
      • 36 构建社区
    • 第六部分 快乐地工作
      • 37 混乱与秩序
      • 38 自由电子
      • 39 霍尔加·丹斯克
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. spring boot参考文档
  2. 11. IO

11.1. 缓存

上一页11. IO下一页11.2. Hazelcast

最后更新于1年前

这有帮助吗?

Spring 框架支持透明地向应用程序添加缓存。其核心是,抽象将缓存应用于方法,从而减少基于缓存中可用信息的执行次数。缓存逻辑是透明应用的,不会对调用者造成任何干扰。只要使用@EnableCaching注释启用缓存支持,Spring Boot 就会自动配置缓存基础设施。

检查Spring 框架参考的

简而言之,要向服务的操作添加缓存,请向其方法添加相关注释,如以下示例所示:

@Component
public class MyMathService {
​
    @Cacheable("piDecimals")
    public int computePiDecimal(int precision) {
        ...
    }
​
}

此示例演示了如何在可能成本高昂的操作中使用缓存。在调用之前computePiDecimal,抽象会在piDecimals缓存中查找与参数i匹配的条目。如果找到条目,则立即将缓存中的内容返回给调用者,并且不调用该方法。否则,将调用该方法,并在返回值之前更新缓存。

您还可以透明地使用标准 JSR-107 (JCache) 注释(例如@CacheResult)。但是,我们强烈建议您不要混合搭配 Spring Cache 和 JCache 注解。

如果您不添加任何特定的缓存库,Spring Boot 会自动配置一个使用内存中并发映射的当需要缓存时(例如piDecimals前面的示例),该提供程序会为您创建它。并不真正建议将简单的提供程序用于生产用途,但它非常适合入门并确保您了解其功能。当您决定要使用的缓存提供程序时,请务必阅读其文档以了解如何配置应用程序使用的缓存。几乎所有提供程序都要求您显式配置应用程序中使用的每个缓存。有些提供了一种自定义属性spring.cache.cache-names定义的默认缓存的方法。

还可以透明地从缓存中 或

11.1.1. 支持的缓存提供程序

缓存抽象不提供实际的存储,而是依赖于org.springframework.cache.Cache和org.springframework.cache.CacheManager接口具体化的抽象。

如果您尚未定义类型CacheManager或CacheResolver命名的 cacheResolver bean(请参阅 参考资料),Spring Boot 会尝试检测以下提供程序(按指定的顺序):

使用spring-boot-starter-cache“Starter”快速添加基本的缓存依赖项。启动器引入了spring-context-support。如果手动添加依赖项,则必须添加依赖项spring-context-support才能使用 JCache 或 Caffeine 支持。

如果Spring Boot 自动配置CacheManager,您可以在完全初始化之前通过公开实现CacheManagerCustomizer接口的 bean 来进一步调整其配置。以下示例设置一个标志来表示null值不应向下传递到底层映射:

@Configuration(proxyBeanMethods = false)
public class MyCacheManagerConfiguration {
​
    @Bean
    public CacheManagerCustomizer<ConcurrentMapCacheManager> cacheManagerCustomizer() {
        return (cacheManager) -> cacheManager.setAllowNullValues(false);
    }
​
}

在前面的示例中,需要 自动配置 ConcurrentMapCacheManager。如果情况并非如此(您提供了自己的配置或自动配置了不同的缓存提供程序),则根本不会调用定制器。您可以拥有任意数量的定制器,也可以使用@Order或Ordered来进行排序。

通用的

如果上下文定义了至少一个org.springframework.cache.Cachebean,则使用通用缓存。CacheManager创建一个包装该类型的所有 bean。

JCache (JSR-107)

可能会出现多个提供者,在这种情况下必须显式指定该提供者。即使 JSR-107 标准没有强制采用标准化方法来定义配置文件的位置,Spring Boot 也会尽力通过实现细节来设置缓存,如以下示例所示:

# Only necessary if more than one provider is present
spring.cache.jcache.provider=com.example.MyCachingProvider
spring.cache.jcache.config=classpath:example.xml

当缓存库同时提供本机实现和 JSR-107 支持时,Spring Boot 更喜欢 JSR-107 支持,以便在切换到不同的 JSR-107 实现时可以使用相同的功能。

底层定制javax.cache.cacheManager有两种方式:

  • 可以通过设置spring.cache.cache-names属性在启动时创建缓存。如果javax.cache.configuration.Configuration定义了自定义 bean,则它用于自定义它们。

  • org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizerbeans 通过CacheManager 的引用来调用以实现完全定制。

如果定义了 标准javax.cache.CacheManagerbean,它会自动包装在org.springframework.cache.CacheManager抽象期望的实现中。没有对其应用进一步的定制。

Hazelcast

Infinispan

spring.cache.infinispan.config=infinispan.xml

可以通过设置spring.cache.cache-names属性在启动时创建缓存。如果定义了自定义ConfigurationBuilder bean,则它用于自定义缓存。

为了与 Spring Boot 的 Jakarta EE 9 基线兼容,必须使用 Infinispan 的-jakarta模块。对于每个具有-jakarta变体的模块,必须使用该变体来代替标准模块。例如,infinispan-core-jakarta和infinispan-commons-jakarta必须分别用来代替infinispan-core和 infinispan-commons。

Couchbase

spring.cache.cache-names=cache1,cache2
spring.cache.couchbase.expiration=10m

如果您需要对配置进行更多控制,请考虑注册CouchbaseCacheManagerBuilderCustomizerbean。以下示例显示了为cache1和cache2配置特定条目到期时间的定制程序:

@Configuration(proxyBeanMethods = false)
public class MyCouchbaseCacheManagerConfiguration {
​
    @Bean
    public CouchbaseCacheManagerBuilderCustomizer myCouchbaseCacheManagerBuilderCustomizer() {
        return (builder) -> builder
                .withCacheConfiguration("cache1", CouchbaseCacheConfiguration
                        .defaultCacheConfig().entryExpiry(Duration.ofSeconds(10)))
                .withCacheConfiguration("cache2", CouchbaseCacheConfiguration
                        .defaultCacheConfig().entryExpiry(Duration.ofMinutes(1)));
​
    }
​
}

Redis

spring.cache.cache-names=cache1,cache2
spring.cache.redis.time-to-live=10m

默认情况下,会添加一个键前缀,这样,如果两个单独的缓存使用相同的键,Redis 不会有重叠的键,也不会返回无效值。如果您创建自己的RedisCacheManager.

您可以通过添加自己的RedisCacheConfiguration @Bean 配置来完全控制默认配置。如果您需要自定义默认序列化策略,这可能很有用。

如果您需要对配置进行更多控制,请考虑注册RedisCacheManagerBuilderCustomizerbean。以下示例显示了配置特定生存时间cache1和 cache2的定制程序:

@Configuration(proxyBeanMethods = false)
public class MyRedisCacheManagerConfiguration {
​
    @Bean
    public RedisCacheManagerBuilderCustomizer myRedisCacheManagerBuilderCustomizer() {
        return (builder) -> builder
                .withCacheConfiguration("cache1", RedisCacheConfiguration
                        .defaultCacheConfig().entryTtl(Duration.ofSeconds(10)))
                .withCacheConfiguration("cache2", RedisCacheConfiguration
                        .defaultCacheConfig().entryTtl(Duration.ofMinutes(1)));
​
    }
​
}

Caffeine

  1. 缓存规范定义为spring.cache.caffeine.spec

  2. 定义了一个com.github.benmanes.caffeine.cache.CaffeineSpecbean

  3. 定义了一个com.github.benmanes.caffeine.cache.Caffeinebean

例如,以下配置创建cache1和cache2缓存的最大大小为 500,生存时间为 10 分钟

spring.cache.cache-names=cache1,cache2
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s

如果定义了一个com.github.benmanes.caffeine.cache.CacheLoader bean,它会自动关联到CaffeineCacheManager. 由于CacheLoader将会与缓存管理器管理的所有缓存相关联,因此它必须定义为CacheLoader<Object, Object>。自动配置会忽略任何其他通用类型。

Cache2k

可以通过设置spring.cache.cache-names属性在启动时创建缓存。可以使用Cache2kBuilderCustomizerbean 自定义缓存默认值。以下示例显示了一个自定义程序,它将缓存容量配置为 200 个条目,过期时间为 5 分钟:

@Configuration(proxyBeanMethods = false)
public class MyCache2kDefaultsConfiguration {
​
    @Bean
    public Cache2kBuilderCustomizer myCache2kDefaultsCustomizer() {
        return (builder) -> builder.entryCapacity(200)
                .expireAfterWrite(5, TimeUnit.MINUTES);
    }
​
}

Simple

如果找不到其他提供程序,则配置使用 ConcurrentHashMap作为缓存存储的简单实现。如果您的应用程序中不存在缓存库,则这是默认设置。默认情况下,会根据需要创建缓存,但您可以通过设置属性cache-names来限制可用缓存的列表。例如,如果您只需要cache1和cache2缓存,请cache-names按如下方式设置该属性:

spring.cache.cache-names=cache1,cache2

如果您这样做并且您的应用程序使用未列出的缓存,那么它会在需要缓存时在运行时失败,但在启动时不会失败。如果您使用未声明的缓存,这类似于“真实”缓存提供程序的行为方式。

None

当您的配置中存在@EnableCaching 时,也需要合适的缓存配置。如果您有自定义CacheManager,请考虑将其定义在单独的@Configuration类中,以便您可以在必要时覆盖它。None 使用在测试中有用的无操作实现,切片测试默认通过@AutoConfigureCache.

如果您需要在特定环境下使用无操作缓存而不是自动配置的缓存管理器,请将缓存类型设置为none,如下例所示:

spring.cache.type=none

(EhCache 3, Hazelcast, Infinispan, and others)

此外,提供了。

如果Spring Boot 自动配置CacheManager,则可以通过设置spring.cache.type属性来强制使用特定的缓存提供程序。如果您需要在某些环境(例如测试)中

通过类路径上存在的 javax.cache.spi.CachingProvider进行引导(即,类路径上存在符合 JSR-107 的缓存库),并且由spring-boot-starter-cache “Starter”提供JCacheCacheManager。提供各种兼容的库,而且Spring Boot 为 Ehcache 3、Hazelcast 和 Infinispan 提供依赖管理。也可以添加任何其他兼容的库。

Spring Boot。如果单个HazelcastInstance可用,则它也会自动重用CacheManager,除非指定了spring.cache.jcache.config属性。

Spring Boot。如果 HazelcastInstance已自动配置并且com.hazelcast:hazelcast-spring位于类路径上,则它会自动包装在CacheManager.

Hazelcast 可以用作 JCache 兼容缓存或 SpringCacheManager兼容缓存。当设置spring.cache.type为 hazelcast时,Spring Boot 将使用基于CacheManager的实现。如果您想使用 Hazelcast 作为 JCache 兼容缓存,请设置spring.cache.type为jcache。如果您有多个符合 JCache 标准的缓存提供程序并希望强制使用 Hazelcast,则必须。

没有默认的配置文件位置,因此必须显式指定。否则,将使用默认引导程序。

如果 Spring Data Couchbase 可用并且 Couchbase 已,则 CouchbaseCacheManager会自动配置。可以通过设置spring.cache.cache-names属性在启动时创建额外的缓存,并且可以使用spring.cache.couchbase.*属性配置缓存默认值。例如,以下配置创建cache1并cache2缓存条目过期时间为 10 分钟:

如果可用并已配置,则会RedisCacheManager自动配置。可以通过设置spring.cache.cache-names属性在启动时创建额外的缓存,并且可以使用spring.cache.redis.*属性配置缓存默认值。例如,以下配置创建cache1并cache2缓存生存时间为 10 分钟的内容:

是 Guava 缓存的 Java 8 重写,取代了对 Guava 的支持。如果存在Caffeine,则会自动配置CaffeineCacheManager(由“Starter”提供)。spring-boot-starter-cache可以通过设置spring.cache.cache-names属性在启动时创建缓存,并且可以通过以下选项之一进行自定义(按指定的顺序):

是内存缓存。如果存在 Cache2k spring 集成,则会自动配置 SpringCache2kCacheManager。

相关部分以获取更多详细信息。
简单提供程序。
更新
逐出数据。
CachingConfigurer
Generic
JCache (JSR-107)
Hazelcast
Infinispan
Couchbase
Redis
Caffeine
Cache2k
Simple
Spring Boot for Apache Geode
使用 Apache Geode 作为缓存提供程序的自动配置
使用无操作缓存,请使用此属性。
JCache
对 Hazelcast 具有普遍支持
对 Hazelcast 具有普遍支持
显式设置 JCache 提供程序
Infinispan
配置
Redis
Caffeine
Cache2k