1 jedis介绍

2 java连接Redis

1 导入jar包

2 连接实例

@Test
//获得单一的jedis对象操作数据库
public void test1(){ //1、获得连接对象 设置ip地址和端口
Jedis jedis = new Jedis("192.168.204.128", 6379); //2 、设置数据
jedis.set("name", "zhangsan"); //3 获得数据
String name = jedis.get("name");
System.out.println(name); //4 释放资源
jedis.close();
}

3 连接超时问题的处理

也可以直接使用下面的命令:开启端口的远程访问。

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

/etc/rc.d/init.d/iptables save

4 通过连接池获得连接

//通过jedis的pool获得jedis连接对象
@Test
public void test2(){
//0、创建池子的配置对象
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(30);//最大闲置个数
poolConfig.setMinIdle(10);//最小闲置个数
poolConfig.setMaxTotal(50);//最大连接数 //1、创建一个redis的连接池
JedisPool pool = new JedisPool(poolConfig, "192.168.186.131", 6379); //2、从池子中获取redis的连接资源
Jedis jedis = pool.getResource(); //3、操作数据库
jedis.set("xxx","yyyy");
System.out.println(jedis.get("xxx")); //4、关闭资源
jedis.close();
pool.close(); //实际开发中池子不要关闭,池子关闭了别人就没法使用了 }

4 连接池工具类

1 工具类代码

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; public class JedisPoolUtils { private static JedisPool pool = null; static{ //加载配置文件
InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
Properties pro = new Properties();
try {
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
} //获得池子对象
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大闲置个数
poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));//最小闲置个数
poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));//最大连接数
pool = new JedisPool(poolConfig,pro.getProperty("redis.url") , Integer.parseInt(pro.get("redis.port").toString()));
} //获得jedis资源的方法
public static Jedis getJedis(){
return pool.getResource();
}
}

2 配置文件

配置文件放在src目录下面:

redis.maxIdle=30
redis.minIdle=10
redis.maxTotal=100
redis.url=192.168.186.131
redis.port=6379

5 redis有密码的jedis连接方式

单机版

package cn.e3mall.jedis;

import org.junit.Test;

import redis.clients.jedis.Jedis;

/**
*
* @title:JedisTest
* @description:
* @author jepson
* @date 2018年6月3日 下午4:20:19
* @version 1.0
*/
public class JedisTest { @Test
public void testJedis(){
// 第一步:创建一个Jedis对象。需要指定服务端的ip及端口。
Jedis jedis = new Jedis("192.168.25.128", 6379);
//设置密码
jedis.auth("123456");
// 第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。
jedis.set("name", "殷桃丸子");
String result = jedis.get("name");
// 第三步:打印结果。
System.out.println(result);
// 第四步:关闭Jedis
jedis.close();
}
}

如果redis有密码,这里不指定密码的话,会报下面的异常

单机版-从连接池获取连接

