- 浏览: 618084 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
AlanKay:
Mart_dai 写道Hi 齐晓威_518,我想问问,在exc ...
java 后台 Excel 文件生成后转化为字节流 -
18335864773:
国内的pageoffice插件也可以生成excel。也可以用流 ...
java 后台 Excel 文件生成后转化为字节流 -
JAVA_CLASSm:
你好,请问这个还有源码吗?我刚开始接触这个,想要源码学习一下. ...
同一账号不能多地登录(限制同一账号同一时刻只能一个用户登录使用,向QQ一样) -
pangjinquan:
...
前台JS获取后台的Json数据, 动态创建table并填充数据--转自一位朋友 -
lvjun106:
这是增加删除列,,,,
JQuery自动为表格增加一列
1.Spring缓存机制的理解
在Spring缓存机制中,包括了两个方面的缓存操作:1.缓存某个方法返回的结果;2.在某个方法执行前或后清空缓存。
下面写两个类来模拟Spring的缓存机制:
package com.sin90lzc.java.test;
/**
* 一个简单的Dao接口,我们要对这个接口的方法提供缓存的功能
* @author Tim
*
*/
public interface Dao {
Object select();
void save(Object obj);
}
package com.sin90lzc.java.test;
import java.util.HashMap;
import java.util.Map;
/**
* 实现缓存功能,在Spring中,该类可以看作是Advice
* @author Tim
*
*/
public class Cache {
private static final Map<String, Object> cache = new HashMap<String, Object>();
/**
* 把对象添加到缓存中去
* @param key
* @param value
*/
public void checkIn(String key, Object value) {
if (!cache.containsKey(key)) {
cache.put(key, value);
}
}
/**
* 从缓存中找对象
* @param key
* @return
*/
public Object checkOut(String key) {
if (cache.containsKey(key)) {
return cache.get(key);
}
return null;
}
/**
* 在方法执行前清除缓存
*/
public void clearCacheBeforeMethod(){
cache.clear();
}
/**
* 在方法执行后清除缓存
*/
public void clearCacheAfterMethod(){
cache.clear();
}
}
package com.sin90lzc.java.test;
/**
* Dao的代理对象,它不仅仅完成主要的查询,存储操作,还实现了缓存
* @author Tim
*
*/
public class DaoProxy implements Dao {
private Cache cache;//该对象实现了缓存的功能
private Dao daoImpl;//完成主要查询,存储操作的Dao实现类,注意,这是一个Dao的实现类
public Object select() {
//在执行方法前,尝试从缓存中取出结果并返回,如果没找到,则执行实际的操作。
Object obj = cache.checkOut("DaoProxy.select");
boolean hasCache = false;
if (obj != null) {
hasCache = true;
return obj;
}
//实际的查询操作
obj = daoImpl.select();
//如果在缓存中找不到该方法的结果,缓存该结果
if (!hasCache) {
cache.checkIn("DaoProxy.select", obj);
}
return obj;
}
@Override
public void save(Object obj) {
//在执行方法前清除缓存
cache.clearCacheBeforeMethod();
//实际的操作
daoImpl.save(obj);
//在执行方法后清除缓存
cache.clearCacheAfterMethod();
}
public void setCache(Cache cache) {
this.cache = cache;
}
public void setDao(Dao dao) {
this.daoImpl = dao;
}
}
从代码中可以看到,真正完成缓存功能的类是Cache,真正完成Dao(数据的增删查改)功能的类是Dao的实现类,这就是实现了实际业务(Dao)与功能(缓存)的分离。实际的Dao操作与缓存功能是如何结合起来的呢?这就是通过代理对象。我们可以注意到ProxyDao的真正身份也是一个Dao,是它把Dao操作与缓存结合起来的。这三个类恰恰说明了AOP的本质。
2.EHCache
Spring仅仅是提供了对缓存的支持,但它并没有任何的缓存功能的实现,spring使用的是第三方的缓存框架来实现缓存的功能。其中,spring对EHCache提供了很好的支持。下面我们以EHCache为例来介绍spring的缓存配置。
在介绍Spring的缓存配置之前,我们先看一下EHCache是如何配置。
<?xml version="1.0" encoding="UTF-8" ?>
<ehcache>
<!-- 定义默认的缓存区,如果在未指定缓存区时,默认使用该缓存区 -->
<defaultCache maxElementsInMemory="500" eternal="true"
overflowToDisk="false" memoryStoreEvictionPolicy="LFU">
</defaultCache>
<!-- 定义名字为"dao.select"的缓存区 -->
<cache name="dao.select" maxElementsInMemory="500" eternal="true"
overflowToDisk="false" memoryStoreEvictionPolicy="LFU" />
</ehcache>
3.Spring缓存机制中的Advice
由于Spring的缓存机制是基于Spring的AOP,那么在Spring Cache中应该存在着一个Advice。没错,在Spring Cache中的Advice是存在的,它就是org.springframework.cache.Cache。我们看一下它的接口定义:
/*
* Copyright 2002-2011 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.cache;
/**
* Interface that defines the common cache operations.
*
* <b>Note:</b> Due to the generic use of caching, it is recommended that
* implementations allow storage of <tt>null</tt> values (for example to
* cache methods that return {@code null}).
*
* @author Costin Leau
* @since 3.1
*/
public interface Cache {
/**
* Return the cache name.
*/
String getName();
/**
* Return the the underlying native cache provider.
*/
Object getNativeCache();
/**
* Return the value to which this cache maps the specified key. Returns
* <code>null</code> if the cache contains no mapping for this key.
* @param key key whose associated value is to be returned.
* @return the value to which this cache maps the specified key,
* or <code>null</code> if the cache contains no mapping for this key
*/
ValueWrapper get(Object key);
/**
* Associate the specified value with the specified key in this cache.
* <p>If the cache previously contained a mapping for this key, the old
* value is replaced by the specified value.
* @param key the key with which the specified value is to be associated
* @param value the value to be associated with the specified key
*/
void put(Object key, Object value);
/**
* Evict the mapping for this key from this cache if it is present.
* @param key the key whose mapping is to be removed from the cache
*/
void evict(Object key);
/**
* Remove all mappings from the cache.
*/
void clear();
/**
* A (wrapper) object representing a cache value.
*/
interface ValueWrapper {
/**
* Return the actual value in the cache.
*/
Object get();
}
}
evict,put方法就是Advice的功能方法,或者可以这样去理解。
但spring并不是直接使用org.springframework.cache.Cache,spring把Cache对象交给org.springframework.cache.CacheManager来管理,下面是org.springframework.cache.CacheManager接口的定义:
/*
* Copyright 2002-2011 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.cache;
import java.util.Collection;
/**
* A manager for a set of {@link Cache}s.
*
* @author Costin Leau
* @since 3.1
*/
public interface CacheManager {
/**
* Return the cache associated with the given name.
* @param name cache identifier (must not be {@code null})
* @return associated cache, or {@code null} if none is found
*/
Cache getCache(String name);
/**
* Return a collection of the caches known by this cache manager.
* @return names of caches known by the cache manager.
*/
Collection<String> getCacheNames();
}
在spring对EHCache的支持中,org.springframework.cache.ehcache.EhCacheManager就是org.springframework.cache.CacheManager的一个实现
<!--
该Bean是一个org.springframework.cache.CacheManager对象
属性cacheManager是一个net.sf.ehcache.CacheManager对象
-->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager">
<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache-config.xml"></property>
</bean>
</property>
</bean>
4.基于xml配置方式配置缓存
在上一节中,我们得到了cacheManagr,那么我们就可以对某些方法配置缓存了。下面是基于xml方式的缓存配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
">
<context:component-scan base-package="com.sin90lzc"></context:component-scan>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager">
<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache-config.xml"></property>
</bean>
</property>
</bean>
<cache:advice id="cacheAdvice" cache-manager="cacheManager">
<cache:caching>
<cache:cacheable cache="dao.select" method="select"
key="#id" />
<cache:cache-evict cache="dao.select" method="save"
key="#obj" />
</cache:caching>
</cache:advice>
<aop:config>
<aop:advisor advice-ref="cacheAdvice" pointcut="execution(* com.sin90lzc.train.spring_cache.simulation.DaoImpl.*(..))"/>
</aop:config>
</beans>
5.注解驱动的缓存配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
<context:component-scan base-package="com.sin90lzc"></context:component-scan>
<!--
该Bean是一个org.springframework.cache.CacheManager对象
属性cacheManager是一个net.sf.ehcache.CacheManager对象
-->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager">
<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache-config.xml"></property>
</bean>
</property>
</bean>
<cache:annotation-driven />
</beans>
package com.sin90lzc.train.spring_cache.simulation;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
@Component
public class DaoImpl implements Dao {
/**
* value定义了缓存区(缓存区的名字),每个缓存区可以看作是一个Map对象
* key作为该方法结果缓存的唯一标识,
*/
@Cacheable(value = { "dao.select" },key="#id")
@Override
public Object select(int id) {
System.out.println("do in function select()");
return new Object();
}
@CacheEvict(value = { "dao.select" }, key="#obj")
@Override
public void save(Object obj) {
System.out.println("do in function save(obj)");
}
}
在Spring缓存机制中,包括了两个方面的缓存操作:1.缓存某个方法返回的结果;2.在某个方法执行前或后清空缓存。
下面写两个类来模拟Spring的缓存机制:
package com.sin90lzc.java.test;
/**
* 一个简单的Dao接口,我们要对这个接口的方法提供缓存的功能
* @author Tim
*
*/
public interface Dao {
Object select();
void save(Object obj);
}
package com.sin90lzc.java.test;
import java.util.HashMap;
import java.util.Map;
/**
* 实现缓存功能,在Spring中,该类可以看作是Advice
* @author Tim
*
*/
public class Cache {
private static final Map<String, Object> cache = new HashMap<String, Object>();
/**
* 把对象添加到缓存中去
* @param key
* @param value
*/
public void checkIn(String key, Object value) {
if (!cache.containsKey(key)) {
cache.put(key, value);
}
}
/**
* 从缓存中找对象
* @param key
* @return
*/
public Object checkOut(String key) {
if (cache.containsKey(key)) {
return cache.get(key);
}
return null;
}
/**
* 在方法执行前清除缓存
*/
public void clearCacheBeforeMethod(){
cache.clear();
}
/**
* 在方法执行后清除缓存
*/
public void clearCacheAfterMethod(){
cache.clear();
}
}
package com.sin90lzc.java.test;
/**
* Dao的代理对象,它不仅仅完成主要的查询,存储操作,还实现了缓存
* @author Tim
*
*/
public class DaoProxy implements Dao {
private Cache cache;//该对象实现了缓存的功能
private Dao daoImpl;//完成主要查询,存储操作的Dao实现类,注意,这是一个Dao的实现类
public Object select() {
//在执行方法前,尝试从缓存中取出结果并返回,如果没找到,则执行实际的操作。
Object obj = cache.checkOut("DaoProxy.select");
boolean hasCache = false;
if (obj != null) {
hasCache = true;
return obj;
}
//实际的查询操作
obj = daoImpl.select();
//如果在缓存中找不到该方法的结果,缓存该结果
if (!hasCache) {
cache.checkIn("DaoProxy.select", obj);
}
return obj;
}
@Override
public void save(Object obj) {
//在执行方法前清除缓存
cache.clearCacheBeforeMethod();
//实际的操作
daoImpl.save(obj);
//在执行方法后清除缓存
cache.clearCacheAfterMethod();
}
public void setCache(Cache cache) {
this.cache = cache;
}
public void setDao(Dao dao) {
this.daoImpl = dao;
}
}
从代码中可以看到,真正完成缓存功能的类是Cache,真正完成Dao(数据的增删查改)功能的类是Dao的实现类,这就是实现了实际业务(Dao)与功能(缓存)的分离。实际的Dao操作与缓存功能是如何结合起来的呢?这就是通过代理对象。我们可以注意到ProxyDao的真正身份也是一个Dao,是它把Dao操作与缓存结合起来的。这三个类恰恰说明了AOP的本质。
2.EHCache
Spring仅仅是提供了对缓存的支持,但它并没有任何的缓存功能的实现,spring使用的是第三方的缓存框架来实现缓存的功能。其中,spring对EHCache提供了很好的支持。下面我们以EHCache为例来介绍spring的缓存配置。
在介绍Spring的缓存配置之前,我们先看一下EHCache是如何配置。
<?xml version="1.0" encoding="UTF-8" ?>
<ehcache>
<!-- 定义默认的缓存区,如果在未指定缓存区时,默认使用该缓存区 -->
<defaultCache maxElementsInMemory="500" eternal="true"
overflowToDisk="false" memoryStoreEvictionPolicy="LFU">
</defaultCache>
<!-- 定义名字为"dao.select"的缓存区 -->
<cache name="dao.select" maxElementsInMemory="500" eternal="true"
overflowToDisk="false" memoryStoreEvictionPolicy="LFU" />
</ehcache>
3.Spring缓存机制中的Advice
由于Spring的缓存机制是基于Spring的AOP,那么在Spring Cache中应该存在着一个Advice。没错,在Spring Cache中的Advice是存在的,它就是org.springframework.cache.Cache。我们看一下它的接口定义:
/*
* Copyright 2002-2011 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.cache;
/**
* Interface that defines the common cache operations.
*
* <b>Note:</b> Due to the generic use of caching, it is recommended that
* implementations allow storage of <tt>null</tt> values (for example to
* cache methods that return {@code null}).
*
* @author Costin Leau
* @since 3.1
*/
public interface Cache {
/**
* Return the cache name.
*/
String getName();
/**
* Return the the underlying native cache provider.
*/
Object getNativeCache();
/**
* Return the value to which this cache maps the specified key. Returns
* <code>null</code> if the cache contains no mapping for this key.
* @param key key whose associated value is to be returned.
* @return the value to which this cache maps the specified key,
* or <code>null</code> if the cache contains no mapping for this key
*/
ValueWrapper get(Object key);
/**
* Associate the specified value with the specified key in this cache.
* <p>If the cache previously contained a mapping for this key, the old
* value is replaced by the specified value.
* @param key the key with which the specified value is to be associated
* @param value the value to be associated with the specified key
*/
void put(Object key, Object value);
/**
* Evict the mapping for this key from this cache if it is present.
* @param key the key whose mapping is to be removed from the cache
*/
void evict(Object key);
/**
* Remove all mappings from the cache.
*/
void clear();
/**
* A (wrapper) object representing a cache value.
*/
interface ValueWrapper {
/**
* Return the actual value in the cache.
*/
Object get();
}
}
evict,put方法就是Advice的功能方法,或者可以这样去理解。
但spring并不是直接使用org.springframework.cache.Cache,spring把Cache对象交给org.springframework.cache.CacheManager来管理,下面是org.springframework.cache.CacheManager接口的定义:
/*
* Copyright 2002-2011 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.cache;
import java.util.Collection;
/**
* A manager for a set of {@link Cache}s.
*
* @author Costin Leau
* @since 3.1
*/
public interface CacheManager {
/**
* Return the cache associated with the given name.
* @param name cache identifier (must not be {@code null})
* @return associated cache, or {@code null} if none is found
*/
Cache getCache(String name);
/**
* Return a collection of the caches known by this cache manager.
* @return names of caches known by the cache manager.
*/
Collection<String> getCacheNames();
}
在spring对EHCache的支持中,org.springframework.cache.ehcache.EhCacheManager就是org.springframework.cache.CacheManager的一个实现
<!--
该Bean是一个org.springframework.cache.CacheManager对象
属性cacheManager是一个net.sf.ehcache.CacheManager对象
-->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager">
<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache-config.xml"></property>
</bean>
</property>
</bean>
4.基于xml配置方式配置缓存
在上一节中,我们得到了cacheManagr,那么我们就可以对某些方法配置缓存了。下面是基于xml方式的缓存配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
">
<context:component-scan base-package="com.sin90lzc"></context:component-scan>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager">
<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache-config.xml"></property>
</bean>
</property>
</bean>
<cache:advice id="cacheAdvice" cache-manager="cacheManager">
<cache:caching>
<cache:cacheable cache="dao.select" method="select"
key="#id" />
<cache:cache-evict cache="dao.select" method="save"
key="#obj" />
</cache:caching>
</cache:advice>
<aop:config>
<aop:advisor advice-ref="cacheAdvice" pointcut="execution(* com.sin90lzc.train.spring_cache.simulation.DaoImpl.*(..))"/>
</aop:config>
</beans>
5.注解驱动的缓存配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
<context:component-scan base-package="com.sin90lzc"></context:component-scan>
<!--
该Bean是一个org.springframework.cache.CacheManager对象
属性cacheManager是一个net.sf.ehcache.CacheManager对象
-->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager">
<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache-config.xml"></property>
</bean>
</property>
</bean>
<cache:annotation-driven />
</beans>
package com.sin90lzc.train.spring_cache.simulation;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
@Component
public class DaoImpl implements Dao {
/**
* value定义了缓存区(缓存区的名字),每个缓存区可以看作是一个Map对象
* key作为该方法结果缓存的唯一标识,
*/
@Cacheable(value = { "dao.select" },key="#id")
@Override
public Object select(int id) {
System.out.println("do in function select()");
return new Object();
}
@CacheEvict(value = { "dao.select" }, key="#obj")
@Override
public void save(Object obj) {
System.out.println("do in function save(obj)");
}
}
发表评论
-
Spring4.03+Hibernate4.3.5整合
2014-12-22 16:07 1312通过maven工具进行构建: 第一步: 第二步 ... -
springMVC详解以及注解说明
2014-09-17 22:46 764基于注释(Annotation)的配置有越来越流行的趋势,S ... -
java 的 文件、文件夹 的建立、删除、复制以及移动等功能 操作
2014-08-23 09:00 753package util; import java. ... -
浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
2014-02-20 21:29 675hibernate工作原理原理:1.读取并解析配置文件2. ... -
Spring + ehCache实现缓存-转贴
2014-01-07 22:08 637转贴Spring AOP+ehCache简单缓存系统解决方案 ... -
spring 整合 ehcache 实现dao缓存
2014-01-07 22:00 1046Ehcache在很多项目中都出现过,用法也比较简单。一般的加些 ... -
一个牛人对sping的比喻
2014-01-06 21:57 460大名鼎鼎的Spring框架 有人曾说2005年一片叫春之声 ... -
Spring声明式事务配置管理方法
2013-12-14 13:40 551环境配置 项目使用SSH架构,现在要添加Spring事务 ... -
Spring Quartz动态配置时间-重要的
2012-10-29 22:48 1725什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什 ... -
quartz 在spring 中配置服务 定时执行和循环执行事件
2012-10-29 22:24 1076uartz 可以在spring中配置 定时执行和循环执行事件、 ... -
Spring中Quartz的配置
2012-10-28 22:27 1019jar包: quartz.1.6.0.jar ... -
Spring Quartz定时器 的动态调度
2012-10-28 22:00 1731众所周知spring 的Quartz定时器的功能非常强大,可以 ... -
Spring Quartz动态配置时间
2012-10-28 21:45 12183) 记录时间规则 我将时间规则存入数据库中,目 ... -
Quartz 在 Spring 中如何动态配置时间
2012-10-28 21:41 1235SchedulerService 只有一个多态方法schedu ...
相关推荐
Spring Data Redis模块提供了对Redis的全面支持,包括缓存操作。 参考链接提供的CSDN博客文章《[Spring简单缓存实现](http://blog.csdn.net/maoyeqiu/article/details/50238035)》中,作者详细介绍了如何在Spring...
在实现Spring缓存时,你需要确保引入了相应的库,如`spring-boot-starter-cache`或`spring-context-support`,它们包含了Spring缓存支持所需的类和接口。同时,如果你打算使用特定的缓存实现,如EhCache或Redis,还...
在Spring Boot中,主要支持三种缓存管理机制: EhCache、Hazelcast 和 Redis。EhCache 是一个轻量级、分布式的内存缓存解决方案,适合于小型项目;Hazelcast 是一个开源的内存数据网格,可以提供分布式缓存服务;...
Spring缓存抽象是自Spring 3.1版本引入的,它提供了一个统一的API,支持多种缓存解决方案,如EhCache、Guava Cache、Hazelcast或Infinispan等。这种抽象允许开发者在不依赖特定缓存实现的情况下,轻松地在应用中添加...
Spring Cache提供了基于注解的缓存支持,允许开发者在方法级别声明缓存行为。通过在方法上使用`@Cacheable`、`@CacheEvict`和`@Caching`等注解,可以轻松地控制缓存的存取和清除。 1. **@Cacheable**:这个注解用于...
Spring提供了多种缓存抽象,包括基于注解的缓存管理和第三方缓存支持(如 EhCache、Guava Cache 或 Redis)。以下是对这个主题的详细阐述: 一、Spring缓存抽象 1. **@Cacheable**:这是最常用的注解,用于标记...
通过学习这个示例,我们可以更直观地理解Spring缓存的工作原理和实际运用。 总的来说,Spring缓存机制极大地提高了应用的响应速度和效率,减少了数据库交互次数。通过合理利用缓存,开发者可以优化系统性能,同时...
Spring对缓存的支持** Spring框架自3.1版本开始引入了统一的缓存抽象,支持多种缓存实现,其中包括EhCache。Spring的缓存抽象层使得切换缓存提供商变得简单,而无需改动大量代码。 **3. 配置Spring与EhCache** ...
3. **Spring配置**:在Spring的配置文件(如`applicationContext.xml`)中,启用缓存支持并指定缓存管理器。使用`<cache:annotation-driven/>`元素开启基于注解的缓存控制,并通过`<bean>`标签配置EhCache的`...
Spring的缓存抽象提供了注解驱动的缓存管理,支持缓存的自动初始化、失效策略、缓存穿透处理等功能。EHCache作为流行的选择,它具有内存和磁盘存储、缓存分区、缓存预热等特性。 1.3 环境 本示例将基于Java运行环境...
**Spring缓存配置详解** 在Java Web开发中,Spring框架以其强大的功能和灵活性深受开发者喜爱。其中,Spring的缓存管理是提升应用性能的关键部分,它允许我们将经常访问但变化不频繁的数据存储在内存中,以减少对...
### 一、Spring缓存概述 Spring框架提供了一种统一的缓存抽象,支持多种缓存实现,如EhCache、Hazelcast、Infinispan、Guava等。通过`@EnableCaching`注解开启缓存功能,并使用`@Cacheable`、`@CacheEvict`、`@...
Spring框架提供了一种优雅的方式来整合缓存管理,其中包括对Redis的支持。Redis是一个开源的、高性能的键值数据库,常用于数据缓存、消息队列等多种场景。本文将详细介绍如何使用Spring集成Redis来实现数据缓存。 #...
\n\n当涉及到将缓存数据落地到Redis时,Spring Cache同样支持Redis作为其后端存储。为此,我们需要在配置中添加Redis的相关依赖,并配置Redis缓存管理器。\n\n```xml\n<dependency>\n <groupId>org.springframework....
这通常涉及到 `@EnableCaching` 注解来开启缓存支持,以及 `@CacheConfig` 注解来全局配置缓存。 3. **缓存键生成**:默认情况下,Spring 使用所有方法参数的哈希值作为缓存键。但是,我们可以自定义键生成策略,...
Redis是一款基于键值对的高性能NoSQL数据库,常用于做数据缓存。它支持丰富的数据结构(如字符串、哈希、列表、集合等),并且具备高速读写性能,能够提供更强大的缓存能力。 在"springMybatis+redis三级缓存框架...
在Spring Boot中,我们可以利用Spring Cache抽象来实现缓存功能,支持多种缓存Provider,如 EhCache、Redis 或 Hazelcast。通过`@EnableCaching`在配置类上启用缓存,然后在方法上使用`@Cacheable`、`@CacheEvict`等...
Spring Boot支持多种缓存实现,包括内存缓存和分布式缓存。 1.添加缓存依赖: 在项目的 pom.xml 文件中添加所需的缓存依赖。 2.配置缓存管理器: 在应用程序的配置类中添加@EnableCaching注解,启用缓存功能。 创建...
1. **引入缓存提供者**:Hibernate支持多种缓存提供商,如EhCache、Infinispan和 Hazelcast。以EhCache为例,我们需要在项目中引入ehcache-core或ehcache的依赖,并在Hibernate配置文件(hibernate.cfg.xml或...
SpringCache是Spring框架提供的一种轻量级的缓存解决方案,旨在简化在应用程序中集成缓存的能力,以提高性能和响应速度。...尽管压缩包内的文档可能篇幅较短,但理解这些核心概念将对掌握SpringCache有所帮助。