gpt4 book ai didi

java - Spring Boot @CachePut 值为 null

转载 作者:行者123 更新时间:2023-12-01 09:37:51 24 4
gpt4 key购买 nike

我有一个存储简单 POJO 的映射,关键是 POJO 的 id 字段。从Spring的@CachePut注释中,我期望这样的东西:

JobModel jm = new JobModel();
cachemap.put(jm.getId(), jm);

尽管如此,它每次都会将空值插入到缓存中。如果我在配置缓存时不允许使用 null 值,则会出现异常,提示正在插入 null。

代码:

@SpringBootApplication
@EnableScheduling
@EnableAutoConfiguration
@EnableCaching
public class Application {

public static void main(String[] args) {
applicationContext = SpringApplication.run(Application.class, args);
}

...

private GuavaCache jobCache() {
return new GuavaCache(CacheNames.CACHE_JOB, CacheBuilder.newBuilder()
.maximumSize(999999)
.build(),
false);// or true, still null values
}
@Bean(name = "cacheManager")
public CacheManager cacheManager() {
SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
simpleCacheManager.setCaches(Arrays.asList(
jobCache(),....
));
return simpleCacheManager;
}

而Dao类,实现了一个接口(interface),Annotations是在Dao的(实现接口(interface)的类,而不是接口(interface)本身)中声明的

@CachePut(value = CacheNames.CACHE_JOB,key = "jm.id")
@Transactional
@Override
public void insert(JobModel jm) {...}

我尝试了jm.idjm.getid()#a0.getId()。尽管如此,每次我都会从 com.google.common.base.Preconditions.checkNotNull() 得到异常(或者只是一个简单的空插入)。我在那里放置了一个断点,可以看到键是我期望的(guid、字符串),但值为 null。

最佳答案

根据 spring 文档 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/cache/annotation/CachePut.html

它总是导致调用该方法并将其结果存储在关联的缓存中。

您的插入方法需要返回您想要缓存的值。

可能很简单:

@CachePut(value = CacheNames.CACHE_JOB,key = "jm.id")
@Transactional
@Override
public JobModel insert(JobModel jm) {
return jm;
}

尽管这感觉不是设计交互的最佳方式。您可能需要考虑将注释移动到构造传递给插入方法的 JobModel 的任何方法,或者如果正在从数据库读取 JobModel,则将 JobModel 保存到数据库的方法也可能是一个好地方。

关于java - Spring Boot @CachePut 值为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38702002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com