Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解@Enable。。。注释并发性_Java_Spring Boot_Spring Cache_Spring Boot Starter_Jsr107 - Fatal编程技术网

Java 理解@Enable。。。注释并发性

Java 理解@Enable。。。注释并发性,java,spring-boot,spring-cache,spring-boot-starter,jsr107,Java,Spring Boot,Spring Cache,Spring Boot Starter,Jsr107,我们有一个使用spring启动缓存启动器的项目,它注册了一个ehCacheCacheManager实现,并在代码之间传播@CacheablesACC 然后,另一个团队创建了一个starter,它基本上依赖于springbootcachestarter(hashmap)配置的默认配置来处理@Cacheable方法 这两个代码都包含@EnableCaching注释,我们的问题是,如果我们对主项目的@EnableCaching注释进行注释,行为会有所不同 如果我们在项目中不注释@EnableCachi

我们有一个使用spring启动缓存启动器的项目,它注册了一个
ehCache
CacheManager
实现,并在代码之间传播
@Cacheables
ACC

然后,另一个团队创建了一个starter,它基本上依赖于
springbootcache
starter(hashmap)配置的默认配置来处理
@Cacheable
方法

这两个代码都包含
@EnableCaching
注释,我们的问题是,如果我们对主项目的@EnableCaching注释进行注释,行为会有所不同

  • 如果我们在项目中不注释
    @EnableCaching
    ,那么当我们使用自定义启动程序时,一切都正常<代码>@Cacheables来自 starter在starter范围内进行索引和解析,但 来自我们域的
    @Cacheables
    在我们的
    ehcache
    中解析
  • 如果我们在项目中注释
    @EnableCaching
    ,则会尝试解析初学者和项目的
    @Cacheables
    针对我们的
    ehCache
    实现
  • 这打破了我迄今为止的许多成见:

  • 我一直认为像
    @Enable
    这样的注释。。。应用于所有上下文,不考虑位置(启动器/应用程序配置),也不考虑在扫描所有
    @configuration
    类时是否找到它一次或两次

  • 为什么在两个注释都存在的情况下,该案例有效?我猜spring boot cache starter中的
    CacheManager
    是一个
    @ConditionalOnBean
    ,因此在这种情况下,我希望两个项目都使用
    ehcache
    bean进行解析,而不是每个项目的域


  • 注意:在我们的主项目中找到的
    @EnableCaching
    放在一个内部静态@Configuration类中。这可能很重要吗?

    如果您不透露自定义启动器的功能,则很难回答您的问题。特别是,这在我看来很奇怪:

    @starter中的Cacheables在starter作用域中被索引和解析,但域中的@Cacheables在ehcache中被解析

    你的先入之见1是有效的:不管你把注释放在哪里,或者你是否多次添加它。它只会为整个
    ApplicationContext
    启用缓存。在Spring引导的情况下,这将触发自动配置,除非在用户配置中定义了自定义
    CacheManager
    bean

    “每个人的领域”对我来说都是破碎的。你确定这是真的吗?如果要存储在多个缓存管理器中,没有很多不同的方法:

  • 您需要定义一个
    CacheResolver
    ,并在
    @Cacheable
    注释(或
    @CacheConfig
    )中引用它
  • 您需要一个特殊的
    CacheManager
    ,它知道在每个底层存储中的哪里可以找到缓存
  • 如果每个域都有一个标准的
    @Cacheable
    用法,它将违反
    CacheManager
    。如果您注意到所描述的行为,那么它与
    @EnableCaching
    完全无关