使用SpringMVC4集成ehcache來緩存服務器數據。
SpringMVC4、ehcache2.6、

SpringMVC 集成ehcache
1、pom.xml
//除了SpringMVC 、sql server相關就是ehcache-core
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.11</version>
</dependency>
2、springmvc-servlet.xml
主要就是開啟cache注解,同時導入spring cache命名空間。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache.xsd">
<!--從配置文件加載數據庫信息-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:config/jdbc.properties"/>
<property name="fileEncoding" value="UTF-8"/>
</bean>
<!--配置數據源,這裡使用Spring默認-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${sqlserver.driver}"/>
<property name="url" value="${sqlserver.url}"/>
<property name="username" value="${sqlserver.username}"/>
<property name="password" value="${sqlserver.password}"/>
</bean>
<!--掃描Mapper-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.autohome.dao"/>
</bean>
<!--配置sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:springmvc-mybatis.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!--啟用緩存注解-->
<cache:annotation-driven cache-manager="cacheManager"/>
<bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml"/>
</bean>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="cacheManagerFactory"/>
</bean>
<!--啟用最新的注解器、映射器-->
<mvc:annotation-driven/>
<!--使用默認的Servlet來響應靜態資源-->
<mvc:default-servlet-handler/>
<!--掃描Controller注解類-->
<context:component-scan base-package="com.autohome.controller" />
<!--掃描Service注解類-->
<context:component-scan base-package="com.autohome.service"/>
<!--jsp視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3、ehcache.xml
xsd我配置以後一直報紅,不知道怎麼回事,後來試著運行了下發現不影響程序運行,索性就這麼用著
<?xml version="1.0" encoding="gbk"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd">
<diskStore path="java.io.tmpdir" />
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
/>
<cache name="myCache"
eternal="false"
maxElementsInMemory="10000"
overflowToDisk="false"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
memoryStoreEvictionPolicy="LFU"/>
</ehcache>
在listAllUser方法上使用Cacheable注解,第一次運行時緩存裡還沒數據控制台會打印query from database...再次調用則直接讀取緩存數據
@Cacheable(value = "myCache")
public List<User> listAllUser() {
System.out.println("query from database...");
return userDao.listAllUser();
}
@Controller
@RequestMapping("/User")
public class UserController {
@Autowired
UserService userService;
@RequestMapping("/index")
public ModelAndView index(){
System.out.println("size:"+userService.listAllUser().size());
ModelAndView mav =new ModelAndView("index");
return mav;
}
}