@Test
public void testJedispool(){
//0、创建池子的配置对象
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(30);//最大闲置个数
poolConfig.setMinIdle(10);//最小闲置个数
poolConfig.setMaxTotal(50);//最大连接数 //1、创建一个redis的连接池
JedisPool pool = new JedisPool(poolConfig, "192.168.25.128", 6379); //2、从池子中获取redis的连接资源
Jedis jedis = pool.getResource();
jedis.auth("123456");//设置密码 //3、操作数据库
jedis.set("user","王五");
System.out.println(jedis.get("user")); //4、关闭资源
jedis.close();
pool.close(); //实际开发中池子不要关闭,池子关闭了别人就没法使用了 }

6 jedis连接redis集群版

补充知识点:redis-cli客户端连接Redis集群的方法

[root@admin redis01]# ./redis-cli -h 192.168.25.128 -p 7006 -c
@Test
public void testJedisCluster() throws Exception {
// 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("192.168.25.128", 7001));
nodes.add(new HostAndPort("192.168.25.128", 7002));
nodes.add(new HostAndPort("192.168.25.128", 7003));
nodes.add(new HostAndPort("192.168.25.128", 7004));
nodes.add(new HostAndPort("192.168.25.128", 7005));
nodes.add(new HostAndPort("192.168.25.128", 7006));
JedisCluster jedisCluster = new JedisCluster(nodes);
// 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。
jedisCluster.set("hello", "100");
String result = jedisCluster.get("hello");
// 第三步:打印结果
System.out.println(result);
// 第四步:系统关闭前,关闭JedisCluster对象。
jedisCluster.close();
}

7 封装JedisClient接口实现单机版和集群版通用

将常用的操作redis的方法提取出来一个接口,分别对应单机版和集群版创建两个实现类。

1 JedisClient接口的定义

package cn.e3mall.common.jedis;

import java.util.List;
import java.util.Map;
import java.util.Set; /**
* jedis操作redis的常用方法提取
* @title:JedisClient
* @description:
* @author jepson
* @date 2018年6月3日 下午7:52:31
* @version 1.0
*/
public interface JedisClient { //commons start
Boolean exists(String key);
Long expire(String key, int seconds);
Long ttl(String key);
Long persist(String key);
String type(String key);
Long del(String key);
String ping();
//commons end //String start
String set(String key, String value);
String get(String key);
String getSet(String key,String value);
Long incr(String key);
Long incrBy(String key,Long integer);
Double incrByFloat(String key,Double value);
Long decr(String key);
Long decrBy(String key,Long integer);
Long append(String key,String value);
//String类型的方法end //hash start;
Long hset(String key, String field, String value);
String hmset(String key,Map<String,String> map );
String hget(String key, String field);
List<String> hmget(String key, String... fields);
Map<String, String> hgetAll(String key);
Long hincrby(String key,String field,long value);
Long hlen(String key);
Set<String> hkeys(String key);
List<String> hvals(String key);
Long hdel(String key, String... fields);
Boolean hexists(String key, String field);
//hash end;
}

2 单机版的实现类

package cn.e3mall.common.jedis;

import java.util.List;
import java.util.Map;
import java.util.Set; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool; /**
* 单机版redis的方法
* @title:JedisClientPool
* @description:
* @author jepson
* @date 2018年6月3日 下午6:47:41
* @version 1.0
*/
public class JedisClientPool implements JedisClient { private JedisPool jedisPool; //连接池 private String password; //单机版密码 //get/set
public JedisPool getJedisPool() {
return jedisPool;
} public void setJedisPool(JedisPool jedisPool) {
this.jedisPool = jedisPool;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public Boolean exists(String key) {
Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Boolean result = jedis.exists(key);
jedis.close();
return result;
} @Override
public Long expire(String key, int seconds) {
Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.expire(key, seconds);
jedis.close();
return result;
} @Override
public Long ttl(String key) {
Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.ttl(key);
jedis.close();
return result;
} @Override
public Long persist(String key) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.persist(key);
jedis.close();
return result;
} @Override
public String type(String key) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
String result = jedis.type(key);
jedis.close();
return result;
} @Override
public Long del(String key) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.del(key);
jedis.close();
return result;
} @Override
public String ping() { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
String result = jedis.ping();
jedis.close();
return result;
} @Override
public String set(String key, String value) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
String result = jedis.set(key, value);
jedis.close();
return result;
} @Override
public String get(String key) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
String result = jedis.get(key);
jedis.close();
return result;
} @Override
public String getSet(String key, String value) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
String result = jedis.getSet(key, value);
jedis.close();
return result;
} @Override
public Long incr(String key) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.incr(key);
jedis.close();
return result;
} @Override
public Long incrBy(String key, Long integer) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.incrBy(key, integer);
jedis.close();
return result;
} @Override
public Double incrByFloat(String key, Double value) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Double result = jedis.incrByFloat(key, value);
jedis.close();
return result;
} @Override
public Long decr(String key) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.decr(key);
jedis.close();
return result;
} @Override
public Long decrBy(String key, Long integer) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.decrBy(key, integer);
jedis.close();
return result;
} @Override
public Long append(String key, String value) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.append(key, value);
jedis.close();
return result;
} @Override
public Long hset(String key, String field, String value) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.hset(key, field, value);
jedis.close();
return result;
} @Override
public String hmset(String key, Map<String, String> map) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
String result = jedis.hmset(key, map);
jedis.close();
return result;
} @Override
public String hget(String key, String field) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
String result = jedis.hget(key, field);
jedis.close();
return result;
} @Override
public List<String> hmget(String key, String... fields) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
List<String> result = jedis.hmget(key, fields);
jedis.close();
return result;
} @Override
public Map<String, String> hgetAll(String key) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Map<String,String> result = jedis.hgetAll(key);
jedis.close();
return result;
} @Override
public Long hincrby(String key, String field, long value) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.hincrBy(key, field, value);
jedis.close();
return result;
} @Override
public Long hlen(String key) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.hlen(key);
jedis.close();
return result;
} @Override
public Set<String> hkeys(String key) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Set<String> result = jedis.hkeys(key);
jedis.close();
return result;
} @Override
public List<String> hvals(String key) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
List<String> result = jedis.hvals(key);
jedis.close();
return result;
} @Override
public Long hdel(String key, String... fields) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Long result = jedis.hdel(key, fields);
jedis.close();
return result;
} @Override
public Boolean hexists(String key, String field) { Jedis jedis = jedisPool.getResource();
jedis.auth(password);
Boolean result = jedis.hexists(key, field);
jedis.close();
return result;
} }

