ehcache를 사용하여 Spring MVC에서 선언적 캐싱을 구현했습니다. 아래는 Spring 설정 코드입니다.Spring Ehcache가 작동하지 않습니다.
<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcache" />
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml" />
<property name="shared" value="true"/>
</bean>
<bean id="UserDaoImpl" class="org.kmsg.dao.impl.UserDaoImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
다음은 ehcache xml config입니다.
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
monitoring="autodetect" dynamicConfig="true">
<diskStore path="c:\\cache" />
<cache name="findUser"
maxEntriesLocalHeap="10000"
maxEntriesLocalDisk="1000"
eternal="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="300" timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off">
<persistence strategy="localTempSwap" />
</cache>
</ehcache>
이 내가 캐싱을 구현하려는 어댑터 클래스입니다 :
public class LoginAdapter
{
static UserDaoImpl daoimpl =(UserDaoImpl)MainAdapter.context.getBean("UserDaoImpl");
@Cacheable(value="findUser", key="#userId")
public UserModel checkLogin1(String userId,String password)
{
UserModel model = daoimpl.selectUserInfo(userId);
return model;
}
}
[사용자 다오 코드 :
public class UserDaoImpl implements UserDaoInt
{
JdbcTemplate jdbc=new JdbcTemplate();
@Override
public void setDataSource(DataSource dataSource)
{
jdbc=new JdbcTemplate(dataSource);
}
@Override
public UserModel selectUserInfo(String userId)
{
String sql = "SELECT "
+ "user_id, "
+ "password, "
+ "no_of_device, "
+ "email_id, "
+ "otp, "
+ "approved, "
+ "secret_code, "
+ "os, "
+ "version, "
+ "version_name, "
+ "mobile_maker, "
+ "mobile_model "
+ "FROM user "
+ "WHERE user_id=?; ";
System.out.println("calling......");
return jdbc.queryForObject(sql,new Object[]{userId},new UserMapper());
}
}
그리고 마지막으로이 서비스입니다 :
@RequestMapping(value="/login" , method = RequestMethod.POST, headers="Accept=application/json")
public UserModel checkLogin1(@RequestParam Map<String, String> params)
{
String userid = params.get("userId");
String password = params.get("password");
return adapter.checkLogin1(userid, password);
}
가
프로젝트를 실행하고 th를 호출하면 e 서비스에서 데이터가 캐시에서가 아니라 데이터베이스에서 호출 될 때마다. 그러나 캐시 파일은 지정된 위치 (c : \ cache)에 만들어 지지만이 파일은 비어 있습니다.
문제를 찾을 수 없습니다. 로그에 오류가 없습니다. 이것은 캐싱을 처음 한 시간입니다. 이것 좀 도와주세요.
감사합니다.
시간 내 주셔서 감사합니다. 키를 업데이트했지만 여전히 작동하지 않습니다. – RishiPandey