加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

SSM框架之整合EhCache

发布时间:2020-12-15 07:13:16 所属栏目:Java 来源:网络整理
导读:本文主要讲ssm框架整合EhCache。或许有人会问什么是ehcache。 关于EhCache的介绍和优劣,我想下面的解答足以让读者明白: EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开 源Java

本文主要讲ssm框架整合EhCache。或许有人会问什么是ehcache。

关于EhCache的介绍和优劣,我想下面的解答足以让读者明白:

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开 源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

优点:?
1. 快速?
2. 简单?
3. 多种缓存策略?
4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题?
5. 缓存数据会在虚拟机重启的过程中写入磁盘?
6. 可以通过RMI、可插入API等方式进行分布式缓存?
7. 具有缓存和缓存管理器的侦听接口?
8. 支持多缓存管理器实例,以及一个实例的多个缓存区域?
9. 提供Hibernate的缓存实现

缺点:?
1. 使用磁盘Cache的时候非常占用磁盘空间:这是因为DiskCache的算法简单,该算法简单也导致Cache的效率非常高。它只是对元素直接追加存储。因此搜索元素的时候非常的快。如果使用DiskCache的,在很频繁的应用中,很快磁盘会满。?
2. 不能保证数据的安全:当突然kill掉java的时候,可能会产生冲突,EhCache的解决方法是如果文件冲突了,则重建cache。这对于Cache 数据需要保存的时候可能不利。当然,Cache只是简单的加速,而不能保证数据的安全。如果想保证数据的存储安全,可以使用Bekeley DB Java Edition版本。这是个嵌入式数据库。可以确保存储安全和空间的利用率。

?

或许还有人很疑惑缓存,什么是缓存?为什么需要缓存?

引用百度百科的回答:

缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在用完后还是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给显卡运算芯片用的缓存,硬盘上也有16M或者32M的缓存。

或许还有人会问内存是什么?

引用百度百科的回答:

内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。

也许还人会骂我,说你怎么尽引用百度百科。

我的回答是,因为我对此也不知道怎么回答。

如果让我回答在开发中为什么需要缓存及其缓存的作用,我的回答是,对于有些数据,我只需查询一遍就可以,不需要再度查询,因为有缓存。就好比数据库优化,除了索引之外,还有就是将数据库里面的数据缓存起来,这样对于大规模数据,平常需要多次查询,导致耗费时间很长,性能差,但是我通过缓存,只需查询一次,当再次查询时,就非常快,对整个系统的响应和性能也不会有什么影响。当然了,当涉及到缓存的数据与实际数据库中的数据存在差异时,这里后续会讲采取怎样的方式解决这个问题。

另外建议软件开发的朋友们,有空多多去熟悉熟悉计算机相关的理论知识。正所谓有句话叫做:万变不离其宗。这个其宗在计算机中可以理解为算法与数据结构、操作系统、TCP/IP、计算机基础知识、编译原理等等。把握好这些,编程之路才能越走越长。

这也是一位朋友对我说的。

下面进入正题,关于SSM框架整合EhCache

?

sql脚本准备

