日志
常见日志组件
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
源码:https://github.com/uikoo9/jfinalQ
更多精彩内容:http://uikoo9.com/
求打赏(长按图片即可识别)~ |
捐助列表:http://uikoo9.com/donate/ |