1

@Cacheable でアノテーションを付けた dao メソッドがありますが、そのキャッシュはまったく機能しません。メソッド内にログメッセージを入れました。

<cache:annotation-driven mode="proxy" proxy-target-class="true" cache-manager="cacheManager" />
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
        <property name="configLocation" value="WEB-INF/ehcache/ehcache.xml"></property>
        <property name="shared" value="true"></property>
    </bean>

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
        <property name="cacheManager" ref="ehcache"></property>
    </bean>

@Controller
@RequestMapping(value = "/analytics")
public class AnalyticsController {

    @Autowired
    private ReportDao reportDao;

    /**
     * 
     */
    public AnalyticsController() {
    }

    @RequestMapping(value = "/lcr-report", method = RequestMethod.GET)
    public String viewCostReport(ModelMap map) {

        List<Country> countryList = reportDao.getAllCountry();

        map.put("countryList", countryList);

        return "lcrReport";
    }

}


@Repository
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.DEFAULT, 
    rollbackFor={DataAccessException.class, SQLException.class, Exception.class})
public class ReportDao {

    @Autowired
    private JdbcTemplate dao;

    /**
     * 
     */
    public ReportDao() {
    }

    @Cacheable(value = {"reportDao"}/*, key= "T(Country).hash(#List<Country>)"*/)
    @Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.DEFAULT, readOnly=true, 
            rollbackFor={DataAccessException.class, SQLException.class, Exception.class})
    public List<Country> getAllCountry() {
        List<Country> countryList =  null;
        BeanPropertyRowMapper<Country> mapper = new BeanPropertyRowMapper<Country>(Country.class);
        PreparedStatementCreator psc = new GenericPreparedStatementCreator("select c.country_code as countryCode, c.name as countryName from country c");
        System.out.println("Not from cache");
        countryList = dao.query(psc, mapper);

        return countryList;
    }

}
4

1 に答える 1