title: Spring boot caching in @Service class does not work
body: <p>I have problems with save some values in @Service method.
  My code:</p>
  
  <pre><code>@Service(value = "SettingsService")
  public class SettingsService {
  ...
  
      public String getGlobalSettingsValue(Settings setting) {
          getTotalEhCacheSize();
          if(!setting.getGlobal()){
              throw new IllegalStateException(setting.name() + " is not global setting");
          }
          GlobalSettings globalSettings = globalSettingsRepository.findBySetting(setting);
          if(globalSettings != null)
              return globalSettings.getValue();
          else
              return getGlobalEnumValue(setting)
      }
  
  @Cacheable(value = "noTimeCache", key = "#setting.name()")
      public String getGlobalEnumValue(Settings setting) {
          return Settings.valueOf(setting.name()).getDefaultValue();
      }
  </code></pre>
  
  <p>My repository class:</p>
  
  <pre><code>@Repository
  public interface GlobalSettingsRepository extends CrudRepository&lt;GlobalSettings, Settings&gt; {
  
      @Cacheable(value = "noTimeCache", key = "#setting.name()", unless="#result == null")
      GlobalSettings findBySetting(Settings setting);
  </code></pre>
  
  <p>It should work like this:</p>
  
  <ul>
  <li>get value form DB if data exist,</li>
  <li>if not save value from enum.</li>
  </ul>
  
  <p>but it didn't save any data from DB or enum.</p>
  
  <p>My cache config:</p>
  
  <pre><code>@Configuration
  @EnableCaching
  public class CacheConfig {
      @Bean
      public EhCacheCacheManager cacheManager(CacheManager cm) {
          return new EhCacheCacheManager(cm);
      }
      @Bean
      public EhCacheManagerFactoryBean ehcache() {
          EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean();
          ehCacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
  
          return  ehCacheManagerFactoryBean;
      }
  }
  </code></pre>
  
  <p>I have some example to make sure that cache is working in my project in rest method:</p>
  
  <pre><code>    @RequestMapping(value = "/system/status", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
      public ResponseEntity&lt;?&gt; systemStatus() {
          Object[] list = userPuzzleRepository.getAverageResponseByDateBetween(startDate, endDate);
  ...
  }
  
  public interface UserPuzzleRepository extends CrudRepository&lt;UserPuzzle, Long&gt; {
      @Cacheable(value = "averageTimeAnswer", key = "#startDate")
      @Query("select AVG(case when up.status='SUCCESS' OR up.status='FAILURE' OR up.status='TO_CHECK' then up.solvedTime else null end) from UserPuzzle up where up.solvedDate BETWEEN ?1 AND ?2")
      Object[] getAverageResponseByDateBetween(Timestamp startDate, Timestamp endDate);
  </code></pre>
  
  <p>and it's work well.</p>
  
  <p>What am I doing wwrong?</p>