spring boot + mybatis + druid + redis

接上篇,使用redis做缓存

新建spring boot 工程,添加pom引用

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

User类

public class User {
    private Integer id;
    private String name;
    private Integer sex;
    private Integer age;

    public User(String name, Integer sex, Integer age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public User(Integer id, String name, Integer sex, Integer age) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public User() {
    }

    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 Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

UserRepository接口

import org.apache.ibatis.annotations.*;

@Mapper
public interface UserRepository {
    @Select("select * from person where id=#{id}")
    User findById(@Param("id") Integer id);
    @Insert("INSERT INTO person(name,sex,age) VALUES (#{name},#{sex},#{age})")
    User save(User user);
    @Update("UPDATE person SET name=#{name},sex=#{sex},age=#{age} WHERE id=#{id}")
    User update(User user);
    @Delete("DELETE FROM person WHERE id=#{id}")
    void delete(Integer id);
}

UserRedis

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.concurrent.TimeUnit;

@Repository
public class UserRedis {
    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    public void add(String key,Long time,User user){
        Gson gson=new Gson();
        redisTemplate.opsForValue().set(key,gson.toJson(user),time, TimeUnit.MINUTES);
    }

    public void add(String key, Long time, List<User> users){
        Gson gson=new Gson();
        redisTemplate.opsForValue().set(key,gson.toJson(users),time, TimeUnit.MINUTES);
    }

    public User get(String key){
        Gson gson=new Gson();
        User user=null;
        String userJson=redisTemplate.opsForValue().get(key);
        if(!StringUtils.isEmpty(userJson)){
            user=gson.fromJson(userJson,User.class);
        }
        return user;
    }

    public List<User> getList(String key){
        Gson gson=new Gson();
        List<User> users=null;
        String listJson=redisTemplate.opsForValue().get(key);
        if(!StringUtils.isEmpty(listJson)){
            users=gson.fromJson(listJson,new TypeToken<List<User>>(){}.getType());
        }
        return users;
    }

    public void delete(String key){
        redisTemplate.opsForValue().getOperations().delete(key);
    }
}

UserService

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

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private UserRedis userRedis;
    private static final String keyHead="mysql:get:user:";

    public User findById(Integer id){
        User user=userRedis.get(keyHead+id);
        if(user==null){
            user= userRepository.findById(id);
            if(user!=null){
                userRedis.add(keyHead+id,30L,user);
            }
        }
        return user;
    }

    public User create(User user){
        User newUser= userRepository.save(user);
        if(newUser!=null){
            userRedis.add(keyHead+newUser.getId(),30L,newUser);
        }
        return newUser;
    }

    public User update(User user){
        if(user!=null){
            userRedis.delete(keyHead+user.getId());
            userRedis.add(keyHead+user.getId(),30L,user);
        }
        return userRepository.update(user);
    }

    public void delete(Integer id){
        userRedis.delete(keyHead+id);
        userRepository.delete(id);
    }
}

RedisConfig

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.core.RedisTemplate;

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public CacheManager cacheManager(@SuppressWarnings("rawtypes")RedisTemplate redisTemplate) {
        RedisCacheManager manager=new RedisCacheManager(redisTemplate);
        manager.setDefaultExpiration(43200);
        return manager;
    }
}

UserController

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping(value = "/user/{id}")
    public String show(@PathVariable Integer id){
        User user=userService.findById(id);
        return user.getName();
    }
}

application.propeties配置

spring.datasource.url= jdbc:mysql://192.168.31.146:3306/mydb
spring.datasource.username= root
spring.datasource.password= pass

spring.redis.host=192.168.31.146
spring.redis.port=6379

spring.datasource.druid.url= jdbc:mysql://192.168.31.146:3306/mydb
spring.datasource.druid.username= root
spring.datasource.druid.password= pass

spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-wait=60000
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
#spring.datasource.druid.max-open-prepared-statements=
spring.datasource.druid.validation-query=select 1 from dual
#spring.datasource.druid.validation-query-timeout=
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
#spring.datasource.druid.max-evictable-idle-time-millis=
#配置多个英文逗号分隔
spring.datasource.druid.filters=stat,wall,log4j

打开druid监控sql:http://localhost:8080/druid/sql.html

启动docker redis 镜像 ,配置6379端口映射

docker run -d -p 6379:6379 redis

打开RedisDesktopManager客户端查看数据

