繁体   English   中英

春季:春季缓存不起作用

[英]Spring : Spring-cache not working

我正在开发Spring-MVC应用程序。 在探查器经过后端之后,我注意到getCurrentlyAuthenticatedUser()是一个热点。 由于这个原因,我想到了使用缓存。 不幸的是,它不起作用。 一旦用户登录,即使该用户已登录,我也将获得空用户。出了什么问题。 当然,当我从XML删除@Cacheable批注和配置时,一切正常。 你能帮忙的话,我会很高兴。

PersonServiceImpl:

@Service
@Transactional
public class PersonServiceImpl implements PersonService {

  private final PersonDAO personDAO;

   @Autowired
    public PersonServiceImpl(PersonDAO personDAO) {
        this.personDAO = personDAO;
    }
 @Override
    @Cacheable(value = "person", condition = "#person == null")
    public Person getCurrentlyAuthenticatedUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication == null) {
            return null;
        } else {
            return personDAO.findPersonByUsername(authentication.getName());
        }
    }
}

使用缓存的配置:

  <cache:annotation-driven />

    <beans:bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
        <beans:property name="caches">
            <beans:set>
                <beans:bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
                        p:name="person"/>
           </beans:set>
        </beans:property>
    </beans:bean>

当我调用此方法时,无论是否登录,我都将返回null。 你能帮忙的话,我会很高兴。 谢谢。

在下面的代码行中:

@Cacheable(value = "person", condition = "#person == null")

unless condition unless请尝试使用

实际上,您已经提出了一个条件,即“仅当人员为null时才可以使用缓存”,这就像“除非人员为null时才可以使用缓存”。 快乐的编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM