博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring boot 、swagger、c3p0、mybatis和redis 整合
阅读量:4981 次
发布时间:2019-06-12

本文共 29730 字,大约阅读时间需要 99 分钟。

文件路径

              

 

 

添加依赖

4.0.0
wonder
skyRainbow
1.0-SNAPSHOT
war
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.1.1
mysql
mysql-connector-java
org.apache.tomcat.embed
tomcat-embed-jasper
javax.servlet
jstl
io.springfox
springfox-swagger2
2.2.2
io.springfox
springfox-swagger-ui
2.2.2
c3p0
c3p0
0.9.1.2
org.springframework.boot
spring-boot-starter-redis
1.4.7.RELEASE
src/main/java
**/*.xml
**/*.properties
org.springframework.boot
spring-boot-maven-plugin

添加c3p0数据源文件和swagger的启动文件

package lf.config;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import javax.sql.DataSource;@Configurationpublic class DatasourceConfiguration {    @Bean(name = "dataSource")    @Qualifier(value = "dataSource")    @Primary    @ConfigurationProperties(prefix = "c3p0")    public DataSource dataSource()    {        return DataSourceBuilder.create().type(com.mchange.v2.c3p0.ComboPooledDataSource.class).build();    }}
package lf.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.context.request.async.DeferredResult;import springfox.documentation.service.ApiInfo;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;import static com.google.common.base.Predicates.or;import static springfox.documentation.builders.PathSelectors.regex;@Configuration@EnableSwagger2public class SwaggerConfig {    @Bean    public Docket api_lf(){        return  new Docket(DocumentationType.SWAGGER_2)                .groupName("api_lf")                .genericModelSubstitutes(DeferredResult.class)                .useDefaultResponseMessages(false)                .forCodeGeneration(false)                .pathMapping("/")                .select()                .paths(or(regex("/lf/.*")))                .build()                .apiInfo(apiInfo());    }    /**     *  构建api文档详细信息     */    private ApiInfo apiInfo() {        ApiInfo apiInfo = new ApiInfo(                "甘雨路 API",// 标题                "API 描述说明",//描述                "1.0",//版本                "NO terms of service",                "lf@qq.com",// 创建人                "The Apache License, Version 2.0",                "http://www.apache.org/licenses/LICENSE-2.0.html"        );        return apiInfo;    }}

添加控制层

package lf.controller;import io.swagger.annotations.Api;import io.swagger.annotations.ApiParam;import lf.entity.BsdUser;import lf.service.BsdUserSerive;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import javax.annotation.Resource;import java.util.Date;@Controller@RequestMapping(value="${modulePath}/page")@Api(description = "页面跳转控制器")public class PageController {    @Resource    private BsdUserSerive userSerive;    /**     * 进入公司主页     */    @RequestMapping(value = "/company",method = RequestMethod.GET)    public String gotoCompanyPage(Model model,@RequestParam @ApiParam("用户id") Long id){        BsdUser user = userSerive.getUserById(id);        model.addAttribute("time",new Date());        model.addAttribute("loginName",user.getName());        return "main";    }}
package lf.controller;import io.swagger.annotations.*;import lf.entity.BsdUser;import lf.service.BsdUserSerive;import lf.utils.CommonDTO;import lf.utils.CommonUtil;import lf.utils.redis.RedisUtil;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource;@Api(description = "用户控制器")//swagger注解用于类@Controller // 控制器注解@RequestMapping(value="${modulePath}/user")public class UserController {    @Resource    private RedisUtil redisUtil;    @Resource    private BsdUserSerive userSerive;    @ResponseBody    @RequestMapping(value = "/info",method = RequestMethod.GET)    public CommonDTO
getUserbyId(@RequestParam @ApiParam("用户id") Long id){ CommonDTO
detailDTO = new CommonDTO<>(0,1); try { BsdUser user = null; // 从缓存中获取数据 user = (BsdUser)redisUtil.get(CommonUtil.USER_INFO_KEY + id); if (user == null){ user = userSerive.getUserById(id); // 将数据存入缓存 redisUtil.set(CommonUtil.USER_INFO_KEY + id,user); System.out.println("从数据库获取的数据"); }else { System.out.println("从缓存中获取数据"); } //BsdUser user = userSerive.getUserById(id); detailDTO.setData(user); } catch (Exception e) { e.printStackTrace(); detailDTO.setStatus(1); detailDTO.setCode(400); detailDTO.setMsg("获取用户信息异常:"+e.getMessage()); } return detailDTO; }}

添加实体类

package lf.entity;import com.fasterxml.jackson.annotation.JsonFormat;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import java.io.Serializable;import java.math.BigDecimal;import java.util.Date;@ApiModel(description = "用户实体")public class BsdUser implements Serializable {    @ApiModelProperty("主键")    private Long id;    @ApiModelProperty("组织id")    private Long orgId;    @ApiModelProperty("用户类型(0,品牌商1,服务商2,零售商,3客服)")    private Integer userType;    @ApiModelProperty("登录名")    private String loginName;    @ApiModelProperty("电话")    private String phone;    @ApiModelProperty("姓名")    private String name;    @ApiModelProperty("简称")    private String shortName;    @ApiModelProperty("密码")    private String password;    @ApiModelProperty("联系人")    private String contactUserName;    @ApiModelProperty("地址")    private String address;    @ApiModelProperty("经度")    private BigDecimal longitude;    @ApiModelProperty("纬度")    private BigDecimal latitude;    @ApiModelProperty("级别(0,普通会员,1,一级会员,2,二级会员,3三级会员,4,四级会员,5,五级会员)")    private Integer level;    @ApiModelProperty("状态(0,无效,1有效,2未审核,3审核未通过)")    private Integer state;    @ApiModelProperty("银行卡")    private String bankCard;    @ApiModelProperty("总积分")    private Long totalPoints;    @ApiModelProperty("上级组织id")    private Long superiorId;    @ApiModelProperty("创建人id")    private Long createdBy;    @ApiModelProperty("最后更新人")    private Long lastUpdatedBy;    @ApiModelProperty("创建日期")    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")    private Date createdDate;    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")    @ApiModelProperty("最后更新日期")    private Date lastUpdatedDate;    @ApiModelProperty("软删除标志")    private Integer removeFlag;    @ApiModelProperty("图片地址")    private String imgUrl;    @ApiModelProperty("消费总金额")    private BigDecimal totalPaymentAmount;    @ApiModelProperty("佣金")    private BigDecimal commission;    @ApiModelProperty("运费")    private BigDecimal freight;    @ApiModelProperty("编号")    private String code;    @ApiModelProperty("已经支付定金")    private Long depositPaid;    @ApiModelProperty("注册信息附件信息传")    private String registerAttachmentUrl;    @ApiModelProperty("支付密码")    private String payPassWord;    @ApiModelProperty("钱包余额")    private BigDecimal balance;    @ApiModelProperty("现金卷余额")    private BigDecimal cashRoll;    private static final long serialVersionUID = 1L;    public Long getId() {        return id;    }    public void setId(Long id) {        this.id = id;    }    public Long getOrgId() {        return orgId;    }    public void setOrgId(Long orgId) {        this.orgId = orgId;    }    public Integer getUserType() {        return userType;    }    public void setUserType(Integer userType) {        this.userType = userType;    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code == null ? null : code.trim();    }    public String getLoginName() {        return loginName;    }    public void setLoginName(String loginName) {        this.loginName = loginName == null ? null : loginName.trim();    }    public String getPhone() {        return phone;    }    public void setPhone(String phone) {        this.phone = phone == null ? null : phone.trim();    }    public String getShortName() {        return shortName;    }    public void setShortName(String shortName) {        this.shortName = shortName == null ? null : shortName.trim();    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name == null ? null : name.trim();    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password == null ? null : password.trim();    }    public String getContactUserName() {        return contactUserName;    }    public void setContactUserName(String contactUserName) {        this.contactUserName = contactUserName == null ? null : contactUserName.trim();    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address == null ? null : address.trim();    }    public BigDecimal getLongitude() {        return longitude;    }    public void setLongitude(BigDecimal longitude) {        this.longitude = longitude;    }    public String getRegisterAttachmentUrl() {        return registerAttachmentUrl;    }    public void setRegisterAttachmentUrl(String registerAttachmentUrl) {        this.registerAttachmentUrl = registerAttachmentUrl == null ? null : registerAttachmentUrl.trim();    }    public BigDecimal getLatitude() {        return latitude;    }    public void setLatitude(BigDecimal latitude) {        this.latitude = latitude;    }    public Integer getLevel() {        return level;    }    public void setLevel(Integer level) {        this.level = level;    }    public String getImgUrl() {        return imgUrl;    }    public void setImgUrl(String imgUrl) {        this.imgUrl = imgUrl == null ? null : imgUrl.trim();    }    public Integer getState() {        return state;    }    public void setState(Integer state) {        this.state = state;    }    public String getBankCard() {        return bankCard;    }    public void setBankCard(String bankCard) {        this.bankCard = bankCard == null ? null : bankCard.trim();    }    public BigDecimal getTotalPaymentAmount() {        return totalPaymentAmount;    }    public void setTotalPaymentAmount(BigDecimal totalPaymentAmount) {        this.totalPaymentAmount = totalPaymentAmount;    }    public Long getTotalPoints() {        return totalPoints;    }    public void setTotalPoints(Long totalPoints) {        this.totalPoints = totalPoints;    }    public Long getSuperiorId() {        return superiorId;    }    public void setSuperiorId(Long superiorId) {        this.superiorId = superiorId;    }    public BigDecimal getCommission() {        return commission;    }    public void setCommission(BigDecimal commission) {        this.commission = commission;    }    public BigDecimal getFreight() {        return freight;    }    public void setFreight(BigDecimal freight) {        this.freight = freight;    }    public Long getDepositPaid() {        return depositPaid;    }    public void setDepositPaid(Long depositPaid) {        this.depositPaid = depositPaid;    }    public String getPayPassWord() {        return payPassWord;    }    public void setPayPassWord(String payPassWord) {        this.payPassWord = payPassWord == null ? null : payPassWord.trim();    }    public BigDecimal getBalance() {        return balance;    }    public void setBalance(BigDecimal balance) {        this.balance = balance;    }    public BigDecimal getCashRoll() {        return cashRoll;    }    public void setCashRoll(BigDecimal cashRoll) {        this.cashRoll = cashRoll;    }    public Long getCreatedBy() {        return createdBy;    }    public void setCreatedBy(Long createdBy) {        this.createdBy = createdBy;    }    public Date getCreatedDate() {        return createdDate;    }    public void setCreatedDate(Date createdDate) {        this.createdDate = createdDate;    }    public Long getLastUpdatedBy() {        return lastUpdatedBy;    }    public void setLastUpdatedBy(Long lastUpdatedBy) {        this.lastUpdatedBy = lastUpdatedBy;    }    public Date getLastUpdatedDate() {        return lastUpdatedDate;    }    public void setLastUpdatedDate(Date lastUpdatedDate) {        this.lastUpdatedDate = lastUpdatedDate;    }    public Integer getRemoveFlag() {        return removeFlag;    }    public void setRemoveFlag(Integer removeFlag) {        this.removeFlag = removeFlag;    }}

添加mapper层

package lf.mapper;import lf.entity.BsdUser;import org.mapstruct.Mapper;import java.math.BigDecimal;import java.util.List;import java.util.Map;public interface BsdUserMapper{    /**     * 根据用户id获取用户信息     * @param id     * @return     */    public BsdUser getUserById(Long id);}

添加mapper的xml文件

id, org_id, user_type, code, login_name, phone, name,short_name,register_attachment_url,password, contact_user_name, address, longitude, latitude, level, img_url, state, bank_card, total_payment_amount,commission,freight, total_points, superior_id, created_by, created_date, last_updated_by, last_updated_date, remove_flag, deposit_paid, pay_pass_word, balance, cash_roll

添加service层和实现类

package lf.service;import lf.entity.BsdUser;public interface BsdUserSerive {    /**     * 根据用户id获取用户     * @param id     * @return     */    public BsdUser getUserById(Long id);}
package lf.service.impl;import lf.entity.BsdUser;import lf.mapper.BsdUserMapper;import lf.service.BsdUserSerive;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import javax.annotation.Resource;@Servicepublic class BsdUserSeriveImpl implements BsdUserSerive{    @Autowired    private BsdUserMapper userMapper;    /**     * 根据用户id获取用户信息     * @param id     * @return     */    @Override    public BsdUser getUserById(Long id) {        return userMapper.getUserById(id);    }}

添加工具类

package lf.utils.redis;import org.apache.log4j.Logger;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.core.*;import java.io.Serializable;import java.util.Set;import java.util.concurrent.TimeUnit;/** * redis cache 工具类 * */public final class RedisUtil {    private Logger logger = Logger.getLogger(RedisUtil.class);    private RedisTemplate
redisTemplate; private String redisIp; /** * 批量删除对应的value * * @param keys */ public void remove(final String... keys) { for (String key : keys) { remove(key); } } /** * 批量删除key * * @param pattern */ public void removePattern(final String pattern) { Set
keys = redisTemplate.keys(pattern); if (keys.size() > 0) redisTemplate.delete(keys); } /** * 删除对应的value * * @param key */ public void remove(final String key) { if (exists(key)) { redisTemplate.delete(key); } } /** * 判断缓存中是否有对应的value * * @param key * @return */ public boolean exists(final String key) { return redisTemplate.hasKey(key); } /** * 读取缓存 * * @param key * @return */ public Object get(final String key) {// LogUtil.error("-----------------------------redisIp"+redisIp);// System.err.println("-----------------------------redisIp"+redisIp); Object result = null; ValueOperations
operations = redisTemplate.opsForValue(); result = operations.get(key); return result; } /** * 写入缓存 * * @param key * @param value * @return */ public boolean set(final String key, Object value) {// LogUtil.error("-----------------------------redisIp"+redisIp);// System.err.println("-----------------------------redisIp" + redisIp); boolean result = false; try { ValueOperations
operations = redisTemplate.opsForValue(); operations.set(key, value); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } /** * 写入缓存 * * @param key * @param value * @return */ public boolean set(final String key, Object value, Long expireTime) {// LogUtil.error("-----------------------------redisIp"+redisIp);// System.err.println("-----------------------------redisIp"+redisIp); boolean result = false; try { ValueOperations
operations = redisTemplate.opsForValue(); operations.set(key, value); redisTemplate.expire(key, expireTime, TimeUnit.SECONDS); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } public void setRedisTemplate(RedisTemplate
redisTemplate) { this.redisTemplate = redisTemplate; } public String getRedisIp() { return redisIp; } public void setRedisIp(String redisIp) { this.redisIp = redisIp; } /** * 设置新值,同时返回旧值 * @param lockKey * @param stringOfLockExpireTime * @return */ public String getSet(final String lockKey, final String stringOfLockExpireTime) { String result = redisTemplate.execute(new RedisCallback
() { @Override public String doInRedis(RedisConnection redisConnection) throws DataAccessException { byte[] bytes = redisConnection.getSet(lockKey.getBytes(), stringOfLockExpireTime.getBytes()); if(bytes != null) { return new String(bytes); } return null; } }); return result; } /** * 如果不存在key则插入 * @param lockKey * @param stringOfLockExpireTime * @return true 插入成功, false 插入失败 */ public boolean setnx(final String lockKey, final String stringOfLockExpireTime) { return redisTemplate.execute(new RedisCallback
() { @Override public Boolean doInRedis(RedisConnection redisConnection) throws DataAccessException { return redisConnection.setNX(lockKey.getBytes(), stringOfLockExpireTime.getBytes()); } }); } /** * setnx 和 getSet方式插入的数据,调用此方法获取 * @param key * @return */ public String getInExecute(final String key) { String result = redisTemplate.execute(new RedisCallback
() { @Override public String doInRedis(RedisConnection redisConnection) throws DataAccessException { byte[] bytes = redisConnection.get(key.getBytes()); if (bytes == null) { return null; } else { return new String(bytes); } } }); return result; } /** * 将缓存保存在map集合中 * @param redisKey * @param mapKey * @param mapValue * @return */ public boolean putInMap(final String redisKey, String mapKey, Object mapValue) { boolean result = false; try { HashOperations
operations = redisTemplate.opsForHash(); operations.put(redisKey, mapKey, mapValue); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } public Object getOneFromMap(final String redisKey, String mapKey) { HashOperations
operations = redisTemplate.opsForHash(); return operations.get(redisKey, mapKey); } public Object getAllFromMap(final String redisKey) { HashOperations
operations = redisTemplate.opsForHash(); return operations.values(redisKey); } public void removeFromMap(final String redisKey, Object obj) { HashOperations
operations = redisTemplate.opsForHash(); operations.delete(redisKey, obj); } public boolean setList(final String key, Object value) { boolean result = false; try { ListOperations
listOperations = redisTemplate.opsForList(); listOperations.leftPush(key, value); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } public Object getList(final String key) { ListOperations
listOperations = redisTemplate.opsForList(); return listOperations.range(key,0,listOperations.size(key)); }}
package lf.utils;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import java.util.Map;/** * 详情Dto * @param 
*/@ApiModel(description = "详情DTO")public class CommonDTO
{ @ApiModelProperty(value = "提示信息") private String msg; @ApiModelProperty(value = "0 代表无错误 1代表有错误") private Integer status; @ApiModelProperty(value = "总记录") private Integer total; @ApiModelProperty(value = "业务数据") private T data; @ApiModelProperty(value = "200 代表无错误 400代表有错误--->加入这个字段是原生需求") private Integer code; @ApiModelProperty(value = "当前页码") private Integer pageNo = 1; @ApiModelProperty(value = "当前页码,默认:10") private Integer pageSize = Integer.valueOf(10); // 页面大小,设置为“-1”表示不进行分页(分页无效) @ApiModelProperty(value = "总记录数") private long totalSize;// 总记录数,设置为“-1”表示不查询总数 private Map
DataMap; public CommonDTO(Integer status) { if (status == 0){ this.status = status; this.code = 200; this.msg = "操作成功"; } this.data = null; } public CommonDTO(Integer status, Integer total) { if (status == 0){ this.status = status; this.code = 200; this.msg = "操作成功"; } this.data = null; this.total = total; } public Map
getDataMap() { return DataMap; } public void setDataMap(Map
dataMap) { DataMap = dataMap; } public Integer getCode() {
return code;} public void setCode(Integer code) {
this.code = code;} public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public Integer getTotal() { return total; } public void setTotal(Integer total) { this.total = total; } public T getData() { return data; } public void setData(T data) { this.data = data; } public Integer getPageNo() { return (pageNo!=null&&pageNo>0)?pageNo:-1; } public void setPageNo(Integer pageNo) { this.pageNo = pageNo; } public Integer getPageSize() { return (pageSize!=null&&pageSize>0)?pageSize:10; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } /** * 获取设置总数 * @return */ public long getTotalSize() { return totalSize; } /** * 设置数据总数 * @param count */ public void setTotalSize(long totalSize) { this.totalSize = totalSize; if (pageSize >= totalSize){ pageNo = 1; } } @Override public String toString() { return "CommonDTO{" + "msg='" + msg + '\'' + ", status=" + status + ", total=" + total + ", data=" + data + '}'; }}
package lf.utils;import io.swagger.annotations.Api;@Api(value = "常量类")public class CommonUtil {    public static final String USER_INFO_KEY = "USER_INFO_KEY";}

添加是springboot启动文件

package lf;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.ImportResource;import org.springframework.context.annotation.PropertySource;@SpringBootApplication@MapperScan("lf.mapper") // mapper层的路径@PropertySource({"classpath:mybatis.properties",                 "classpath:c3p0.properties",                 "classpath:redis.properties"})// 读取.properties 文件路径@ImportResource({"classpath:config/applicationContext-jedis.xml"})// 读取文件路径public class SkyRainbowApplication {    public static void main(String[] args) {        /**         * Spring boot 程序入口         */        SpringApplication.run(SkyRainbowApplication.class,args);   }}

添加jsp 文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    主页    

欢迎登陆甘雨路主页

登陆时间:${time}
登陆人:${loginName}

添加redis配置文件和mybatis配置文件

添加application.properties 文件

# 页面默认前缀目录spring.mvc.view.prefix=/WEB-INF/jsp/# 响应页面默认后缀spring.mvc.view.suffix=.jsp#swaggermodulePath=/lf

添加c3p0.properties文件

# c3p0 配置c3p0.jdbcUrl=jdbc:mysql://localhost:3306/bsdmxm?useUnicode=true&characterEncoding=utf8c3p0.user=lfc3p0.password=lfc3p0.driverClass=com.mysql.jdbc.Driverc3p0.minPoolSize=2c3p0.maxPoolSize=10c3p0.maxIdleTime=1800000c3p0.acquireIncrement=3c3p0.maxStatements=1000c3p0.initialPoolSize=3c3p0.idleConnectionTestPeriod=60c3p0.acquireRetryAttempts=30c3p0.acquireRetryDelay=1000c3p0.breakAfterAcquireFailure=falsec3p0.testConnectionOnCheckout=false

添加mybatis.properties文件

#mybatis 配置# mybatis xml配置文件的路径mybatis.config-locations=classpath:config/mybatis-config.xml# mybatis xml文件的路径mybatis.mapper-locations=classpath:lf/mapper/xml/*.xml# 实体类的路径mybatis.type-aliases-package=lf.entity

添加redis.properties文件

#Redis 配置#最大连接数redis.pool.maxTotal=1024#最大空闲连接数redis.pool.maxIdle=100#最小空闲连接数, 默认0redis.pool.minIdle=10#获取连接时的最大等待毫秒数redis.pool.maxWaitMillis=3000#在获取连接的时候检查有效性, 默认falseredis.pool.testOnBorrow=true#在return给pool时,是否提前进行validate操作redis.pool.testOnReturn=true#在空闲时检查有效性, 默认falseredis.pool.testWhileIdle=true#IPredis.ip=localhost#Portredis.port=6379#密码(默认为空)redis.pass=

启动程序,在浏览器上输入 http://localhost:8080/lf/user/info?id=51,控制台打印如下

再次刷新页面,数据直接从缓存中获取,控制台打印如下

 

转载于:https://www.cnblogs.com/lantu1989/p/8552589.html

你可能感兴趣的文章
Object-c Runtime 从代码到代码
查看>>
unity导出apk错误出错解决方法
查看>>
MySQL 5.7.21版本sql_mode=only_full_group_by问题
查看>>
Codeforces Round #576 (Div. 2) 题解
查看>>
对偶问题复习要点整理
查看>>
使用OFBIZ 时,使用的键入提示。
查看>>
实习记录1
查看>>
2018-2019-2 网络对抗技术 20165305 Exp 8 Web基础
查看>>
用XPath查找HTML节点或元素
查看>>
Oracle统计、分析和优化环境配置
查看>>
指向函数的指针
查看>>
Ant步步为营(1)解压本地的zip包
查看>>
低版本的linux系统装samba服务器
查看>>
设计模式的
查看>>
关于MySql数据库设计表与查询耗时分析
查看>>
动画参数
查看>>
一道(古老的)英文题
查看>>
定义一些常亮
查看>>
怎么准确的判断当前页面是否有虚拟导航栏
查看>>
客户端(浏览器端)数据存储技术概览
查看>>