Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions SpringBoot-MyBatis-Advances/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,20 @@
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-site-renderer</artifactId>
<version>1.11.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.9.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
Expand All @@ -51,6 +65,16 @@
<verbose>true</verbose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

//TODO
Expand All @@ -14,6 +15,7 @@
*/
@SpringBootApplication
@EnableSwagger2
@EnableCaching
public class Application_Mybatis {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package com.fancv.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cache.interceptor.SimpleKeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

@Configuration
@EnableCaching
public class RedisCacheConfig {

@Value("${cache.default.expire-time:2000}")
private int defaultExpireTime;
@Value("${cache.user.expire-time:1000}")
private int userCacheExpireTime;
@Value("${cache.user.name:cache}")
private String userCacheName;

/* *//**
* Redis缓存管理器
*
* @param lettuceConnectionFactory
* @return
*//*
@Bean
public CacheManager cacheManager(RedisConnectionFactory lettuceConnectionFactory) {
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();
// 设置缓存管理器管理的缓存的默认过期时间
defaultCacheConfig = defaultCacheConfig.entryTtl(Duration.ofSeconds(defaultExpireTime))
// 设置 key为string序列化
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
// 设置value为json序列化
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
// 不缓存空值
.disableCachingNullValues();

Set<String> cacheNames = new HashSet<>();
cacheNames.add(userCacheName);

// 对每个缓存空间应用不同的配置
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
configMap.put(userCacheName, defaultCacheConfig.entryTtl(Duration.ofSeconds(userCacheExpireTime)));
configMap.put("users", defaultCacheConfig.entryTtl(Duration.ofSeconds(400)));

RedisCacheManager cacheManager = RedisCacheManager.builder(lettuceConnectionFactory)
.cacheDefaults(defaultCacheConfig)
.initialCacheNames(cacheNames)
.withInitialCacheConfigurations(configMap)
.build();
return cacheManager;
}*/


/* *
* 缓存管理器
*
* @param lettuceConnectionFactory
* @return*/

@Bean
public CacheManager cacheManager(RedisConnectionFactory lettuceConnectionFactory) {
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();
// 设置缓存管理器管理的缓存的默认过期时间
defaultCacheConfig = defaultCacheConfig.entryTtl(Duration.ofSeconds(defaultExpireTime))
// 设置 key为string序列化
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
// 设置value为json序列化
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
// 不缓存空值
.disableCachingNullValues();

Set<String> cacheNames = new HashSet<>();
cacheNames.add(userCacheName);

// 对每个缓存空间应用不同的配置
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
configMap.put(userCacheName, defaultCacheConfig.entryTtl(Duration.ofSeconds(userCacheExpireTime)));
configMap.put("users", defaultCacheConfig.entryTtl(Duration.ofSeconds(400)));

RedisCacheManager cacheManager = RedisCacheManager.builder(lettuceConnectionFactory)
.cacheDefaults(defaultCacheConfig)
.initialCacheNames(cacheNames)
.withInitialCacheConfigurations(configMap)
.build();
return cacheManager;
}
/**
* 自定义缓存的redis的KeyGenerator【key生成策略】
* 注意: 该方法只是声明了key的生成策略,需在@Cacheable注解中通过keyGenerator属性指定具体的key生成策略
* 可以根据业务情况,配置多个生成策略
* 如: @Cacheable(value = "key", keyGenerator = "cacheKeyGenerator")
*/
@Bean
public KeyGenerator keyGenerator() {
/**
* target: 类
* method: 方法
* params: 方法参数
*/
return (target, method, params) -> {
//获取代理对象的最终目标对象
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getSimpleName()).append(":");
sb.append(method.getName()).append(":");
//调用SimpleKey的key生成器
Object key = SimpleKeyGenerator.generateKey(params);
return sb.append(key);
};
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import com.fancv.dao.User;
import com.fancv.mapper.MyUserMapper;
import com.fancv.service.UserService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.accept.MappingMediaTypeFileExtensionResolver;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
Expand All @@ -13,14 +16,22 @@

@RestController
@RequestMapping("mybatis")
@Api(value = "User")
public class DemoController {

@Autowired
MyUserMapper userMapper;
@GetMapping("insert")
public String batchInster(){

User user = userMapper.selectByPrimaryKey(1);
return user.getName();
@Autowired
UserService userService;


@GetMapping("user_info")
public User getUserInfo(Integer id){

User user = userService.getUerInfo(id);
User user1 = userService.getUerInfoWithoutKey();
return user;
}

@GetMapping("replace")
Expand Down Expand Up @@ -48,6 +59,6 @@ public int merge(){
a.setCreateTime(new Date());
a.setName("dfa");
a.setPassword("124321");
return userMapper.mergeinfo(a);
return 1;
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.fancv.dao;

import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.util.Date;

public class User {
public class User implements Serializable {
private Integer id;

private String name;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.fancv.service;

import com.fancv.dao.User;
import com.fancv.mapper.MyUserMapper;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.stereotype.Service;

@Service
@Log4j2
@EnableCaching
@CacheConfig(cacheNames = "users")
public class UserService {

@Autowired
MyUserMapper userMapper;

/**
* @Cacheable(cacheNames = "users", condition = "#id > 0", sync = true, keyGenerator = "keyGenerator",key = "'user-' + #id")
* Both 'key' and 'keyGenerator' attributes have been set. 不能同时使用
* @param id
* @return
*/
@Cacheable(cacheNames = "users", condition = "#id > 0", sync = true, keyGenerator = "keyGenerator")
public User getUerInfo(Integer id) {
return userMapper.selectByPrimaryKey(id);
}

@Cacheable(cacheNames = "ca", sync = true, keyGenerator = "keyGenerator")
public User getUerInfoWithoutKey() {
return userMapper.selectByPrimaryKey(2);
}
}
14 changes: 14 additions & 0 deletions SpringBoot-MyBatis-Advances/src/main/resources/application.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
spring:
cache:
redis:
key-prefix: "sp:"
time-to-live: 800
type: redis
redis:
port: 6379
host: 127.0.0.1
database: 10
datasource:
username: admin
password: hta@123
Expand Down Expand Up @@ -35,3 +44,8 @@ mybatis:
mapper-locations: classpath:mappers/*Mapper.xml
type-aliases-package: com.fancv.dao

logging:
level:
com.fancv.mapper: debug


Loading