Spring : Spring-缓存不工作
Spring : Spring-cache not working
我正在开发 Spring-MVC 应用程序。在探查器通过后端后,我注意到 getCurrentlyAuthenticatedUser() 是一个热点。由于我想到使用缓存的原因。不幸的是它不工作。用户登录后,我得到空用户,即使用户已登录。出了什么问题。当然,当我从 XML 中删除 @Cacheable 注释和配置时,一切正常。任何帮助都会很好。
个人服务实现:
@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
实际上你提出了一个条件"Caching will only work if the person is null",应该是"Caching will work unless person is null"。
编码愉快。
我正在开发 Spring-MVC 应用程序。在探查器通过后端后,我注意到 getCurrentlyAuthenticatedUser() 是一个热点。由于我想到使用缓存的原因。不幸的是它不工作。用户登录后,我得到空用户,即使用户已登录。出了什么问题。当然,当我从 XML 中删除 @Cacheable 注释和配置时,一切正常。任何帮助都会很好。
个人服务实现:
@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
实际上你提出了一个条件"Caching will only work if the person is null",应该是"Caching will work unless person is null"。 编码愉快。