jfinalQ開發教程06-qiao-util.jar:日誌和快取
日誌
常見日誌元件
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/ |