激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring基于注解整合Redis完整實例

Spring基于注解整合Redis完整實例

2020-09-14 15:27liuyazhuang Java教程

這篇文章主要介紹了Spring基于注解整合Redis完整實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

在《redis之——spring整合redis》一文中,向大家介紹了如何將spring與redis整合起來,但不是基于注解的形式,很多同學都希望能夠通過注解的形式來簡單的將spring與redis整合起來,這樣,在使用的時候,只需要在相應的方法上加上注解,便可以使方法輕松的調用redis的緩存。那么今天就來向大家介紹如何用基于注解的形式來整合spring與redis。

一、項目搭建

今天,我們不使用hibernate來操作數據庫了,我們今天選擇的框架是: spring4(包括mvc、context、orm) + mybatis3,所以,我們今天的基礎架構是:spring4(包括mvc、context、orm) + mybatis3+redis

1、構建pom.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<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>lyz</groupid>
  <artifactid>lyz</artifactid>
  <version>1.0.0</version>
  <packaging>war</packaging>
  <name>lyz</name>
  <description>basic data platform</description>
 
  <properties>
    <project.build.sourceencoding>utf-8</project.build.sourceencoding>
    <spring.version>4.2.0.release</spring.version>
  </properties>
 
  <dependencies>
 
    <!-- spring mvc related.....start --> <!-- todo: replace jackson with fastjson -->
    <dependency>
      <groupid>org.springframework</groupid>
      <artifactid>spring-context</artifactid>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupid>org.springframework</groupid>
      <artifactid>spring-aop</artifactid>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupid>org.springframework</groupid>
      <artifactid>spring-webmvc</artifactid>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupid>org.springframework</groupid>
      <artifactid>spring-web</artifactid>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupid>javax.servlet</groupid>
      <artifactid>jstl</artifactid>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupid>commons-logging</groupid>
      <artifactid>commons-logging</artifactid>
      <version>1.1.3</version>
    </dependency>
    <dependency>
      <groupid>org.codehaus.jackson</groupid>
      <artifactid>jackson-mapper-asl</artifactid>
      <version>1.9.13</version>
    </dependency>
    <dependency>
      <groupid>com.fasterxml.jackson.core</groupid>
      <artifactid>jackson-annotations</artifactid>
      <version>2.6.1</version>
    </dependency>
    <dependency>
      <groupid>com.fasterxml.jackson.core</groupid>
      <artifactid>jackson-core</artifactid>
      <version>2.6.1</version>
    </dependency>
    <dependency>
      <groupid>com.fasterxml.jackson.core</groupid>
      <artifactid>jackson-databind</artifactid>
      <version>2.6.1</version>
    </dependency>
    <!-- spring mvc related.....end -->
 
    <!-- mybatis orm related.....start -->
    <dependency>
      <groupid>org.springframework</groupid>
      <artifactid>spring-orm</artifactid>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupid>org.mybatis</groupid>
      <artifactid>mybatis-spring</artifactid>
      <version>1.2.3</version>
    </dependency>
    <dependency>
      <groupid>mysql</groupid>
      <artifactid>mysql-connector-java</artifactid>
      <version>5.1.36</version>
    </dependency>
    <dependency>
      <groupid>org.mybatis</groupid>
      <artifactid>mybatis</artifactid>
      <version>3.3.0</version>
    </dependency>
    <dependency>
      <groupid>c3p0</groupid>
      <artifactid>c3p0</artifactid>
      <version>0.9.1.2</version>
    </dependency>
    <dependency>
      <groupid>org.slf4j</groupid>
      <artifactid>slf4j-log4j12</artifactid>
      <version>1.7.12</version>
    </dependency>
    <!-- mybatis orm related.....end -->
 
    <!-- project log related.....start -->
    <dependency>
      <groupid>log4j</groupid>
      <artifactid>log4j</artifactid>
      <version>1.2.17</version>
    </dependency>
    <!-- project log related.....end -->
 
    <!-- redis cache related.....start -->
    <dependency>
      <groupid>org.springframework.data</groupid>
      <artifactid>spring-data-redis</artifactid>
      <version>1.6.0.release</version>
    </dependency>
    <dependency>
      <groupid>redis.clients</groupid>
      <artifactid>jedis</artifactid>
      <version>2.7.3</version>
    </dependency>
    <!-- redis cache related.....end -->
  </dependencies>
 
  <build>
    <plugins>
      <plugin>
        <artifactid>maven-compiler-plugin</artifactid>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactid>maven-war-plugin</artifactid>
        <version>2.4</version>
        <configuration>
          <warsourcedirectory>webcontent</warsourcedirectory>
          <failonmissingwebxml>false</failonmissingwebxml>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