3 集群版实现类

package cn.e3mall.common.jedis;

import java.util.List;
import java.util.Map;
import java.util.Set; import redis.clients.jedis.JedisCluster; /**
* redis集群redis客户端
* @title:JedisClientCluster
* @description:
* @author jepson
* @date 2018年6月3日 下午6:48:24
* @version 1.0
*/
public class JedisClientCluster implements JedisClient { private JedisCluster jedisCluster; public JedisCluster getJedisCluster() {
return jedisCluster;
} public void setJedisCluster(JedisCluster jedisCluster) {
this.jedisCluster = jedisCluster;
} @Override
public Boolean exists(String key) { return jedisCluster.exists(key);
} @Override
public Long expire(String key, int seconds) { return jedisCluster.expire(key, seconds);
} @Override
public Long ttl(String key) { return jedisCluster.ttl(key);
} @Override
public Long persist(String key) { return jedisCluster.persist(key);
} @Override
public String type(String key) { return jedisCluster.type(key);
} @Override
public Long del(String key) { return jedisCluster.del(key);
} @Override
public String ping() { return jedisCluster.ping();
} @Override
public String set(String key, String value) { return jedisCluster.set(key, value);
} @Override
public String get(String key) { return jedisCluster.get(key);
} @Override
public String getSet(String key, String value) { return jedisCluster.getSet(key, value);
} @Override
public Long incr(String key) { return jedisCluster.incr(key);
} @Override
public Long incrBy(String key, Long integer) { return jedisCluster.incrBy(key, integer);
} @Override
public Double incrByFloat(String key, Double value) { return jedisCluster.incrByFloat(key, value);
} @Override
public Long decr(String key) { return jedisCluster.decr(key);
} @Override
public Long decrBy(String key, Long integer) { return jedisCluster.decrBy(key, integer);
} @Override
public Long append(String key, String value) { return jedisCluster.append(key, value);
} @Override
public Long hset(String key, String field, String value) { return jedisCluster.hset(key, field, value);
} @Override
public String hmset(String key, Map<String, String> map) { return jedisCluster.hmset(key, map);
} @Override
public String hget(String key, String field) { return jedisCluster.hget(key, field);
} @Override
public List<String> hmget(String key, String... fields) { return jedisCluster.hmget(key, fields);
} @Override
public Map<String, String> hgetAll(String key) { return jedisCluster.hgetAll(key);
} @Override
public Long hincrby(String key, String field, long value) { return jedisCluster.hincrBy(key, field, value);
} @Override
public Long hlen(String key) { return jedisCluster.hlen(key);
} @Override
public Set<String> hkeys(String key) { return jedisCluster.hkeys(key);
} @Override
public List<String> hvals(String key) { return jedisCluster.hvals(key);
} @Override
public Long hdel(String key, String... field) { return jedisCluster.hdel(key, field);
} @Override
public Boolean hexists(String key, String field) { return jedisCluster.hexists(key, field);
} }

4 applicationContext-redis.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.2.xsd"> <!-- 加载配置文件 -->
<context:property-placeholder location="classpath:conf/db.properties" /> <!-- 连接redis单机版 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port}"/>
</bean>
<bean id="jedisClientPool" class="cn.e3mall.common.jedis.JedisClientPool">
<property name="jedisPool" ref="jedisPool"></property>
<property name="password" value="${redis.password}"></property>
</bean> <!-- 连接redis集群 -->
<!-- <bean id="jedisClientCluster" class="cn.e3mall.common.jedis.JedisClientCluster">
<property name="jedisCluster" ref="jedisCluster"/>
</bean>
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host1}"></constructor-arg>
<constructor-arg name="port" value="${redis.port1}"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host2}"></constructor-arg>
<constructor-arg name="port" value="${redis.port2}"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host3}"></constructor-arg>
<constructor-arg name="port" value="${redis.port3}"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host4}"></constructor-arg>
<constructor-arg name="port" value="${redis.port4}"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host5}"></constructor-arg>
<constructor-arg name="port" value="${redis.port5}"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host6}"></constructor-arg>
<constructor-arg name="port" value="${redis.port6}"></constructor-arg>
</bean>
</set>
</constructor-arg>
</bean> -->
</beans>

