1. 程式人生 > >SpringMVC+redis整合

SpringMVC+redis整合

在網路上有一個很多人轉載的springmvc+redis整合的案例,不過一直不完整,也是被各種人裝來轉去,現在基本將該框架搭建起來。

1

2

3

4

5

6

7

package com.pudp.bae.base;

import java.io.Serializable;

public abstract class BaseModel implements Serializable{

}

1

2

3

4

5

6

7

8

9

10

11

12

13

package com.pudp.bae.base;

import java.util.Map;

import org.springframework.web.servlet.ModelAndView;

public class BaseMultiController {

protected ModelAndView toView(final String url,final Map<String,Object> map)

{  

ModelAndView  view = new ModelAndView(url);

return view;

}

}

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

package

 com.pudp.bae.base;

import java.io.Serializable;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.serializer.RedisSerializer;

public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable>  {

@Autowired

protected RedisTemplate<K,V> redisTemplate ;

/**

* 設定redisTemplate

* @param redisTemplate the redisTemplate to set

*/ 

public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) { 

this.redisTemplate = redisTemplate; 

/**

* 獲取 RedisSerializer

* <br>------------------------------<br>

*/ 

protected RedisSerializer<String> getRedisSerializer() { 

return redisTemplate.getStringSerializer(); 

}

}

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

package com.pudp.bae.controller;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.servlet.ModelAndView;

import com.pudp.bae.base.BaseMultiController;

import com.pudp.bae.model.Member;

import com.pudp.bae.service.MemberService;

@Controller

@RequestMapping(value = "/member")