2、創建測試數據庫:lyz,測試數據表:user

?
1
2
3
4
5
6
7
8
9
10
drop database if exists `lyz`;
create database `lyz`;
drop table if exists `user`;
create table `user` (
 `id` int(10) unsigned not null auto_increment,
 `name` varchar(255) default null,
 `sex` varchar(255) default null,
 `age` int(11) default null,
 primary key (`id`)
) engine=innodb default charset=utf8;

3、創建實體類user

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package com.lyz.user.bean;
 
import java.io.serializable;
 
import org.codehaus.jackson.map.annotate.jsonserialize;
 
import com.fasterxml.jackson.databind.propertynamingstrategy;
import com.fasterxml.jackson.databind.annotation.jsonnaming;
 
/**
 * 用戶實體類
 * @author liuyazhuang
 *
 */
@jsonserialize
@jsonnaming(propertynamingstrategy.lowercasewithunderscoresstrategy.class
public class user implements serializable{
  private static final long serialversionuid = 1332643889208978231l;
   
  /**
   * id
   */
  private integer id;
   
  /**
   * 姓名
   */
  private string name;
   
  /**
   * 性別
   */
  private string sex;
   
  /**
   * 年齡
   */
  private integer age;
 
  public user() {
    super();
  }
   
  public user(integer id, string name) {
    super();
    this.id = id;
    this.name = name;
  }
 
  public user(string name, string sex, integer age) {
    super();
    this.name = name;
    this.sex = sex;
    this.age = age;
  }
 
  public integer getid() {
    return id;
  }
 
  public void setid(integer id) {
    this.id = id;
  }
 
  public string getname() {
    return name;
  }
 
  public void setname(string name) {
    this.name = name;
  }
 
  public string getsex() {
    return sex;
  }
 
  public void setsex(string sex) {
    this.sex = sex;
  }
 
  public integer getage() {
    return age;
  }
 
  public void setage(integer age) {
    this.age = age;
  }
 
  @override
  public string tostring() {
    return "user [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
  }
   
}

4、創建usermapper接口

此接口定義了與mybatis交互的接口協議,通過此接口與mybatis框架通信,由mybatis框架實現對數據庫的增刪改查操作。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.lyz.user.mapper;
 
import java.util.list;
 
import com.lyz.user.bean.user;
 
/**
 * usermapper接口
 * @author liuyazhuang
 *
 */
public interface usermapper {
   
  /**
   * 保存用戶
   * @param user
   */
  void saveuser(user user);
   
  /**
   * 獲取所有用戶列表
   * @return
   */
  list<user> getalluser();
   
  /**
   * 根據id查詢用戶信息
   * @param id
   * @return
   */
  user getuserbyid(integer id);
   
  /**
   * 更新用戶的名稱
   * @param user
   */
  void renameuser(user user);
   
  /**
   * 根據id刪除指定的用戶
   * @param id
   */
  void deleteuserbyid(integer id);
}

5、創建usermapper.xml

此文件中主要實現了usermapper接口定義的方法,即實現對數據庫的增刪改查操作。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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.lyz.user.mapper.usermapper" >
 
  <!-- 插入一條城市記錄 -->
  <insert id="saveuser" parametertype="com.lyz.user.bean.user">
    insert into user (name, sex, age)
    values ( #{name}, #{sex}, #{age} )
  </insert>
 
  <!-- 根據省份名稱返回該省份下的所有城市列表 -->
  <select id="getalluser" resulttype="com.lyz.user.bean.user">
    select u.id, u.name, u.sex, u.age from user u  
  </select>
   
  <!-- 根據 city_code 查找城市信息 -->
  <select id="getuserbyid" resulttype="com.lyz.user.bean.user" parametertype="java.lang.integer">
    select u.id, u.name, u.sex, u.age from user u where u.id = #{id}
  </select>
   
  <!-- 重命名城市 --> 
  <update id="renameuser" parametertype="com.lyz.user.bean.user">
    update user set name = #{name} where id = #{id}
  </update> 
   
  <!-- 刪除一個城市記錄 --> 
  <delete id="deleteuserbyid" parametertype="java.lang.integer"
    delete from user where id = #{id} 
  </delete> 
</mapper>

6、創建userdao接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.lyz.user.dao;
 
import java.util.list;
 
import com.lyz.user.bean.user;
 
/**
 * 用戶dao接口
 * @author liuyazhuang
 *
 */
public interface userdao {
   /**
   * 保存用戶
   * @param user
   */
  void saveuser(user user);
   
  /**
   * 獲取所有用戶列表
   * @return
   */
  list<user> getalluser();
   
  /**
   * 根據id查詢用戶信息
   * @param id
   * @return
   */
  user getbyid(integer id);
   
  /**
   * 更新用戶的名稱
   * @param user
   */
  void rename(user user);
   
  /**
   * 根據id刪除指定的用戶
   * @param id
   */
  void deletebyid(integer id);
}

7、創建userdao的實現類userdaoimpl

此類主要實現userdao中定義的接口,主要實現方法是注入usermapper接口的實例對象,調用usermapper接口實例的方法來實現相應的操作。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.lyz.user.dao.impl;
import java.util.list; 
import javax.annotation.resource; 
import org.springframework.stereotype.repository; 
import com.lyz.user.bean.user;
import com.lyz.user.dao.userdao;
import com.lyz.user.mapper.usermapper;
/**
 * dao實現類
 * @author liuyazhuang
 *
 */
@repository
public class userdaoimpl implements userdao {
  @resource
  private usermapper musermapper;
   
  @override
  public void saveuser(user user) {
    musermapper.saveuser(user);
  }
 
  @override
  public list<user> getalluser() {
    return musermapper.getalluser();
  }
 
  @override
  public user getbyid(integer id) {
    return musermapper.getuserbyid(id);
  }
 
  @override
  public void rename(user user) {
    musermapper.renameuser(user);
  }
 
  @override
  public void deletebyid(integer id) {
    musermapper.deleteuserbyid(id);
  }
 
 
}

8、創建userservice接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.lyz.user.service; 
import java.util.list; 
import com.lyz.user.bean.user; 
/**
 * 用戶service接口
 * @author liuyazhuang
 *
 */
public interface userservice {
   /**
   * 保存用戶
   * @param user
   */
  void saveuser(string name, string sex, integer age);
   
  /**
   * 獲取所有用戶列表
   * @return
   */
  list<user> getalluser();
   
  /**
   * 根據id查詢用戶信息
   * @param id
   * @return
   */
  user getuserbyid(integer id);
   
  /**
   * 更新用戶的名稱
   * @param user
   */
  void renameuser(string name, integer id);
   
  /**
   * 根據id刪除指定的用戶
   * @param id
   */
  void deleteuserbyid(integer id);
}

9、創建userservice接口實現類userserviceimpl

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.lyz.user.service.impl;
import java.util.list; 
import javax.annotation.resource; 
import org.springframework.cache.annotation.cacheevict;
import org.springframework.cache.annotation.cacheable;
import org.springframework.stereotype.service;
import org.springframework.transaction.annotation.propagation;
import org.springframework.transaction.annotation.transactional;
import com.lyz.user.bean.user;
import com.lyz.user.dao.userdao;
import com.lyz.user.service.userservice;
/**
 * userservice實現類
 * @author liuyazhuang
 *
 */
@service
@transactional(propagation=propagation.required, rollbackfor=exception.class)
public class userserviceimpl implements userservice {
  @resource
  private userdao muserdao;
   
  @override
  @cacheevict(value = { "saveuser"}, allentries = true)
  public void saveuser(string name, string sex, integer age) {
    user user = new user(name, sex, age);
    muserdao.saveuser(user);
  }
 
  @override
  @cacheable("getalluser")
  public list<user> getalluser() {
    return muserdao.getalluser();
  }
 
  @override
  @cacheable("getuserbyid")
  public user getuserbyid(integer id) {
    return muserdao.getbyid(id);
  }
 
  @override
  @cacheevict(value = { "getalluser", "getuserbyid" }, allentries = true)
  public void renameuser(string name, integer id) {
    muserdao.rename(new user(id, name));
  }
 
  @override
  @cacheevict(value = { "getalluser", "getuserbyid" }, allentries = true)
  public void deleteuserbyid(integer id) {
    muserdao.deletebyid(id);
  }
 
}

10、創建usercontroller

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package com.lyz.user.controller; 
import java.util.list; 
import org.apache.commons.logging.log;
import org.apache.commons.logging.logfactory;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestparam;
import org.springframework.web.bind.annotation.responsebody;
import com.lyz.user.bean.user;
import com.lyz.user.service.userservice; 
/**
 * usercontroller類
 * @author liuyazhuang
 *
 */
@controller
@requestmapping("/user")
public class usercontroller {
  private final log logger = logfactory.getlog(this.getclass());
  @autowired
  private userservice muserservice;
   
  /**
   * 保存用戶
   * @param name
   * @param sex
   * @param age
   * @return
   */
  @requestmapping("/save")
  @responsebody
  public integer save(@requestparam(value="name", defaultvalue="") string name,
      @requestparam(value="sex", defaultvalue="") string sex,
      @requestparam(value="age", defaultvalue="0") string age){
    logger.debug(name);
    muserservice.saveuser(name, sex, integer.parseint(age));
    return 1;
  }
   
  /**
   * 獲取所有用戶列表
   * @return
   */
  @requestmapping("/getall")
  @responsebody
  public object getalluser(){
    list<user> users = muserservice.getalluser();
    for(user u : users){
      logger.debug(u.tostring());
    }
    return users;
  }
  /**
   * 根據用戶id獲取用戶信息
   * @return
   */
  @requestmapping("/getuserbyid")
  @responsebody
  public object getuserbyid(@requestparam(value="id", defaultvalue="0") string id){
    user user = muserservice.getuserbyid(integer.parseint(id));
    logger.debug(user.tostring());
    return user;
  }
   
  /**
   * 根據用戶id獲取用戶信息
   * @return
   */
  @requestmapping("/renameuser")
  @responsebody
  public integer renameuser(@requestparam(value="id", defaultvalue="0") string id, 
               @requestparam(value="name", defaultvalue="") string name){
    logger.debug(id + "=========" + name);
    muserservice.renameuser(name, integer.parseint(id));
    return 1;
  }
  /**
   * 根據用戶id獲取用戶信息
   * @return
   */
  @requestmapping("/delete")
  @responsebody
  public integer delete(@requestparam(value="id", defaultvalue="0") string id){
    logger.debug(id);
    muserservice.deleteuserbyid(integer.parseint(id));
    return 1;
  }
}

到此,只要再創建相應的配置文件,我們就可以實現spring+mybatis框架的整合了,下面我們創建一個整合redis的關鍵類rediscacheconfig,這個類繼承cachingconfigurersupport。

11、創建rediscacheconfig類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.lyz.cache.redis; 
import java.lang.reflect.method; 
import org.springframework.cache.cachemanager;
import org.springframework.cache.annotation.cachingconfigurersupport;
import org.springframework.cache.annotation.enablecaching;
import org.springframework.cache.interceptor.keygenerator;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.data.redis.cache.rediscachemanager;
import org.springframework.data.redis.connection.redisconnectionfactory;
import org.springframework.data.redis.connection.jedis.jedisconnectionfactory;
import org.springframework.data.redis.core.redistemplate;
 
/**
 * 以spring與配置文件來管理的redis緩存配置類
 * @author liuyazhuang
 *
 */
@configuration
@enablecaching
public class rediscacheconfig extends cachingconfigurersupport {
   
  private volatile jedisconnectionfactory mjedisconnectionfactory;
  private volatile redistemplate<string, string> mredistemplate;
  private volatile rediscachemanager mrediscachemanager;
   
  public rediscacheconfig() {
    super();
  }
 
  public rediscacheconfig(jedisconnectionfactory mjedisconnectionfactory, redistemplate<string,string> mredistemplate,
      rediscachemanager mrediscachemanager) {
    super();
    this.mjedisconnectionfactory = mjedisconnectionfactory;
    this.mredistemplate = mredistemplate;
    this.mrediscachemanager = mrediscachemanager;
  }
 
  public jedisconnectionfactory redisconnectionfactory() {
    return mjedisconnectionfactory;
  }
 
  public redistemplate<string, string> redistemplate(redisconnectionfactory cf) {
    return mredistemplate;
  }
 
  public cachemanager cachemanager(redistemplate<?, ?> redistemplate) {
    return mrediscachemanager;
  }
   
  @bean
  public keygenerator customkeygenerator() {
    return new keygenerator() {
      @override
      public object generate(object o, method method, object... objects) {
        stringbuilder sb = new stringbuilder();
        sb.append(o.getclass().getname());
        sb.append(method.getname());
        for (object obj : objects) {
          sb.append(obj.tostring());
        }
        return sb.tostring();
      }
    };
  }
}

這個類中的所有屬性、字段都是在spring的配置文件lyz-applicationcontext.xml文件中注入的,稍后我們介紹如何注入這些屬性字段。

下面介紹每個配置文件的內容,注:所有的配置文件(除了web.xml),都是放在classpath路徑下的。

12、創建數據庫的配置文件jdbc.properties

?
1
2
3
4
5
jdbc.host=127.0.0.1
jdbc.database=lyz
jdbc.port=3306
jdbc.username=root
jdbc.password=root

13、創建log4j日志配置文件log4j.properties

?
1
2
3
4
5
6
7
8
9
10
11
# global logging configuration
log4j.rootlogger=warn,stdout
# console output...
log4j.appender.stdout=org.apache.log4j.consoleappender
log4j.appender.stdout.layout=org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionpattern=%d{yyyy-mm-dd hh:mm:ss} %-5p %c:%l - %m%n
# mybatis log
log4j.logger.com.lyz.user.mapper.usermapper=debug
# lyz log
log4j.logger.com.lyz.user.controller=debug
log4j.logger.com.lyz.user.service=debug

14、創建redis配置文件redis.properties

?
1
2
3
4
5
6
7
8
9
10
# redis settings
redis.host=192.168.157.130
redis.port=6379
redis.pass=liuyazhuang
redis.dbindex=0
redis.expiration=3000
redis.maxidle=300
redis.maxactive=600
redis.maxwait=1000
redis.testonborrow=true

15、創建springmvc的配置文件lyzmvc-servlet.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:p="http://www.springframework.org/schema/p"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemalocation="http://www.springframework.org/schema/beans
  
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
  
  <!-- class annotation related... start -->
  <context:component-scan base-package="com.lyz.*.controller" />
  <!-- class annotation related... end -->
  
  <!-- jsp page related... start -->
  <bean id="viewresolver"
    class="org.springframework.web.servlet.view.urlbasedviewresolver">
    <property name="viewclass"
      value="org.springframework.web.servlet.view.jstlview" />
    <property name="prefix" value="/web-inf/jsp/" />
    <property name="suffix" value=".jsp" />
  </bean>
  <!-- jsp page related... end -->
   
  <!-- rest json related... start -->
  <bean id="mappingjacksonhttpmessageconverter"
     class="org.springframework.http.converter.json.mappingjackson2httpmessageconverter">
    <property name="supportedmediatypes">
      <list>
        <value>application/json;charset=utf-8</value>
      </list>
    </property>
  </bean>
  <bean class="org.springframework.web.servlet.mvc.annotation.annotationmethodhandleradapter">
    <property name="messageconverters">
      <list>
        <ref bean="mappingjacksonhttpmessageconverter"/>
      </list>
    </property>
  </bean>
  <!-- rest json related... end -->
</beans>

16、創建mybatis配置文件mybatis-config.xml

?
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<!doctype configuration public "-//mybatis.org//dtd config 3.0//en" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <settings>
    <setting name="mapunderscoretocamelcase" value="true"/>
  </settings>
</configuration>

17、創建spring核心配置文件lyz-applicationcontext.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
   <!-- class annotation related... start -->
  <context:component-scan base-package="com.lyz"/>  
  <context:component-scan base-package="com.lyz.*.service" />
  <context:component-scan base-package="com.lyz.*.service.*" />
  <context:component-scan base-package="com.lyz.cache.redis" />
  <!-- class annotation related... end -->
  <context:annotation-config />
  <!-- mybatis related... start -->
  <bean class="org.springframework.beans.factory.config.propertyplaceholderconfigurer">
    <property name="locations">
      <list>
        <!-- 這里支持多種尋址方式:classpath和file -->
        <value>classpath:jdbc.properties</value>
        <value>classpath:redis.properties</value>
        <!-- 推薦使用file的方式引入,這樣可以將配置和代碼分離 -->
      </list>
    </property>
  </bean>
  <bean id="datasource" class="com.mchange.v2.c3p0.combopooleddatasource "
    destroy-method="close">
    <property name="driverclass" value="com.mysql.jdbc.driver" />
    <property name="jdbcurl" value="jdbc:mysql://${jdbc.host}:${jdbc.port}/${jdbc.database}?useunicode=true&characterencoding=utf8" />
    <property name="user" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="acquireincrement" value="1" />
    <property name="initialpoolsize" value="5" />
    <property name="maxpoolsize" value="20" />
    <property name="minpoolsize" value="5" />
    <property name="maxstatements" value="100" />
    <property name="testconnectiononcheckout" value="true" />
  </bean>
  <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean">
    <property name="datasource" ref="datasource" />
    <property name="configlocation" value="/web-inf/classes/mybatis-config.xml" />
  </bean>
  <bean class="org.mybatis.spring.mapper.mapperscannerconfigurer">
    <property name="basepackage" value="com.lyz.*.mapper"/>
  </bean>
  <!-- mybatis related... end -->
 
  <!-- transaction config related... start -->
  <tx:annotation-driven transaction-manager="transactionmanager" />
  <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
    <property name="datasource" ref="datasource" />
  </bean>
  <!-- transaction config related... end -->
   
  <!-- redis config start -->
  <!-- 配置jedispoolconfig實例 -->
  <bean id="poolconfig" class="redis.clients.jedis.jedispoolconfig">
    <property name="maxidle" value="${redis.maxidle}" />
    <property name="maxtotal" value="${redis.maxactive}" />
    <property name="maxwaitmillis" value="${redis.maxwait}" />
    <property name="testonborrow" value="${redis.testonborrow}" />
  </bean>
   
  <!-- 配置jedisconnectionfactory -->
  <bean id="jedisconnectionfactory" class="org.springframework.data.redis.connection.jedis.jedisconnectionfactory">
    <property name="hostname" value="${redis.host}"/>
    <property name="port" value="${redis.port}"/>
    <property name="password" value="${redis.pass}"/>
    <property name="database" value="${redis.dbindex}"/>
    <property name="poolconfig" ref="poolconfig"/>
  </bean>
   
  <!-- 配置redistemplate -->
  <bean id="redistemplate" class="org.springframework.data.redis.core.redistemplate">
    <property name="connectionfactory" ref="jedisconnectionfactory"/>
  </bean>
   
  <!-- 配置rediscachemanager -->
  <bean id="rediscachemanager" class="org.springframework.data.redis.cache.rediscachemanager">
     <constructor-arg name="redisoperations" ref="redistemplate" />
    <property name="defaultexpiration" value="${redis.expiration}"/>
  </bean>
   
  <!-- 配置rediscacheconfig -->
  <bean id="rediscacheconfig" class="com.lyz.cache.redis.rediscacheconfig">
    <constructor-arg ref="jedisconnectionfactory" />
    <constructor-arg ref="redistemplate" />
    <constructor-arg ref="rediscachemanager" />
  </bean>
   
  <!-- redis config end -->
   
</beans>

注:在lyz-applicationcontext.xml配置文件中,配置了spring的注解、注入了rediscacheconfig中的屬性字段。

18、完善web.xml文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  id="webapp_id" version="3.0">
  <display-name>lyz</display-name>
   
  <!-- character encoding related.....start --><!-- todo : 將 encodingfilter、sysparamsfilter 兩個過濾器交給 spring 管理 -->
  <filter>
    <filter-name>encodingfilter</filter-name>
    <filter-class>
        org.springframework.web.filter.characterencodingfilter 
    </filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceencoding</param-name>
        <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
     <filter-name>encodingfilter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- 除了加過濾器,由于tomcat默認編碼iso-8859-1,還需要修改 %tomcat%/conf/server.xml connector 標簽加屬性 uriencoding="utf-8" -->
  <!-- character encoding related.....end -->
 
  <context-param>
    <param-name>contextconfiglocation</param-name>
    <param-value>/web-inf/classes/*-applicationcontext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.contextloaderlistener</listener-class>
  </listener>
 
  <servlet>
    <servlet-name>lyzmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class>
    <init-param>
      <param-name>contextconfiglocation</param-name>
      <param-value>/web-inf/classes/*-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>lyzmvc</servlet-name>
    <url-pattern>*.json</url-pattern>
    <url-pattern>*.html</url-pattern>
  </servlet-mapping>
</web-app>

二、運行測試

這里我們使用apache jmeter來測試我們的程序,大家可以到下載apache jmeter。

1、啟動程序,使用jmeter調用保存用戶接口

首先按照圖示配置jmeter,其中訪問路徑和端口按照實際需要配置:

Spring基于注解整合Redis完整實例

點擊啟動按鈕,也就是上方的

Spring基于注解整合Redis完整實例

圖標:

點擊“查看結果樹”并打開“響應數據”選項:

Spring基于注解整合Redis完整實例

我們看到返回的結果是1,證明我們成功的調用了保存用戶的接口。

下面我們來看看數據庫表:

Spring基于注解整合Redis完整實例

已經將數據保存到數據庫了。

2、調用查詢用戶的接口

首先按照圖示配置jmeter,其中訪問路徑和端口按照實際需要配置:

Spring基于注解整合Redis完整實例

這些我們先看看redis服務器中是否存在相應的數據:

Spring基于注解整合Redis完整實例

此時,redis服務器中并沒有任何數據,下面我們點擊啟動,執行程序:

點擊“查看結果數”并打開“響應數據”,如下:

Spring基于注解整合Redis完整實例

返回了相應的數據。

我們再打開控制臺看看輸出的語句:

Spring基于注解整合Redis完整實例

說明首次獲取數據是從數據庫中獲取的。下面我們再看看redis緩存中是否存在數據了:

Spring基于注解整合Redis完整實例

說明首次獲取數據,從數據庫中取出的數據已經放在了redis緩存服務器中。

我們再次點擊jmeter的啟動按鈕,執行查詢用戶的操作:

查看jmeter的“查看結果數”中的“響應數據”選項:

Spring基于注解整合Redis完整實例

返回了正確的結果,同時,我們再看看eclipse的控制臺:

Spring基于注解整合Redis完整實例

已經沒有再從數據庫中獲取數據了,說明再次執行查詢用戶的操作,程序是直接從redis緩存中獲取的數據。

至此,spring基于注解整合redis介紹完畢。

三、源碼下載

完整示例代碼:spring_redis.rar

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/l1028386804/article/details/52141372

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人在线精品视频 | 国产日本在线播放 | 日本a∨精品中文字幕在线 国产精品片www48888 | 激情小视频在线观看 | 久久久成人精品视频 | 关键词 | 亚洲最大av网站 | 91精品国产综合久久男男 | 欧美亚洲国产日韩 | 国产乱淫a∨片免费视频 | 精品国产96亚洲一区二区三区 | 思思久而久而蕉人 | 午夜爽爽爽男女免费观看hd | 亚洲无马在线观看 | 成人免费午夜视频 | 成人在线视频在线观看 | 色中色综合网 | 午夜在线成人 | 欧美片一区二区 | 国产91精品久久久久久 | 热99热 | 视频h在线 | 日韩毛片网 | 99麻豆久久久国产精品免费 | 91精品久久香蕉国产线看观看 | 黄色大片免费看 | 国产精品7区 | 国产精品九九久久一区hh | 日韩视频一区在线 | 国产乱free国语对白 | 成人三区四区 | 手机免费看一级片 | 免费一级电影 | 夜夜夜操操操 | 久久99国产精品久久99 | 欧美精品一区二区久久 | 成人毛片免费看 | 日韩视频在线观看免费视频 | 国产毛毛片一区二区三区四区 | 欧美成人精品 | 欧美成人免费tv在线播放 |