缓存&Log4j

来源:互联网 发布:全键盘模拟钢琴mac 编辑:程序博客网 时间:2024/05/02 15:18
<!-- redis -->          <dependency>              <groupId>org.springframework.data</groupId>              <artifactId>spring-data-redis</artifactId>              <version>1.3.4.RELEASE</version>          </dependency>          <dependency>              <groupId>redis.clients</groupId>              <artifactId>jedis</artifactId>              <version>2.5.2</version>          </dependency>  

applicationContext-cache-redis.xml

<context:property-placeholder        location="classpath:/config/properties/redis.properties" />    <!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 -->    <cache:annotation-driven cache-manager="cacheManager" />    <!-- spring自己的换管理器,这里定义了两个缓存位置名称 ,既注解中的value -->    <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">        <property name="caches">            <set>                <bean class="org.cpframework.cache.redis.RedisCache">                    <property name="redisTemplate" ref="redisTemplate" />                    <property name="name" value="default"/>                </bean>                <bean class="org.cpframework.cache.redis.RedisCache">                    <property name="redisTemplate" ref="redisTemplate02" />                    <property name="name" value="commonCache"/>                </bean>            </set>        </property>    </bean>    <!-- redis 相关配置 -->    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">        <property name="maxIdle" value="${redis.maxIdle}" />               <property name="maxWaitMillis" value="${redis.maxWait}" />        <property name="testOnBorrow" value="${redis.testOnBorrow}" />    </bean>    <bean id="connectionFactory"        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"        p:host-name="${redis.host}" p:port="${redis.port}" p:pool-config-ref="poolConfig"        p:database="${redis.database}" />    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">        <property name="connectionFactory" ref="connectionFactory" />    </bean>    <bean id="connectionFactory02"        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"        p:host-name="${redis.host}" p:port="${redis.port}" p:pool-config-ref="poolConfig"        p:database="${redis.database}" />    <bean id="redisTemplate02" class="org.springframework.data.redis.core.RedisTemplate">        <property name="connectionFactory" ref="connectionFactory02" />    </bean>

redis.properties

# Redis settings  # server IPredis.host=192.168.xx.xx# server portredis.port=6379   # use dbIndexredis.database=0# 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例redis.maxIdle=300  # 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间(毫秒),则直接抛出JedisConnectionException;redis.maxWait=3000  # 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的redis.testOnBorrow=true  

RedisCache.java

package org.cpframework.cache.redis;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import org.springframework.cache.Cache;import org.springframework.cache.support.SimpleValueWrapper;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;public class RedisCache implements Cache {    private RedisTemplate<String, Object> redisTemplate;    private String name;    public RedisTemplate<String, Object> getRedisTemplate() {        return redisTemplate;    }    public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {        this.redisTemplate = redisTemplate;    }    public void setName(String name) {        this.name = name;    }    @Override    public String getName() {        // TODO Auto-generated method stub        return this.name;    }    @Override    public Object getNativeCache() {        // TODO Auto-generated method stub        return this.redisTemplate;    }    @Override    public ValueWrapper get(Object key) {        // TODO Auto-generated method stub        final String keyf = (String) key;        Object object = null;        object = redisTemplate.execute(new RedisCallback<Object>() {            public Object doInRedis(RedisConnection connection)                    throws DataAccessException {                byte[] key = keyf.getBytes();                byte[] value = connection.get(key);                if (value == null) {                    return null;                }                return toObject(value);            }        });        return (object != null ? new SimpleValueWrapper(object) : null);    }    @Override    public void put(Object key, Object value) {        // TODO Auto-generated method stub        final String keyf = (String) key;        final Object valuef = value;        final long liveTime = 86400;        redisTemplate.execute(new RedisCallback<Long>() {            public Long doInRedis(RedisConnection connection)                    throws DataAccessException {                byte[] keyb = keyf.getBytes();                byte[] valueb = toByteArray(valuef);                connection.set(keyb, valueb);                if (liveTime > 0) {                    connection.expire(keyb, liveTime);                }                return 1L;            }        });    }    /**     * 描述 : <Object转byte[]>. <br>     * <p>     * <使用方法说明>     * </p>     *      * @param obj     * @return     */    private byte[] toByteArray(Object obj) {        byte[] bytes = null;        ByteArrayOutputStream bos = new ByteArrayOutputStream();        try {            ObjectOutputStream oos = new ObjectOutputStream(bos);            oos.writeObject(obj);            oos.flush();            bytes = bos.toByteArray();            oos.close();            bos.close();        } catch (IOException ex) {            ex.printStackTrace();        }        return bytes;    }    /**     * 描述 : <byte[]转Object>. <br>     * <p>     * <使用方法说明>     * </p>     *      * @param bytes     * @return     */    private Object toObject(byte[] bytes) {        Object obj = null;        try {            ByteArrayInputStream bis = new ByteArrayInputStream(bytes);            ObjectInputStream ois = new ObjectInputStream(bis);            obj = ois.readObject();            ois.close();            bis.close();        } catch (IOException ex) {            ex.printStackTrace();        } catch (ClassNotFoundException ex) {            ex.printStackTrace();        }        return obj;    }    @Override    public void evict(Object key) {        // TODO Auto-generated method stub        final String keyf = (String) key;        redisTemplate.execute(new RedisCallback<Long>() {            public Long doInRedis(RedisConnection connection)                    throws DataAccessException {                return connection.del(keyf.getBytes());            }        });    }    @Override    public void clear() {        // TODO Auto-generated method stub        redisTemplate.execute(new RedisCallback<String>() {            public String doInRedis(RedisConnection connection)                    throws DataAccessException {                connection.flushDb();                return "ok";            }        });    }}

下载相应的jar包(log4j.jar)

首先是web.xml的配置,在web.xml中加入如下配置

  <context-param>           <param-name>log4jConfigLocation</param-name>           <param-value>/WEB-INF/props/log4j.properties</param-value>        </context-param>        <context-param>           <param-name>     log4jRefreshInterval</param-name>           <param-value>6000</param-value>        </context-param>    <listener>       <listener-class>          org.springframework.web.util.Log4jConfigListener       </listener-class>    </listener>

log4j.properties

log4j.rootLogger=INFO, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=/webserver/specialTraining3/wangzj.loglog4j.appender.logfile.MaxFileSize=51200KBlog4j.appender.logfile.MaxBackupIndex=3log4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n 
0 0
原创粉丝点击