Spring Cache - 仅缓存一些表

时间:2015-11-02 15:38:39

标签: java spring spring-cache

我想在我的应用程序中缓存一些数据库表,因为表中的内容每天只更新一次。

我让Spring Cache像这样工作:

@Service("stuffManager")
public class StuffManagerImpl implements StuffManager {

    @Autowired
    private StuffDao stuffDao;

    @Override
    @Cacheable("stuffCache")
    public List<Stuff> getAllStuff() {
        return stuffDao.getAllStuff();
    }
}

@Repository("stuffDao")
public class StuffDaoHibernate implements StuffDao {

    @Override
    public List<Stuff> getAllStuff() {
        return getHQLResult("select* from Stuff", null);
    }
}

但如果我的getAllStuff - 方法看起来像这样,是否可以使用Spring Cache但我只想缓存Stuff - 表?

@Repository("stuffDao")
public class StuffDaoHibernate implements StuffDao {

    @Override
    public List<Stuff> getAllStuff() {
        return getHQLResult("select Stuff.* from Stuff inner join OtherStuff on Stuff.Id = OtherStuff.Id", null);
    }
}

1 个答案:

答案 0 :(得分:2)

你不能这样做。 Spring缓存&#34;方法执行&#34; - 当您调用方法时,Spring检查密钥是否存在于缓存中并返回相应的值,否则调用该方法,数据从数据库中提取,添加到缓存并返回。当您将某个表与其他表连接时,会发生在数据库中。

您无法使用Spring Cache缓存数据库中的表。仅从方法返回的值。

如果要在内存中缓存某些数据库表,某些数据库会提供此类功能,但您必须在数据库中执行此操作,而不是在服务器上执行此操作。