maven工程中hibernate的二级缓存ehcache的配置
来源:互联网 发布:淘宝基础版全屏装修 编辑:程序博客网 时间:2024/06/11 02:14
说到缓存对于新手来说可能是一件很头疼的事儿,做为新手的我,今天给大家分享下自己的学习过程。最近项目中用到了可配置参数,这类参数基本无需修改,除了新增,刚开始是自己写了一个mapCache,就是用ConcurrentHashMap在系统启动时将所有数据缓存到map中,这样避免了系统运行时频繁访问数据库查询。但是这里有个缺点,如果系统启动后在管理平台新增参数那么新增的参数不会在map中,业务系统必须重启重新加载参数。所以这个方法不能满足系统的需求。之后又想到了定时器,Spring中自带的定时功能,定时没隔5分钟查询数据库并更新Map中的配置参数,这个方法确实可以解决问题,但是增加的系统的负担。最后想到了hibernate的二级缓存,这个缓存一直没有用过,工作快两年了,真对不起自己的职业,决定研究下。切入主题:
1.首先说下hibernate的配置,如下
<prop key="hibernate.cache.use_query_cache">true</prop> 是否开启查询缓存,此处true表示开启
<prop key="hibernate.cache.use_second_level_cache">true</prop> 是否开启二级缓存,true表示开启
<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
<!-- Hibernate4.0以上设置factory -->
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory
</prop>
<!-- 二级缓存 ehcache的配置文件路径 -->
<prop key="hibernate.cache.provider_configuration_file_resource_path">classpath:ehcache-hibernate.xml</prop>
<prop key="hibernate.cache.use_query_cache">true</prop> 是否开启查询缓存,此处true表示开启
<prop key="hibernate.cache.use_second_level_cache">true</prop> 是否开启二级缓存,true表示开启
<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
<!-- Hibernate4.0以上设置factory -->
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory
</prop>
<!-- 二级缓存 ehcache的配置文件路径 -->
<prop key="hibernate.cache.provider_configuration_file_resource_path">classpath:ehcache-hibernate.xml</prop>
2.ehcache-hibernate.xml 的配置,如下,文件中写的已经很清楚,不在做说明
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<!--磁盘缓存位置: 指定一个文件目录,当EhCache把数据写到硬盘上时,将把数据写到这个文件目录下 -->
<diskStore path="java.io.tmpdir/ehcache" />
<!-- 默认的管理策略 maxElementsOnDisk: 在磁盘上缓存的element的最大数目,默认值为0,表示不限制。 eternal:设定缓存的elements是否永远不过期。
如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds判断:当缓存闲置n秒后销毁; timeToLiveSeconds判断:当缓存存活n秒后销毁;
overflowToDisk:是否保存到磁盘,当系统当机时; diskPersistent: 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。
diskExpiryThreadIntervalSeconds:对象检测线程运行时间间隔。 标识对象状态(过期/持久化)的线程多长时间运行一次。 -->
<!-- memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。 -->
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<!--磁盘缓存位置: 指定一个文件目录,当EhCache把数据写到硬盘上时,将把数据写到这个文件目录下 -->
<diskStore path="java.io.tmpdir/ehcache" />
<!-- 默认的管理策略 maxElementsOnDisk: 在磁盘上缓存的element的最大数目,默认值为0,表示不限制。 eternal:设定缓存的elements是否永远不过期。
如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds判断:当缓存闲置n秒后销毁; timeToLiveSeconds判断:当缓存存活n秒后销毁;
overflowToDisk:是否保存到磁盘,当系统当机时; diskPersistent: 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。
diskExpiryThreadIntervalSeconds:对象检测线程运行时间间隔。 标识对象状态(过期/持久化)的线程多长时间运行一次。 -->
<!-- memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。 -->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
overflowToDisk="true"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</defaultCache>
<!--想使用查询缓存,这两个类需要添加-->
<cache
name="org.hibernate.cache.spi.UpdateTimestampsCache"
maxElementsInMemory="5000"
eternal="true"
overflowToDisk="true">
</cache>
<cache
name="org.hibernate.cache.internal.StandardQueryCache"
maxElementsInMemory="10000"
eternal="false"
timeToLiveSeconds="120"
overflowToDisk="true">
</cache>
<!-- Special objects setting. -->
<cache
name="com.cosw.entity.huaian.PayRates"
maxElementsInMemory="20"
eternal="false"
diskPersistent="false"
overflowToDisk="false"
timeToIdleSeconds="600"
timeToLiveSeconds="600"
maxElementsOnDisk="1000000"
memoryStoreEvictionPolicy="LRU" >
</cache>
<cache
name="com.cosw.entity.huaian.SysParam"
maxElementsInMemory="20"
eternal="false"
diskPersistent="false"
overflowToDisk="false"
timeToIdleSeconds="600"
timeToLiveSeconds="600"
maxElementsOnDisk="1000000"
memoryStoreEvictionPolicy="LRU" >
</cache>
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
overflowToDisk="true"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</defaultCache>
<!--想使用查询缓存,这两个类需要添加-->
<cache
name="org.hibernate.cache.spi.UpdateTimestampsCache"
maxElementsInMemory="5000"
eternal="true"
overflowToDisk="true">
</cache>
<cache
name="org.hibernate.cache.internal.StandardQueryCache"
maxElementsInMemory="10000"
eternal="false"
timeToLiveSeconds="120"
overflowToDisk="true">
</cache>
<!-- Special objects setting. -->
<cache
name="com.cosw.entity.huaian.PayRates"
maxElementsInMemory="20"
eternal="false"
diskPersistent="false"
overflowToDisk="false"
timeToIdleSeconds="600"
timeToLiveSeconds="600"
maxElementsOnDisk="1000000"
memoryStoreEvictionPolicy="LRU" >
</cache>
<cache
name="com.cosw.entity.huaian.SysParam"
maxElementsInMemory="20"
eternal="false"
diskPersistent="false"
overflowToDisk="false"
timeToIdleSeconds="600"
timeToLiveSeconds="600"
maxElementsOnDisk="1000000"
memoryStoreEvictionPolicy="LRU" >
</cache>
</ehcache>
3.在log4j中配置log4j.logger.org.hibernate=debug;方便测试时打印出hibernate的日志查看,下面会做说明
3.在log4j中配置log4j.logger.org.hibernate=debug;方便测试时打印出hibernate的日志查看,下面会做说明
4.在Hibernate查询中设置缓存查询,如下
/**
* 设置ehcache查询缓存:setCacheable(true);
*/
public List<T> findAllEhcache() {
return createCriteria().setCacheable(true).list();
}
/**
* 设置ehcache查询缓存:setCacheable(true);
*/
public List<T> findAllEhcache() {
return createCriteria().setCacheable(true).list();
}
5.测试类如下:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.cosw.entity.huaian.SysParam;
import com.cosw.service.huaian.SysParamService;
import com.cosw.service.huaian.SysParamService;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext-base.xml",
"classpath:applicationContext-hibernate.xml", "classpath:ehcache-hibernate.xml" })
public class EhcacheTest {
private static final Logger LOGGER = Logger.getLogger(EhcacheTest.class);
SimpleDateFormat fromat_YMDHMS = new SimpleDateFormat("yyyyMMddHHmmss");
@ContextConfiguration(locations = { "classpath:applicationContext-base.xml",
"classpath:applicationContext-hibernate.xml", "classpath:ehcache-hibernate.xml" })
public class EhcacheTest {
private static final Logger LOGGER = Logger.getLogger(EhcacheTest.class);
SimpleDateFormat fromat_YMDHMS = new SimpleDateFormat("yyyyMMddHHmmss");
@Autowired
private SysParamService sysParamService;
private SysParamService sysParamService;
@Test
public void ehcacheSave() throws InterruptedException {
SysParam sysParam = new SysParam();
sysParam.setId(System.currentTimeMillis());
sysParam.setSysCode(fromat_YMDHMS.format(new Date()));
sysParam.setSysName("单日最大交易限额");
sysParam.setSysValue("500");
sysParamService.save(sysParam);
public void ehcacheSave() throws InterruptedException {
SysParam sysParam = new SysParam();
sysParam.setId(System.currentTimeMillis());
sysParam.setSysCode(fromat_YMDHMS.format(new Date()));
sysParam.setSysName("单日最大交易限额");
sysParam.setSysValue("500");
sysParamService.save(sysParam);
LOGGER.info("====OBJECT====" + sysParam.getId());
sysParamService.findAllSetEhcache();
sysParamService.findAllSetEhcache();
Thread.sleep(5000);
for (int i = 0; i < 2; i++) {
List<SysParam> list = sysParamService.findAllSetEhcache();
LOGGER.info("====OBJECT====" + i + "====" + list);
}
}
}
for (int i = 0; i < 2; i++) {
List<SysParam> list = sysParamService.findAllSetEhcache();
LOGGER.info("====OBJECT====" + i + "====" + list);
}
}
}
6.以下为测试类的hibernate的打印日志,并作分析
2017-06-05 21:32:54 45125 <DEBUG> Obtaining JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:226)(main)>
2017-06-05 21:32:54 45128 <DEBUG> Obtained JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:232)(main)>
2017-06-05 21:32:54 45132 <DEBUG> begin <org.hibernate.engine.transaction.spi.AbstractTransactionImpl:org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)(main)>
2017-06-05 21:32:54 45133 <DEBUG> initial autocommit status: true <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:69)(main)>
2017-06-05 21:32:54 45134 <DEBUG> disabling autocommit <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:71)(main)>
2017-06-05 21:32:54 45213 <DEBUG> Checking cached query results in region: org.hibernate.cache.internal.StandardQueryCache <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.get(StandardQueryCache.java:166)(main)>
// 开始第一次查询
2017-06-05 21:32:54 45215 <DEBUG> key: sql: select this_.id as id1_7_0_, this_.sys_code as sys_code2_7_0_, this_.sys_name as sys_name3_7_0_, this_.sys_value as sys_valu4_7_0_ from huaian_sys_param this_; parameters: ; transformer: org.hibernate.transform.CacheableResultTransformer@110f2 <org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion:org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion.get(EhcacheGeneralDataRegion.java:74)(main)>
2017-06-05 21:32:54 45219 <DEBUG> Element for key sql: select this_.id as id1_7_0_, this_.sys_code as sys_code2_7_0_, this_.sys_name as sys_name3_7_0_, this_.sys_value as sys_valu4_7_0_ from huaian_sys_param this_; parameters: ; transformer: org.hibernate.transform.CacheableResultTransformer@110f2 is null <org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion:org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion.get(EhcacheGeneralDataRegion.java:81)(main)>
// 首先去cache中查找,查找结果为 not found
2017-06-05 21:32:54 45220 <DEBUG> Query results were not found in cache <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.get(StandardQueryCache.java:174)(main)>
2017-06-05 21:32:54 45235 <DEBUG>
select
this_.id as id1_7_0_,
this_.sys_code as sys_code2_7_0_,
this_.sys_name as sys_name3_7_0_,
this_.sys_value as sys_valu4_7_0_
from
huaian_sys_param this_ <org.hibernate.SQL:org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:109)(main)>
2017-06-05 21:32:54 45125 <DEBUG> Obtaining JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:226)(main)>
2017-06-05 21:32:54 45128 <DEBUG> Obtained JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:232)(main)>
2017-06-05 21:32:54 45132 <DEBUG> begin <org.hibernate.engine.transaction.spi.AbstractTransactionImpl:org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)(main)>
2017-06-05 21:32:54 45133 <DEBUG> initial autocommit status: true <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:69)(main)>
2017-06-05 21:32:54 45134 <DEBUG> disabling autocommit <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:71)(main)>
2017-06-05 21:32:54 45213 <DEBUG> Checking cached query results in region: org.hibernate.cache.internal.StandardQueryCache <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.get(StandardQueryCache.java:166)(main)>
// 开始第一次查询
2017-06-05 21:32:54 45215 <DEBUG> key: sql: select this_.id as id1_7_0_, this_.sys_code as sys_code2_7_0_, this_.sys_name as sys_name3_7_0_, this_.sys_value as sys_valu4_7_0_ from huaian_sys_param this_; parameters: ; transformer: org.hibernate.transform.CacheableResultTransformer@110f2 <org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion:org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion.get(EhcacheGeneralDataRegion.java:74)(main)>
2017-06-05 21:32:54 45219 <DEBUG> Element for key sql: select this_.id as id1_7_0_, this_.sys_code as sys_code2_7_0_, this_.sys_name as sys_name3_7_0_, this_.sys_value as sys_valu4_7_0_ from huaian_sys_param this_; parameters: ; transformer: org.hibernate.transform.CacheableResultTransformer@110f2 is null <org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion:org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion.get(EhcacheGeneralDataRegion.java:81)(main)>
// 首先去cache中查找,查找结果为 not found
2017-06-05 21:32:54 45220 <DEBUG> Query results were not found in cache <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.get(StandardQueryCache.java:174)(main)>
2017-06-05 21:32:54 45235 <DEBUG>
select
this_.id as id1_7_0_,
this_.sys_code as sys_code2_7_0_,
this_.sys_name as sys_name3_7_0_,
this_.sys_value as sys_valu4_7_0_
from
huaian_sys_param this_ <org.hibernate.SQL:org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:109)(main)>
2017-06-05 21:32:54 45242 <DEBUG> Result set row: 0 <org.hibernate.loader.Loader:org.hibernate.loader.Loader.processResultSet(Loader.java:952)(main)>
2017-06-05 21:32:54 45249 <DEBUG> Result row: EntityKey[com.cosw.entity.huaian.SysParam#1] <org.hibernate.loader.Loader:org.hibernate.loader.Loader.getRow(Loader.java:1486)(main)>
2017-06-05 21:32:54 45259 <DEBUG> Result set row: 1 <org.hibernate.loader.Loader:org.hibernate.loader.Loader.processResultSet(Loader.java:952)(main)>
2017-06-05 21:32:54 45260 <DEBUG> Result row: EntityKey[com.cosw.entity.huaian.SysParam#2] <org.hibernate.loader.Loader:org.hibernate.loader.Loader.getRow(Loader.java:1486)(main)>
2017-06-05 21:32:54 45261 <DEBUG> Result set row: 2 <org.hibernate.loader.Loader:org.hibernate.loader.Loader.processResultSet(Loader.java:952)(main)>
2017-06-05 21:32:54 45261 <DEBUG> Result row: EntityKey[com.cosw.entity.huaian.SysParam#17] <org.hibernate.loader.Loader:org.hibernate.loader.Loader.getRow(Loader.java:1486)(main)>
2017-06-05 21:32:54 45266 <DEBUG> Resolving associations for [com.cosw.entity.huaian.SysParam#1] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:160)(main)>
// 插叙出三条记录,通过Adding entity to second-level cache 放入缓存中
2017-06-05 21:32:54 45267 <DEBUG> Adding entity to second-level cache: [com.cosw.entity.huaian.SysParam#1] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:194)(main)>
2017-06-05 21:32:54 45281 <DEBUG> Done materializing entity [com.cosw.entity.huaian.SysParam#1] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:286)(main)>
2017-06-05 21:32:54 45282 <DEBUG> Resolving associations for [com.cosw.entity.huaian.SysParam#2] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:160)(main)>
2017-06-05 21:32:54 45283 <DEBUG> Adding entity to second-level cache: [com.cosw.entity.huaian.SysParam#2] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:194)(main)>
2017-06-05 21:32:54 45285 <DEBUG> Done materializing entity [com.cosw.entity.huaian.SysParam#2] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:286)(main)>
2017-06-05 21:32:54 45286 <DEBUG> Resolving associations for [com.cosw.entity.huaian.SysParam#17] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:160)(main)>
2017-06-05 21:32:54 45287 <DEBUG> Adding entity to second-level cache: [com.cosw.entity.huaian.SysParam#17] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:194)(main)>
2017-06-05 21:32:54 45289 <DEBUG> Done materializing entity [com.cosw.entity.huaian.SysParam#17] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:286)(main)>
2017-06-05 21:32:54 45292 <DEBUG> HHH000117: HQL: [CRITERIA] select this_.id as id1_7_0_, this_.sys_code as sys_code2_7_0_, this_.sys_name as sys_name3_7_0_, this_.sys_value as sys_valu4_7_0_ from huaian_sys_param this_, time: 64ms, rows: 3 <org.hibernate.stat.internal.ConcurrentStatisticsImpl:org.hibernate.stat.internal.ConcurrentStatisticsImpl.queryExecuted(ConcurrentStatisticsImpl.java:412)(main)>
2017-06-05 21:32:54 45293 <DEBUG> Caching query results in region: org.hibernate.cache.internal.StandardQueryCache; timestamp=6130358578888704 <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.put(StandardQueryCache.java:130)(main)>
// 需要说名的是,缓存中的存放形式是key-value,key为查询的sql 语句
2017-06-05 21:32:54 45294 <DEBUG> key: sql: select this_.id as id1_7_0_, this_.sys_code as sys_code2_7_0_, this_.sys_name as sys_name3_7_0_, this_.sys_value as sys_valu4_7_0_ from huaian_sys_param this_; parameters: ; transformer: org.hibernate.transform.CacheableResultTransformer@110f2 value: [6130358578888704, 1, 2, 17] <org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion:org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion.put(EhcacheGeneralDataRegion.java:103)(main)>
2017-06-05 21:32:54 45296 <DEBUG> committing <org.hibernate.engine.transaction.spi.AbstractTransactionImpl:org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)(main)>
2017-06-05 21:32:54 45297 <DEBUG> committed JDBC Connection <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:113)(main)>
2017-06-05 21:32:54 45298 <DEBUG> re-enabling autocommit <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.releaseManagedConnection(JdbcTransaction.java:126)(main)>
2017-06-05 21:32:54 45303 <INFO > Session Metrics {
2386920 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
927015 nanoseconds spent preparing 1 JDBC statements;
1851156 nanoseconds spent executing 1 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
10317456 nanoseconds spent performing 4 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
5462738 nanoseconds spent performing 1 L2C misses;
0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
67741 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
} <org.hibernate.engine.internal.StatisticalLoggingSessionEventListener:org.hibernate.engine.internal.StatisticalLoggingSessionEventListener.end(StatisticalLoggingSessionEventListener.java:275)(main)>
2017-06-05 21:32:54 45304 <DEBUG> Releasing JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.releaseConnection(LogicalConnectionImpl.java:246)(main)>
2017-06-05 21:32:54 45307 <DEBUG> Released JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.releaseConnection(LogicalConnectionImpl.java:264)(main)>
2017-06-05 21:32:59 50308 <DEBUG> Obtaining JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:226)(main)>
2017-06-05 21:32:59 50311 <DEBUG> Obtained JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:232)(main)>
2017-06-05 21:32:59 50313 <DEBUG> begin <org.hibernate.engine.transaction.spi.AbstractTransactionImpl:org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)(main)>
2017-06-05 21:32:59 50313 <DEBUG> initial autocommit status: true <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:69)(main)>
2017-06-05 21:32:59 50314 <DEBUG> disabling autocommit <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:71)(main)>
2017-06-05 21:32:59 50316 <DEBUG> Checking cached query results in region: org.hibernate.cache.internal.StandardQueryCache <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.get(StandardQueryCache.java:166)(main)>
2017-06-05 21:32:59 50316 <DEBUG> key: sql: select this_.id as id1_7_0_, this_.sys_code as sys_code2_7_0_, this_.sys_name as sys_name3_7_0_, this_.sys_value as sys_valu4_7_0_ from huaian_sys_param this_; parameters: ; transformer: org.hibernate.transform.CacheableResultTransformer@110f2 <org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion:org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion.get(EhcacheGeneralDataRegion.java:74)(main)>
2017-06-05 21:32:59 50317 <DEBUG> Checking query spaces are up-to-date: [huaian_sys_param] <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.isUpToDate(StandardQueryCache.java:248)(main)>
2017-06-05 21:32:59 50318 <DEBUG> key: huaian_sys_param <org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion:org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion.get(EhcacheGeneralDataRegion.java:74)(main)>
2017-06-05 21:32:59 50318 <DEBUG> [huaian_sys_param] last update timestamp: 6130358577954816, result set timestamp: 6130358578888704 <org.hibernate.cache.spi.UpdateTimestampsCache:org.hibernate.cache.spi.UpdateTimestampsCache.isUpToDate(UpdateTimestampsCache.java:187)(main)>
// 返回缓存中的结果,此时并没有像第一次一样执行select的sql 语句,直接从缓存返回结果
2017-06-05 21:32:59 50319 <DEBUG> Returning cached query results <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.get(StandardQueryCache.java:188)(main)>
2017-06-05 21:32:59 50329 <DEBUG> committing <org.hibernate.engine.transaction.spi.AbstractTransactionImpl:org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)(main)>
2017-06-05 21:32:59 50330 <DEBUG> committed JDBC Connection <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:113)(main)>
2017-06-05 21:32:59 50330 <DEBUG> re-enabling autocommit <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.releaseManagedConnection(JdbcTransaction.java:126)(main)>
2017-06-05 21:32:59 50334 <INFO > Session Metrics {
2761749 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
0 nanoseconds spent preparing 0 JDBC statements;
0 nanoseconds spent executing 0 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
2794593 nanoseconds spent performing 5 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
10264 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
} <org.hibernate.engine.internal.StatisticalLoggingSessionEventListener:org.hibernate.engine.internal.StatisticalLoggingSessionEventListener.end(StatisticalLoggingSessionEventListener.java:275)(main)>
2017-06-05 21:32:59 50334 <DEBUG> Releasing JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.releaseConnection(LogicalConnectionImpl.java:246)(main)>
2017-06-05 21:32:59 50337 <DEBUG> Released JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.releaseConnection(LogicalConnectionImpl.java:264)(main)>
2017-06-05 21:33:00 50374 <INFO > ====OBJECT====0====[com.cosw.entity.huaian.SysParam@4e763e0c[
sysName=单日最大交易限额
sysCode=20170605133623
sysValue=500
id=1
], com.cosw.entity.huaian.SysParam@34e3ae12[
sysName=单日最大交易限额
sysCode=20170605134605
sysValue=500
id=2
], com.cosw.entity.huaian.SysParam@4fb93ade[
sysName=单日最大交易限额
sysCode=20170605213253
sysValue=500
id=17
]] <com.cosw.cache.EhcacheTest:com.cosw.cache.EhcacheTest.ehcacheSave(EhcacheTest.java:42)(main)>
2017-06-05 21:32:54 45249 <DEBUG> Result row: EntityKey[com.cosw.entity.huaian.SysParam#1] <org.hibernate.loader.Loader:org.hibernate.loader.Loader.getRow(Loader.java:1486)(main)>
2017-06-05 21:32:54 45259 <DEBUG> Result set row: 1 <org.hibernate.loader.Loader:org.hibernate.loader.Loader.processResultSet(Loader.java:952)(main)>
2017-06-05 21:32:54 45260 <DEBUG> Result row: EntityKey[com.cosw.entity.huaian.SysParam#2] <org.hibernate.loader.Loader:org.hibernate.loader.Loader.getRow(Loader.java:1486)(main)>
2017-06-05 21:32:54 45261 <DEBUG> Result set row: 2 <org.hibernate.loader.Loader:org.hibernate.loader.Loader.processResultSet(Loader.java:952)(main)>
2017-06-05 21:32:54 45261 <DEBUG> Result row: EntityKey[com.cosw.entity.huaian.SysParam#17] <org.hibernate.loader.Loader:org.hibernate.loader.Loader.getRow(Loader.java:1486)(main)>
2017-06-05 21:32:54 45266 <DEBUG> Resolving associations for [com.cosw.entity.huaian.SysParam#1] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:160)(main)>
// 插叙出三条记录,通过Adding entity to second-level cache 放入缓存中
2017-06-05 21:32:54 45267 <DEBUG> Adding entity to second-level cache: [com.cosw.entity.huaian.SysParam#1] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:194)(main)>
2017-06-05 21:32:54 45281 <DEBUG> Done materializing entity [com.cosw.entity.huaian.SysParam#1] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:286)(main)>
2017-06-05 21:32:54 45282 <DEBUG> Resolving associations for [com.cosw.entity.huaian.SysParam#2] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:160)(main)>
2017-06-05 21:32:54 45283 <DEBUG> Adding entity to second-level cache: [com.cosw.entity.huaian.SysParam#2] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:194)(main)>
2017-06-05 21:32:54 45285 <DEBUG> Done materializing entity [com.cosw.entity.huaian.SysParam#2] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:286)(main)>
2017-06-05 21:32:54 45286 <DEBUG> Resolving associations for [com.cosw.entity.huaian.SysParam#17] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:160)(main)>
2017-06-05 21:32:54 45287 <DEBUG> Adding entity to second-level cache: [com.cosw.entity.huaian.SysParam#17] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:194)(main)>
2017-06-05 21:32:54 45289 <DEBUG> Done materializing entity [com.cosw.entity.huaian.SysParam#17] <org.hibernate.engine.internal.TwoPhaseLoad:org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:286)(main)>
2017-06-05 21:32:54 45292 <DEBUG> HHH000117: HQL: [CRITERIA] select this_.id as id1_7_0_, this_.sys_code as sys_code2_7_0_, this_.sys_name as sys_name3_7_0_, this_.sys_value as sys_valu4_7_0_ from huaian_sys_param this_, time: 64ms, rows: 3 <org.hibernate.stat.internal.ConcurrentStatisticsImpl:org.hibernate.stat.internal.ConcurrentStatisticsImpl.queryExecuted(ConcurrentStatisticsImpl.java:412)(main)>
2017-06-05 21:32:54 45293 <DEBUG> Caching query results in region: org.hibernate.cache.internal.StandardQueryCache; timestamp=6130358578888704 <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.put(StandardQueryCache.java:130)(main)>
// 需要说名的是,缓存中的存放形式是key-value,key为查询的sql 语句
2017-06-05 21:32:54 45294 <DEBUG> key: sql: select this_.id as id1_7_0_, this_.sys_code as sys_code2_7_0_, this_.sys_name as sys_name3_7_0_, this_.sys_value as sys_valu4_7_0_ from huaian_sys_param this_; parameters: ; transformer: org.hibernate.transform.CacheableResultTransformer@110f2 value: [6130358578888704, 1, 2, 17] <org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion:org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion.put(EhcacheGeneralDataRegion.java:103)(main)>
2017-06-05 21:32:54 45296 <DEBUG> committing <org.hibernate.engine.transaction.spi.AbstractTransactionImpl:org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)(main)>
2017-06-05 21:32:54 45297 <DEBUG> committed JDBC Connection <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:113)(main)>
2017-06-05 21:32:54 45298 <DEBUG> re-enabling autocommit <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.releaseManagedConnection(JdbcTransaction.java:126)(main)>
2017-06-05 21:32:54 45303 <INFO > Session Metrics {
2386920 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
927015 nanoseconds spent preparing 1 JDBC statements;
1851156 nanoseconds spent executing 1 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
10317456 nanoseconds spent performing 4 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
5462738 nanoseconds spent performing 1 L2C misses;
0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
67741 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
} <org.hibernate.engine.internal.StatisticalLoggingSessionEventListener:org.hibernate.engine.internal.StatisticalLoggingSessionEventListener.end(StatisticalLoggingSessionEventListener.java:275)(main)>
2017-06-05 21:32:54 45304 <DEBUG> Releasing JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.releaseConnection(LogicalConnectionImpl.java:246)(main)>
2017-06-05 21:32:54 45307 <DEBUG> Released JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.releaseConnection(LogicalConnectionImpl.java:264)(main)>
2017-06-05 21:32:59 50308 <DEBUG> Obtaining JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:226)(main)>
2017-06-05 21:32:59 50311 <DEBUG> Obtained JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:232)(main)>
2017-06-05 21:32:59 50313 <DEBUG> begin <org.hibernate.engine.transaction.spi.AbstractTransactionImpl:org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)(main)>
2017-06-05 21:32:59 50313 <DEBUG> initial autocommit status: true <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:69)(main)>
2017-06-05 21:32:59 50314 <DEBUG> disabling autocommit <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:71)(main)>
2017-06-05 21:32:59 50316 <DEBUG> Checking cached query results in region: org.hibernate.cache.internal.StandardQueryCache <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.get(StandardQueryCache.java:166)(main)>
2017-06-05 21:32:59 50316 <DEBUG> key: sql: select this_.id as id1_7_0_, this_.sys_code as sys_code2_7_0_, this_.sys_name as sys_name3_7_0_, this_.sys_value as sys_valu4_7_0_ from huaian_sys_param this_; parameters: ; transformer: org.hibernate.transform.CacheableResultTransformer@110f2 <org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion:org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion.get(EhcacheGeneralDataRegion.java:74)(main)>
2017-06-05 21:32:59 50317 <DEBUG> Checking query spaces are up-to-date: [huaian_sys_param] <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.isUpToDate(StandardQueryCache.java:248)(main)>
2017-06-05 21:32:59 50318 <DEBUG> key: huaian_sys_param <org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion:org.hibernate.cache.ehcache.internal.regions.EhcacheGeneralDataRegion.get(EhcacheGeneralDataRegion.java:74)(main)>
2017-06-05 21:32:59 50318 <DEBUG> [huaian_sys_param] last update timestamp: 6130358577954816, result set timestamp: 6130358578888704 <org.hibernate.cache.spi.UpdateTimestampsCache:org.hibernate.cache.spi.UpdateTimestampsCache.isUpToDate(UpdateTimestampsCache.java:187)(main)>
// 返回缓存中的结果,此时并没有像第一次一样执行select的sql 语句,直接从缓存返回结果
2017-06-05 21:32:59 50319 <DEBUG> Returning cached query results <org.hibernate.cache.internal.StandardQueryCache:org.hibernate.cache.internal.StandardQueryCache.get(StandardQueryCache.java:188)(main)>
2017-06-05 21:32:59 50329 <DEBUG> committing <org.hibernate.engine.transaction.spi.AbstractTransactionImpl:org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)(main)>
2017-06-05 21:32:59 50330 <DEBUG> committed JDBC Connection <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:113)(main)>
2017-06-05 21:32:59 50330 <DEBUG> re-enabling autocommit <org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.releaseManagedConnection(JdbcTransaction.java:126)(main)>
2017-06-05 21:32:59 50334 <INFO > Session Metrics {
2761749 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
0 nanoseconds spent preparing 0 JDBC statements;
0 nanoseconds spent executing 0 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
2794593 nanoseconds spent performing 5 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
10264 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
} <org.hibernate.engine.internal.StatisticalLoggingSessionEventListener:org.hibernate.engine.internal.StatisticalLoggingSessionEventListener.end(StatisticalLoggingSessionEventListener.java:275)(main)>
2017-06-05 21:32:59 50334 <DEBUG> Releasing JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.releaseConnection(LogicalConnectionImpl.java:246)(main)>
2017-06-05 21:32:59 50337 <DEBUG> Released JDBC connection <org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.releaseConnection(LogicalConnectionImpl.java:264)(main)>
2017-06-05 21:33:00 50374 <INFO > ====OBJECT====0====[com.cosw.entity.huaian.SysParam@4e763e0c[
sysName=单日最大交易限额
sysCode=20170605133623
sysValue=500
id=1
], com.cosw.entity.huaian.SysParam@34e3ae12[
sysName=单日最大交易限额
sysCode=20170605134605
sysValue=500
id=2
], com.cosw.entity.huaian.SysParam@4fb93ade[
sysName=单日最大交易限额
sysCode=20170605213253
sysValue=500
id=17
]] <com.cosw.cache.EhcacheTest:com.cosw.cache.EhcacheTest.ehcacheSave(EhcacheTest.java:42)(main)>
阅读全文
0 0
- maven工程中hibernate的二级缓存ehcache的配置
- Hibernate二级缓存插件EHCache的配置
- Hibernate二级缓存以及ehcache的搭建配置
- Hibernate二级缓存以及ehcache的搭建配置
- Hibernate的二级缓存技术 EhCache
- Hibernate+ehcache二级缓存配置
- Hibernate ehcache配置二级缓存
- Hibernate配置Ehcache二级缓存
- EhCache配置Hibernate二级缓存
- Hibernate+EhCache配置二级缓存
- Hibernate ehcache配置二级缓存
- Hibernate+EhCache配置二级缓存
- Hibernate+EHCache配置二级缓存
- Hibernate中ehcache二级缓存配置方法
- Hibernate JPA 中配置Ehcache二级缓存
- Hibernate JPA 中配置Ehcache二级缓存
- Hibernate JPA 中配置Ehcache二级缓存
- Hibernate ehcache配置二级缓存[加入自己的意见]
- struts2的接受form表单参数的方法
- SDUT 3915 从零开始的异世界生活
- Java + 线程系列之synchronized同步锁(五)
- 机器学习之决策树 进行时......
- bzoj1756: Vijos1083 小白逛公园
- maven工程中hibernate的二级缓存ehcache的配置
- 【数论】17.6.3 计数 题解
- 杨辉三角..........三种写法
- C++设计模式——适配器模式
- 利用LaTeX进行数学公式编辑
- ARC下需要注意的内存管理
- PAT B1045. 快速排序(25)
- 视频 api 收集
- c++与c之enum区别