CREATE TABLE `user` (
  `user_id` int(8) NOT NULL AUTO_INCREMENT COMMENT '用户主键',`login_code` varchar(20) NOT NULL COMMENT '用户编码(登录账户) 手机号 邮箱号',`user_name` varchar(20) NOT NULL COMMENT '用户名',`password` varchar(40) NOT NULL COMMENT '密码',`sex` int(2) NOT NULL COMMENT '性别',`identity_card` varchar(20) DEFAULT NULL COMMENT '身份证',`create_time` datetime NOT NULL COMMENT '创建时间',`create_by` varchar(10) NOT NULL COMMENT '创建人',`update_time` datetime NOT NULL COMMENT '更新时间',`update_by` varchar(10) NOT NULL COMMENT '更新人',`status` int(2) NOT NULL DEFAULT '0' COMMENT '状态:0注册新用户 1邮件认证用户 2管理员 3黑名单',PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

?

一、导入Maven依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.blog</groupId>
  <artifactId>Blog</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <properties>
		<!-- 文件拷贝时的编码 -->  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>  
        <!-- 编译时的编码 -->  
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding> 
		<spring.version>4.3.13.RELEASE</spring.version>
		<junit.version>4.12</junit.version>
		<druid.version>1.1.0</druid.version>
		<fastjson.version>1.2.8</fastjson.version>
		<mybaitsplus.version>2.1.8</mybaitsplus.version>
		<mysql.version>5.1.38</mysql.version>
		<log4j.version>1.2.17</log4j.version>
		<slf4j.version>1.7.19</slf4j.version>
		<aspectjweaver.version>1.8.8</aspectjweaver.version>
		<fileupload.version>1.3.1</fileupload.version>
		<jstl.version>1.2</jstl.version>
		<commons-io.version>2.5</commons-io.version>
		<commons-fileupload.version>1.3.1</commons-fileupload.version>
		<ruedigermoeller-fst.version>2.56</ruedigermoeller-fst.version>
		<json.version>20170516</json.version>
		<dozer.version>5.5.1</dozer.version>
		<poi.version>3.14</poi.version>
	</properties>

	<dependencies>
	



       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.1.46</version>
       </dependency>


       <dependency>
           <groupId>com.google.code.gson</groupId>
           <artifactId>gson</artifactId>
           <version>2.8.0</version>
       </dependency>
       <!-- kisso end -->

		<!-- JUnit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>
		 <dependency>
		 <!-- jsp -->
	    <groupId>javax.servlet.jsp</groupId>
	     <artifactId>jsp-api</artifactId>
	     <version>2.1</version>
	     <scope>compile</scope>
	    </dependency>
	    <!-- servlet -->
	    <dependency>
	      <groupId>javax.servlet</groupId>
	      <artifactId>javax.servlet-api</artifactId>
	      <version>3.1.0</version>
	      <scope>compile</scope>
	    </dependency>
    

		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
	      <groupId>org.springframework</groupId>
	      <artifactId>spring-test</artifactId>
		  <version>${spring.version}</version>
	      <scope>compile</scope>
   		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>

		<!-- Spring MVC -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>

		<!-- AOP -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>${aspectjweaver.version}</version>
		</dependency>

		<!-- FileUpload -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>${fileupload.version}</version>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>${jstl.version}</version>
		</dependency>

		<!-- Mybatis-Plus -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus</artifactId>
			<version>${mybaitsplus.version}</version>
		</dependency>

		<!-- Mysql -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.version}</version>
		</dependency>

		<!-- Druid -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>${druid.version}</version>
		</dependency>

		<!-- FastJson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>${fastjson.version}</version>
		</dependency>

		<!-- Log -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		
		
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.3.2</version>
		</dependency>
		
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>${commons-io.version}</version>
		</dependency>
		
		<dependency>
			<groupId>de.ruedigermoeller</groupId>
			<artifactId>fst</artifactId>
			<version>${ruedigermoeller-fst.version}</version>
		</dependency>
	   <dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.10</version>
		</dependency>
		
		<dependency>
			<groupId>commons-beanutils</groupId>
			<artifactId>commons-beanutils</artifactId>
			<version>1.9.3</version>
		</dependency>
		
				
		<!-- Json in java  -->
		<dependency>
			<groupId>org.json</groupId>
			<artifactId>json</artifactId>
			<version>20170516</version>
		</dependency>

		<!-- Email -->
		
		<dependency>
			<groupId>com.sun.mail</groupId>
			<artifactId>javax.mail</artifactId>
			<version>1.5.2</version>
			<scope>provided</scope>
		</dependency>
