spring boot + mybatis + druid + redis

來源:互聯網
上載者:User

標籤:port   stat   xtend   web   沒有   boot   autowired   .config   imp   

接上篇,使用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>
View Code

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;    }}
View Code

UserRepository介面

import org.apache.ibatis.annotations.*;@Mapperpublic 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);}
View Code

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;@Repositorypublic 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);    }}
View Code

UserService

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic 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);    }}
View Code

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@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport {    @Bean    public CacheManager cacheManager(@SuppressWarnings("rawtypes")RedisTemplate redisTemplate) {        RedisCacheManager manager=new RedisCacheManager(redisTemplate);        manager.setDefaultExpiration(43200);        return manager;    }}
View Code

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;@RestControllerpublic class UserController {    @Autowired    private UserService userService;    @RequestMapping(value = "/user/{id}")    public String show(@PathVariable Integer id){        User user=userService.findById(id);        return user.getName();    }}
View Code

application.propeties配置

spring.datasource.url= jdbc:mysql://192.168.31.146:3306/mydbspring.datasource.username= rootspring.datasource.password= passspring.redis.host=192.168.31.146spring.redis.port=6379spring.datasource.druid.url= jdbc:mysql://192.168.31.146:3306/mydbspring.datasource.druid.username= rootspring.datasource.druid.password= passspring.datasource.druid.initial-size=5spring.datasource.druid.max-active=20spring.datasource.druid.min-idle=5spring.datasource.druid.max-wait=60000spring.datasource.druid.pool-prepared-statements=truespring.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=falsespring.datasource.druid.test-on-return=falsespring.datasource.druid.test-while-idle=truespring.datasource.druid.time-between-eviction-runs-millis=60000spring.datasource.druid.min-evictable-idle-time-millis=300000#spring.datasource.druid.max-evictable-idle-time-millis=#配置多個英文逗號分隔spring.datasource.druid.filters=stat,wall,log4j
View Code

開啟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

spring boot + mybatis + druid + redis

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.