2016-08-01 2 views
0

간단한 POJO를 저장하는 맵이 있습니다. 키는 POJO의 id 필드입니다.스프링 부트 @CachePut 값이 null입니다.

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

아직도, 그것은 캐시마다에 null 값을 삽입합니다 : 봄의 @CachePut 주석에서 , 나는 이런 식으로 뭔가를 기대했다. 캐시를 구성 할 때 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; 
    } 

그리고 다오 클래스는, 주석이 아니라에서 인터페이스를 구현하는 다오의 (클래스에 선언되어있다 내가 시도

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

) 자체 인터페이스 jm.id, jm.getid() , #a0.getId(). 그래도 내가 얻을 때마다 com.google.common.base.Preconditions.checkNotNull() (또는 간단한 null 삽입) 예외가 발생합니다. 난 거기에 중단 점을 배치하고 그 키가 내가 기대했던 것 (guid, string)이지만 값이 null이라는 것을 알 수 있습니다.

귀하의 삽입 방법을 사용하여 캐시 원하는 값을 반환해야 it always causes the method to be invoked and its result to be stored in the associated cache.

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/cache/annotation/CachePut.html에서 봄 워드 프로세서 당

답변

1

. 이 상호 작용을 설계하는 가장 좋은 방법은 아닌 것 같아하지만

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

:

는 같은 간단한 수 있습니다. 어노테이션을 삽입 메소드에 전달 된 JobModel을 생성하는 메소드로 이동 시키거나, JobModel이 데이터베이스에서 읽혀지면 JobModel을 데이터베이스에 저장하는 메소드가 좋은 위치 일 수있다.

+0

RestController는 dao 객체를 호출하고 CachePut을 거기 옮겨야한다고 생각하지 않습니다 (또한 아무것도 반환하지 않습니다) – appl3r

관련 문제