<!-- 		<dependency>
			<groupId>javax.activation</groupId>
			<artifactId>activation</artifactId>
			<version>1.1.1</version>
		</dependency> -->
		
		<!-- 条形码、二维码生成  -->
		<dependency>
			<groupId>com.google.zxing</groupId>
			<artifactId>core</artifactId>
			<version>3.3.0</version>
		</dependency>
		<dependency>
			<groupId>com.google.zxing</groupId>
			<artifactId>javase</artifactId>
			<version>3.3.0</version>
		</dependency>
		
		<!-- User Agent -->
		<dependency>
			<groupId>eu.bitwalker</groupId>
			<artifactId>UserAgentUtils</artifactId>
			<version>1.20</version>
		</dependency>
		
		<!-- Apache HTTP -->
		<dependency>
		  <groupId>org.apache.httpcomponents</groupId>
		  <artifactId>httpclient</artifactId>
		  <version>4.5.3</version>
		</dependency>
		
		<!-- Jsoup HTTP -->
		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.9.1</version>
		</dependency>
		
		<!-- 图片Meta获取 -->
		<dependency>
			<groupId>com.drewnoakes</groupId>
			<artifactId>metadata-extractor</artifactId>
			<version>2.9.1</version>
		</dependency>
		<!-- 缩略图工具  -->
		<dependency>
			<groupId>net.coobird</groupId>
			<artifactId>thumbnailator</artifactId>
			<version>0.4.8</version>
		</dependency>
		<!-- 图片验证码生成  -->
		<dependency>
			<groupId>com.bladejava</groupId>
			<artifactId>blade-patchca</artifactId>
			<version>1.0.5</version>
		</dependency>
		
		<!-- jackson -->		
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-core</artifactId>
		    <version>2.9.4</version>
		</dependency>
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-databind</artifactId>
		    <version>2.9.5</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml -->
		<dependency>
		    <groupId>com.fasterxml.jackson.dataformat</groupId>
		    <artifactId>jackson-dataformat-xml</artifactId>
		    <version>2.9.5</version>
		</dependency>
		
		<!-- Java xml -->
		<dependency>
			<groupId>dom4j</groupId>
			<artifactId>dom4j</artifactId>
			<version>1.6.1</version>
		</dependency>
		
		<!-- XPath xml -->
		<dependency>
			<groupId>jaxen</groupId>
			<artifactId>jaxen</artifactId>
			<version>1.1.6</version>
		</dependency>
		
		<!-- Snake YAML -->
		<dependency>
			<groupId>org.yaml</groupId>
			<artifactId>snakeyaml</artifactId>
			<version>1.17</version>
		</dependency>
		
	
		<!-- Bean To Bean copy -->
		<dependency>
			<groupId>net.sf.dozer</groupId>
			<artifactId>dozer</artifactId>
			<version>${dozer.version}</version>
		</dependency>
		
		<!-- POI Office Tools -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>${poi.version}</version>
			<exclusions>
				<exclusion>
					<artifactId>commons-codec</artifactId>
					<groupId>commons-codec</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>${poi.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml-schemas</artifactId>
			<version>${poi.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-scratchpad</artifactId>
			<version>${poi.version}</version>
		</dependency>
		
		
		<!-- pinyin4j -->
		<dependency>
		    <groupId>com.belerweb</groupId>
		    <artifactId>pinyin4j</artifactId>
		    <version>2.5.0</version>
		</dependency>
		
		<!-- Apache Tools Ant Tar Zip  -->
		<dependency>
			<groupId>org.apache.ant</groupId>
			<artifactId>ant</artifactId>
			<version>1.9.7</version>
		</dependency>
		
		<!-- File MimeType ContentType -->
		<dependency>
			<groupId>net.sf.jmimemagic</groupId>
			<artifactId>jmimemagic</artifactId>
			<version>0.1.3</version>
			<exclusions>
				<exclusion>
					<groupId>xerces</groupId>
					<artifactId>xercesImpl</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.codehaus.jackson</groupId>
					<artifactId>jackson-xc</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.codehaus.jackson</groupId>
					<artifactId>jackson-jaxrs</artifactId>
				</exclusion>
				<exclusion>
					<artifactId>log4j</artifactId>
					<groupId>log4j</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		
		  
  <!-- swagger -->  
	<dependency>    
	    <groupId>com.mangofactory</groupId>    
	    <artifactId>swagger-springmvc</artifactId>    
	    <version>1.0.2</version>    
	</dependency> 
	
	     <!-- hutool -->
      <dependency>
		    <groupId>cn.hutool</groupId>
		    <artifactId>hutool-all</artifactId>
		    <version>4.1.0</version>
	  </dependency>
	  
	    <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>2.10.4</version>
        </dependency>
		
		
		
	</dependencies>

	<build>
		<plugins>
		
			<!-- 指定编译版本 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			
			
		</plugins>
				<finalName>${project.artifactId}</finalName>
	</build>
	
		<repositories>
	
		<repository>
			<id>aliyun-repos</id>
			<name>Aliyun Repository</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public</url>
			<releases><enabled>true</enabled></releases>
			<snapshots><enabled>false</enabled></snapshots>
		</repository>
		
	</repositories>
	
	<pluginRepositories>
		
		<pluginRepository>
			<id>aliyun-repos</id>
			<name>Aliyun Repository</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public</url>
			<releases><enabled>true</enabled></releases>
			<snapshots><enabled>false</enabled></snapshots>
		</pluginRepository>
	</pluginRepositories>        
</project>

?

?

三、编写DAO

package com.blog.mapper;

import com.blog.entity.User;
import com.baomidou.mybatisplus.mapper.BaseMapper;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author youcong123
 * @since 2018-07-22
 */
public interface UserDao extends BaseMapper<User> {

}

?

七、编写DAO对应的XML

UserDao.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blog.mapper.UserDao">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.blog.entity.User">
        <id column="user_id" property="userId" />
        <result column="login_code" property="loginCode" />
        <result column="user_name" property="userName" />
        <result column="password" property="password" />
        <result column="sex" property="sex" />
        <result column="identity_card" property="identityCard" />
        <result column="create_time" property="createTime" />
        <result column="create_by" property="createBy" />
        <result column="update_time" property="updateTime" />
        <result column="update_by" property="updateBy" />
        <result column="status" property="status" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        user_id AS userId,login_code AS loginCode,user_name AS userName,password,sex,identity_card AS identityCard,create_time AS createTime,create_by AS createBy,update_time AS updateTime,update_by AS updateBy,status
    </sql>

</mapper>

?

spring-mvc.xml

 xmlns:context
       xmlns:mvc="http://www.springframework.org/schema/mvc"="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
       Controller包(自动注入) ="com.blog.controller"mvc:default-servlet-handler/>
    
      FastJson注入 mvc:annotation-driven>
        mvc:message-converters register-defaults="true">
     
            bean id="fastJsonHttpMessageConverter"
                  class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                property name="supportedMediaTypes">
                    list>
                     
                        value>text/html;charset=UTF-8>
                        >application/json;charset=UTF-8property>
            beanmvc:message-converters>
    >



     

     上传限制 ="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" 上传文件大小限制为31M,31*1024*1024 -->
        ="maxUploadSize" value="32505856"/>
    >
    

    
>

?


config.properties

validationQuery=SELECT 1
jdbc_url=jdbc:mysql://localhost:3306/blog_test?useUnicode=true&characterEncoding=UTF-8
jdbc_username=root
jdbc_password=1234

?

?

?

?

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读