目录
一.整合Druid
-
Druid是什么
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能
-
在哪里下载druid
正式版本下载:
maven中央仓库: http://central.maven.org/maven2/com/alibaba/druid/
-
怎么获取Druid的源码
Druid是一个开源项目,源码托管在github上,源代码仓库地址是 https://github.com/alibaba/druid 。同时每次Druid发布正式版本和快照的时候,都会把源码打包,你可以从上面的下载地址中找到相关版本的源码
-
添加pom依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>
-
application.yml添加配置
type: com.alibaba.druid.pool.DruidDataSource druid: #2.连接池配置 #初始化连接池的连接数量 大小,最小,最大 initial-size: 5 min-idle: 5 max-active: 20 #配置获取连接等待超时的时间 max-wait: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 time-between-eviction-runs-millis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 min-evictable-idle-time-millis: 30000 validation-query: SELECT 1 FROM DUAL test-while-idle: true test-on-borrow: true test-on-return: false # 是否缓存preparedStatement,也就是PSCache 官方建议MySQL下建议关闭 个人建议如果想用SQL防火墙 建议打开 pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filter: stat: merge-sql: true slow-sql-millis: 5000 #3.基础监控配置 web-stat-filter: enabled: true url-pattern: /* #设置不统计哪些URL exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" session-stat-enable: true session-stat-max-count: 100 stat-view-servlet: enabled: true url-pattern: /druid/* reset-enable: true #设置监控页面的登录名和密码 login-username: admin login-password: admin allow: 127.0.0.1 #deny: 192.168.1.100
-
启动项目
访问 http://localhost:8080/springboot04/druid
二.整合Redis
1.非注解式缓存
-
导入pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
-
application.yml中添加配置
redis: host: 127.0.0.1 password: 123465 port: 6379 database: 1
-
新建config包,添加RedisConfig.java
package com.zjzaki.spboot04.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * @Author zjzaki * @Package com.zjzaki.spboot04.config * @Date 2023-08-10 16:04:18 */ @Configuration public class RedisConfig { @Bean public RedisTemplate<String,Object> getRedisTemplate(RedisConnectionFactory connectionFactory){ RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); //redisTemplate.afterPropertiesSet(); redisTemplate.setConnectionFactory(connectionFactory); return redisTemplate; } }
-
service层ClazzBizImpl.java使用
添加
@Autowired
private RedisTemplate<String,Object> redisTemplate;
修改listPager方法
@Override
public List<Clazz> listPager(Clazz clazz, PageBean pageBean) {
List<Clazz> clzs = clazzMapper.listPager(clazz);
redisTemplate.opsForValue().set("clz:1",clzs.get(0));
redisTemplate.opsForValue().set("clzs",clzs);
// redisTemplate.opsForHash().entries()
return clzs;
}
-
重启项目
访问地址: http://localhost:8080/spboot04/clz/list
在redis连接工具中查看
2.注解式缓存
-
修改RedisConfig.java的内容
package com.zjzaki.spboot04.config; import org.springframework.cache.annotation.EnableCaching; 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.core.RedisTemplate; 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; /** * @Author zjzaki * @Package com.zjzaki.spboot04.config * @Date 2023-08-10 16:04:18 */ @EnableCaching @Configuration public class RedisConfig { private final int defaultExpireTime = 600; private final int userCacheExpireTime = 60; private final String userCacheName = "test"; @Bean public RedisTemplate<String,Object> getRedisTemplate(RedisConnectionFactory connectionFactory){ RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); //redisTemplate.afterPropertiesSet(); redisTemplate.setConnectionFactory(connectionFactory); return redisTemplate; } @Bean public RedisCacheManager redis(RedisConnectionFactory connectionFactory){ 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))); RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory) .cacheDefaults(defaultCacheConfig) .initialCacheNames(cacheNames) .withInitialCacheConfigurations(configMap) .build(); return cacheManager; } }
-
测试注解式开发
修改ClazzBiz.java的内容
@Cacheable(value = "redis-cache-clzs-",key = "'clzid:'+#cid")
Clazz selectByPrimaryKey(Integer cid);
ClazzController添加内容
@GetMapping("/select")
@ResponseBody
public Clazz selectByPrimaryKey(Integer cid){
Clazz clazz = clazzBiz.selectByPrimaryKey(cid);
return clazz;
}
请求http://localhost:8080/spboot04/clz/select?cid=2, 查看redis中的内容
修改ClazzBiz.java的内容
@Cacheable(value = "test")
Clazz selectByPrimaryKey(Integer cid);
请求http://localhost:8080/spboot04/clz/select?cid=2,查看redis中的内容