public class MemberController extends BaseMultiController {

@Autowired

private MemberService memberService;

public void setMemberService(MemberService memberService) {

this.memberService = memberService;

}

@RequestMapping(value = { "/add""/add.html" }, method = { RequestMethod.GET })

public ModelAndView add(HttpServletRequest request,

HttpServletResponse response) {

Map<String, Object> map = new HashMap<String, Object>();

Member member = new Member();

member.setId("1");

member.setNickname("guoxiaoming");

this.memberService.add(member);

return toView("add", map);

}

@RequestMapping(value = { "/add""/add.html" }, method = { RequestMethod.POST })

public ModelAndView addMember(HttpServletRequest request,

HttpServletResponse response,

@ModelAttribute("member") Member member) {

Map<String, Object> map = new HashMap<String, Object>();

System.out.println(member);

map.put("message""成功新增資料到庫," + member);

this.memberService.add(member);

return toView("message", map);

}

@RequestMapping(value = { "/{id:\\d+}/query""/{id:\\d+}/query.html" }, method = {

RequestMethod.GET, RequestMethod.POST })

public ModelAndView queryMember(HttpServletRequest request,

HttpServletResponse response, @PathVariable("id") String id) {

Map<String, Object> map = new HashMap<String, Object>();

System.out.println(id);

Member member = this.memberService.get(id);

if (null != member) {

map.put("message""查詢Id=" + id + "的使用者名稱為:" + member.getNickname());

else {

map.put("message""沒有查詢到與Id=" + id + "相關的資料");

}

return toView("message", map);

}

@RequestMapping(value = { "/{id:\\d+}/delete""/{id:\\d+}/delete.html" }, method = {

RequestMethod.GET, RequestMethod.POST })

public ModelAndView deleteMember(HttpServletRequest request,

HttpServletResponse response, @PathVariable("id") String id) {

Map<String, Object> map = new HashMap<String, Object>();

try {

this.memberService.delete(id);

map.put("message""刪除Id為" + id + "的使用者成功.");

catch (Exception e) {

e.printStackTrace();

map.put("message""刪除Id為" + id + "的使用者失敗, " + e.getMessage());

}

return toView("message", map);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package com.pudp.bae.dao.redis;

import java.util.List;

import com.pudp.bae.model.Member;

public interface MemberDao {

boolean add(Member member);

abstract boolean add(List<Member> list);

void delete(String key);

Member get(String keyId);

}

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

package com.pudp.bae.dao.redis;

import java.util.ArrayList;

import java.util.List;

import org.springframework.dao.DataAccessException;

import org.springframework.data.redis.connection.RedisConnection;

import org.springframework.data.redis.core.RedisCallback;

import org.springframework.data.redis.serializer.RedisSerializer;

import org.springframework.stereotype.Repository;

import org.springframework.util.Assert;

import com.pudp.bae.base.RedisGeneratorDao;

import com.pudp.bae.model.Member;

@Repository(value="memberDao")

public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{

/**

* 新增物件

*/

@Override

public boolean add(final Member member) { 

boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { 

public Boolean doInRedis(RedisConnection connection) 

throws DataAccessException { 

RedisSerializer<String> serializer = getRedisSerializer(); 

byte[] key  = serializer.serialize(member.getId()); 

byte[] name = serializer.serialize(member.getNickname()); 

return connection.setNX(key, name); 

}); 

return result; 

/**

* 新增集合

*/

@Override

public boolean add(final List<Member> list) {

Assert.notEmpty(list); 

boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { 

public Boolean doInRedis(RedisConnection connection) 

throws DataAccessException { 

RedisSerializer<String> serializer = getRedisSerializer(); 

for (Member member : list) { 

byte[] key  = serializer.serialize(member.getId()); 

byte[] name = serializer.serialize(member.getNickname()); 

connection.setNX(key, name); 

return true

}, falsetrue); 

return result;

/**

* 刪除物件 ,依賴key

*/

@Override

public void delete(String key) { 

List<String> list = new ArrayList<String>(); 

list.add(key); 

delete(list); 

/**

* 刪除集合 ,依賴key集合

*/

public void delete(List<String> keys) { 

redisTemplate.delete(keys); 

/**

* 修改物件

*/

public boolean update(final Member member) { 

String key = member.getId(); 

if (get(key) == null) { 

throw new NullPointerException("資料行不存在, key = " + key); 

boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { 

public Boolean doInRedis(RedisConnection connection) 

throws DataAccessException { 

RedisSerializer<String> serializer = getRedisSerializer(); 

byte[] key  = serializer.serialize(member.getId()); 

byte[] name = serializer.serialize(member.getNickname()); 

connection.set(key, name); 

return true

}); 

return result; 

/**

* 根據key獲取物件

*/

@Override

public Member get(final String keyId) { 

Member result = redisTemplate.execute(new RedisCallback<Member>() { 

public Member doInRedis(RedisConnection connection) 

throws DataAccessException { 

RedisSerializer<String> serializer = getRedisSerializer(); 

byte[] key = serializer.serialize(keyId); 

byte[] value = connection.get(key); 

if (value == null) { 

return null

String nickname = serializer.deserialize(value); 

return new Member(keyId, nickname); 

}); 

return result; 

}

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

package com.pudp.bae.model;

import com.pudp.bae.base.BaseModel;

public class Member extends BaseModel{

private static final long serialVersionUID = -1959528436584592183L;

private String id;

private String nickname;

public Member(){}

public Member(String id, String nickname){

this.setId(id);

this.setNickname(nickname);

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getNickname() {

return nickname;

}

public void setNickname(String nickname) {

this.nickname = nickname;

}

}

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

package com.pudp.bae.service;

import javax.annotation.Resource;

import com.pudp.bae.dao.redis.MemberDao;

import com.pudp.bae.model.Member;

public class MemberService {

@Resource(name="memberDao")

private MemberDao memberDao;

public void setMemberDao(MemberDao memberDao)

{

this.memberDao = memberDao;

}

public void add(Member member){

memberDao.add(member);

}

public void delete(String id){

memberDao.delete(id);

}

public Member get(String id)

{

return memberDao.get(id);

}

}

redis-context.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

<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:tx="http://www.springframework.org/schema/tx"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

">

<!-- scanner redis properties  -->

<context:property-placeholder location="/WEB-INF/property/redis.properties" />

<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"

<property name="maxIdle" value="${redis.maxIdle}" /> 

<property name="maxActive" value="${redis.maxActive}" /> 

<property name="maxWait" value="${redis.maxWait}" /> 

<property name="testOnBorrow" value="${redis.testOnBorrow}" /> 

</bean> 

<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" 

p:host-name="${redis.host}"

p:port="${redis.port}"

p:password="${redis.pass}" 

p:pool-config-ref="poolConfig"/> 

<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"

<property name="connectionFactory"   ref="connectionFactory" /> 

</bean>  

</beans> 

spring-context.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

<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"

xmlns:util="http://www.springframework.org/schema/util"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 

http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd         

http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

<!-- 啟用@Controller模式 -->

<mvc:annotation-driven />

<!-- 對包中的所有類進行掃描,以完成Bean建立和自動依賴注入的功能 需要更改 -->

<context:component-scan base-package="com.pudp.bae.*" />

<bean id="memberService" class="com.pudp.bae.service.MemberService"/>

<!-- 引入同文件夾下的redis屬性配置檔案 -->

<import resource="redis-context.xml"/>

</beans>

spring-mvc.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<?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:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<!-- 配置檢視解析器,把控制器的邏輯視訊對映為真正的檢視 -->

<!-- /WEB-INF/jsp/start.jsp -->

<bean 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>

</beans>

redis.properties

1

2

3

4

5

6

7

8

9

10

11

# Redis settings

#redis.host=192.168.20.101

#redis.port=6380

#redis.pass=foobared

redis.host=127.0.0.1

redis.port=6379

redis.pass=xx

redis.maxIdle=300

redis.maxActive=600

redis.maxWait=1000

redis.testOnBorrow=true

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

53

54

55

56

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" aaxmlns="http://java.sun.com/xml/ns/j2ee"

aaxmlns:xsi="w3.org/2001/XMLSchema-instance"

aaxsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>SpringMVCRedis</display-name>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/context/spring-context.xml</param-value>

</context-param>

<filter>

<filter-name>SpringEncodingFilter</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>SpringEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<servlet>

<servlet-name>mvc</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet

</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/context/spring-mvc.xml</param-value>

</init-param>

<load-on-startup>2</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>mvc</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>