jfinalQ开发教程06-qiao-util.jar:日志和缓存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/uikoo9/article/details/49022255

cachedribbble.jpg


日志

常见日志组件

java中常用的日志有自带的logging,log4j,logback,slf4j等,

jfinalQ中使用slf4j+logback,上面几种日志组件的对比详见:http://www.importnew.com/7450.html

slf4j准确的来说是一个日志接口,而不是日志组件,可以很方便的接入logging,logback,log4j。


slf4j+logback

上面说到slf4j只是日志接口,具体的日志组件采用logback,需要引入这些jar:

slf4j-api-1.7.7.jar

logback-classic-1.1.2.jar

logback-core-1.1.2.jar

还需要一个配置文件logback.xml:

<configuration>
	<!-- 定义变量 -->
	<property name="pattern" value="%date{yyyy-MM-dd HH:mm:ss} %-5level %logger{0} %n%msg%n" />
	<property name="filepath" value="/home/bae/log/bae.%d{yyyy-MM-dd}.log" />

	<!-- 打印到文件,每天一个,保存30天的 -->
	<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${filepath}</fileNamePattern>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${pattern}</pattern>
		</encoder>
	</appender>
	
	<!-- 打印到控制台 -->
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${pattern}</pattern>
		</encoder>
	</appender>

	<root level="error">
		<appender-ref ref="file"/>
		<appender-ref ref="stdout"/>
	</root>
</configuration>

以上是常用的配置文件,包括日志格式,输出到控制台和输出到文件。


logger

代码中使用的时候只需要引入slf4j的logger:

private static final Logger logger = LoggerFactory.getLogger(LoginService.class);

然后这个logger接口会去获取对应的日志实现,例如logback,log4j等。

日志的类型也是常见的几种:error,warn,info,debug。


缓存

常见缓存组件

java中常见的缓存组件有:memcached,ehcache,redis等,

jfinalQ中采用了小巧的echcache,其实如果条件允许,还是使用redis比较好~


ehcache

ehcache使用的时候只需要引入ehcache-2.9.0.jar和上面说的slf4j日志即可,

还需要一个ehcache.xml的配置文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ehcache.xsd"
         updateCheck="false" monitoring="autodetect"
         dynamicConfig="true">
         
    <diskStore path="java.io.tmpdir"/>
    
    <defaultCache
           maxEntriesLocalHeap="1000"
           eternal="false"
           overflowToDisk="true"
           timeToLiveSeconds="1800">
    </defaultCache>

	<!-- 
		must:
			name 					: name
			maxEntriesLocalHeap 	: 内存对象数,0无限制
			maxEntriesLocalDisk 	: 硬盘对象数,0无限制
		choice:
			overflowToDisk			: 内存满时是否存到硬盘上
			diskSpoolBufferSizeMB	: 硬盘缓存空间
			timeToIdleSeconds		: 失效前空闲时间,86400为1天
			timeToLiveSeconds		: 失效前存活时间,86400为1天
	-->
    <cache name="cache"
           eternal="false"
           maxEntriesLocalHeap="0"
           maxEntriesLocalDisk="0"
           overflowToDisk="true"
           diskSpoolBufferSizeMB="200"
           timeToLiveSeconds="86400"
           memoryStoreEvictionPolicy="LFU"
           transactionalMode="off"
            />
</ehcache>

这里只配置了一个缓存,通常应该配置多个缓存。


QCacheUtil

qiao-util.jar中对ehcache的相关操作做了封装,方便使用,详见:com.uikoo9.util.function.QCacheUtil,

/**
 * 缓存工具类<br>
 * 1.获得一个ehcache<br>
 * 2.关闭ehcache manager<br>
 * 3.向默认ehcache中存入一个对象<br>
 * 4.从默认ehcache中读取一个对象<br>
 * 5.从默认ehcache中移除一个对象<br>
 * @author qiaowenbin
 * @version 0.0.1.20141109
 * @history
 * 	0.0.1.20141109
 */
public class QCacheUtil {}


数据缓存

对于一些数据库中变动少的数据可以放到缓存中,加快每次访问的速度,而不是每次都去数据库中取,

一般的做法是在Model添加一个findByCache方法:

        /**
	 * find all by cache
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<BillAccountModel> findAllByCache(){
		List<BillAccountModel> accounts = null;
		
		Object value = QCacheUtil.getFromEHCache("accounts");
		if(value == null){
			accounts = BillAccountModel.dao.findAll();
			QCacheUtil.putToEHCache("accounts", accounts);
		}else{
			accounts = (List<BillAccountModel>) value;
		}
		
		return accounts;
	}

需要注意的是,添加了这个方法的Model在每次添加修改删除的时候都需要重新获取数据并放入缓存。


jfinalQ2.0

官网:http://uikoo9.com/jfinalQ

源码:https://github.com/uikoo9/jfinalQ


更多精彩内容:http://uikoo9.com/


求打赏(长按图片即可识别)~
微信 捐助列表:http://uikoo9.com/donate/

猜你喜欢

转载自blog.csdn.net/uikoo9/article/details/49022255