打开页面:http://localhost:8080/user/1

可以看到druid有了查询

redis中也有数据

多次刷新页面,可以看到没有再去查数据库,druid监控中只有一条sql

原文地址:https://www.cnblogs.com/uptothesky/p/8215117.html

时间: 2024-07-31 21:21:32

spring boot + mybatis + druid + redis的相关文章

[转] Druid简介(Spring Boot + Mybatis + Druid数据源【自己定制】)

Druid的简介Druid是一个非常优秀的数据库连接池.在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss DataSource. Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验. Druid是一个JDBC组件,它包括三个部分: 基于Filter-Chain模式的插件体系. DruidDataSource 高效可管理的数据库连接池. SQLParser Druid的功能兼容DBCPDruid提

spring boot + mybatis + druid

因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能时数据库连接的问题,所以我打算引入数据池,引入数据池的时候找来找去,比较了当前两个最火的数据池,阿里的druid和HikariCP,比来比去选了阿里的druid,虽然spring boot默认不支持druid,而是支持HikariCP,而且HikariCP的性能更好,但是阿里功能多,就是想支持国产 实际配置: 1.首先现在下载一

spring boot+mybatis整合

LZ今天自己搭建了下Spring boot+Mybatis,比原来的Spring+SpringMVC+Mybatis简单好多.其实只用Spring boot也可以开发,但是对于多表多条件分页查询,Spring boot就有点力不从心了,所以LZ把Mybatis整合进去,不得不说,现在的框架搭建真的是方便.话不多说,进入正题. 一.java web开发环境搭建 网上有很多教程,参考教程:http://www.cnblogs.com/Leo_wl/p/4752875.html 二.Spring bo

spring boot+mybatis+quartz项目的搭建完整版

1. 利用spring boot提供的工具(http://start.spring.io/)自动生成一个标准的spring boot项目架构 2. 因为这里我们是搭建spring boot+mybatis+quartz架构,故在pom.xml文件中配置相关依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boo

【转】spring boot mybatis 读取配置文件

spring boot mybatis 配置整理 一.加载mybatis的配置 1.手写配置,写死在代码里 import java.io.IOException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ibatis.

【spring boot+mybatis】注解使用方式(无xml配置)设置自动驼峰明明转换(),IDEA中xxDao报错could not autowire的解决方法

最近使用spring boot+mybatis,使用IntelliJ IDEA开发,记录一些问题的解决方法. 1.在使用@Mapper注解方式代替XXmapper.xml配置文件,使用@Select等注解配置sql语句的情况下,如何配置数据库字段名到JavaBean实体类属性命的自动驼峰命名转换? 使用spring boot后,越来越喜欢用注解方式进行配置,代替xml配置文件方式.mybatis中也可以完全使用注解,避免使用xml方式配置mapper.(参考  springboot(六):如何优

Spring Boot [使用 Druid 数据库连接池]

导读 最近一段时间比较忙,以至于很久没有更新Spring Boot系列文章,恰好最近用到Druid, 就将Spring Boot 使用 Druid作为数据源做一个简单的介绍. Druid介绍: Druid是阿里巴巴开源的数据库连接池,Druid号称是Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能,Druid的官方地址 了解更多: JDBC连接池.监控组件 Druid (oschina) 快速上手: 下面来说明如何在 spring Boot 中配置使用Druid ,本例使用的持

使用IDEA搭建Spring boot+Mybatis工程

简介:Spring boot只使用一个核心配置文件,取消了一系列xml配置,甚至连web.xml都没有,全部使用注解的方式完成WEB层的功能.框架内置Tomcat服务器,运行启动类中的Main函数即可启动. 下面就来搭建Spring boot+Mybatis工程 新建工程 勾上web,其他的不用 Finish 完善一下目录结构: 在pom.xml配置所有相关的依赖: 1 <?xml version="1.0" encoding="UTF-8"?> 2 &

Spring Boot + MyBatis + Thymeleaf实现简单留言板应用

Spring Boot + MyBatis + Thymeleaf实现简单留言板应用 本项目主要介绍使用Spring Boot + MyBatis + Thymeleaf + Bootstrap来实现一个简单的增删改查(CRUD)留言板应用.高阶人士可以直接跳过. 源代码:https://github.com/qingwenwei/spring-boot-crud-example 功能介绍 发表帖子.帖子列表 编辑帖子 使用Spring Initializr构建项目 Spring Initial