注意:单机版和集群版不能共存,使用单机版时注释掉集群版的配置。

使用集群版时把单机版的配置注释掉。

5 db.properties配置

# mysql数据库
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/e3mall?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root #redis单机版数据库
redis.password=123456
redis.host=192.168.25.128
redis.port=6379 #redis集群数据库
redis.host1=192.168.25.128
redis.port1=7001
redis.host2=192.168.25.128
redis.port2=7002
redis.host3=192.168.25.128
redis.port3=7003
redis.host4=192.168.25.128
redis.port4=7004
redis.host5=192.168.25.128
redis.port5=7005
redis.host6=192.168.25.128
redis.port6=7006

6 测试

package cn.e3mall.jedis;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.e3mall.common.jedis.JedisClient; /**
* 测试jedisclient
*
* @title:JedisClientTest
* @description:
* @author jepson
* @date 2018年6月3日 下午7:36:48
* @version 1.0
*/
public class JedisClientTest { @Test
public void testJedisClient() throws Exception {
// 初始化spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"classpath:spring/applicationContext-redis.xml");
// 从容器中获得JedisClient对象
JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
jedisClient.set("user", "lisi");
String string = jedisClient.get("user");
String ping = jedisClient.ping();
System.out.println(ping);
}
}

jedis入门教程的更多相关文章

  1. Redis入门教程(三)— Java中操作Redis

    在Redis的官网上,我们可以看到Redis的Java客户端众多 其中,Jedis是Redis官方推荐,也是使用用户最多的Java客户端. 开始前的准备 使用jedis使用到的jedis-2.1.0. ...

  2. 《Redis5.x入门教程》正式推出

    关注公众号CoderBuff回复"redis"可抢先获取<Redis5.x入门教程>PDF完整版 在<ElasticSearch6.x实战教程>之后,又斗胆 ...

  3. Spring Boot 2.x 缓存应用 Redis注解与非注解方式入门教程

    Redis 在 Spring Boot 2.x 中相比 1.5.x 版本,有一些改变.redis 默认链接池,1.5.x 使用了 jedis,而2.x 使用了 lettuce Redis 接入 Spr ...

  4. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  5. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  6. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  7. Content Security Policy 入门教程

    阮一峰文章:Content Security Policy 入门教程

  8. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  9. UE4新手引导入门教程

    请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf

随机推荐

  1. 设计模式8---适配器模式(Adapter)

    1. 适配器模式简介 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适用场景: 1.已经存在 ...

  2. 洛谷P2173 [ZJOI2012]网络(10棵lct与瞎jb暴力)

    有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构成的环. 在这个图上,你 ...

  3. 6、Semantic-UI之动画按钮样式

    6.1 动画按钮样式 在Semantic-UI中提供了三种动画样按钮式表,分别为: 左右移动 上下移动 淡入淡出   在实际开发中,很少使用这种动画按钮,根据实际情况使用,强制使用到页面中反而不太适合 ...

  4. 简单介绍Java的静态分派和动态分派

    最近复习JVM的知识,对于静态分派和动态分派的理解有点混乱,于是自己尝试写写代码,在分析中巩固知识. 有如下一段代码,请问每一段分别输出什么? package com.khlin.my.test; c ...

  5. ArcGis Android 10.2.6更新文档翻译

    ArcGis Android 10.2.6更新文档翻译 @[ArcGis Android|10.2.6|更新文档] 本文描述了ArcGIS Runtime SDK for Android 10.2.6 ...

  6. 织梦CMS让channelartlist标签支持currentstyle【转】

    打开include\taglib\channelartlist.lib.php找到 $pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]); ...

  7. C#设计模式--工厂模式和抽象工厂模式

    话说有三大潮牌公司一直相互PK,有一天举办了一个活动让这三大公司来一个PK,我们来看看哪家公司的上衣做出来好看穿得舒服 现在我们有一个上衣的抽象产品让三大公司来做 //抽象产品 public inte ...

  8. Linux使用私钥公钥(Public key)登录 - 免密码登录

    为了更安全.方便的登录Linux服务器,可以取消密码登录,使用私钥公钥的方式来登录,更方便也更安全. 生成密钥 借助Xshell可以很方便的生成和管理私钥,点击工具菜单,选择新建用户密钥生成向导: 直 ...

  9. Redis分布式锁方案

  10. webapi权限常见错误

    webapi权限常见错误 错误一: Response for preflight has invalid HTTP status code 405. 解决方案: 屏蔽配置文件中的如下代码 <!- ...