前言
使用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>
3、Service层里调用Dao层时使用缓存注解
在listAllUser方法上使用Cacheable注解,第一次运行时缓存里还没数据控制台会打印query from database...再次调用则直接读取缓存数据
@Cacheable(value = "myCache") public List<User> listAllUser() { System.out.println("query from database..."); return userDao.listAllUser(); }
4、Controller里调用
@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; } }