5.springboot整合其它项目
目录
个人博客地址: https://blog.zjzaki.com/archives/1691656689259
1.整合Druid
学习地址
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
1.1.Druid是什么
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
1.2.在哪里下载druid
- 正式版本下载:
maven中央仓库: http://central.maven.org/maven2/com/alibaba/druid/
1.3.怎么获取Druid的源码
Druid是一个开源项目,源码托管在github上,源代码仓库地址是 https://github.com/alibaba/druid 。同时每次Druid发布正式版本和快照的时候,都会把源码打包,你可以从上面的下载地址中找到相关版本的源码
1.4.添加pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
1.5.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
1.6.启动项目
访问 http://localhost:8080/spboot04/druid
2.整合Redis
2.1.非注解式缓存
2.1.1.导入pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.1.2.application.yml中添加配置
redis:
host: 127.0.0.1
password: 123465
port: 6379
database: 1
2.1.3.新建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;
}
}
2.1.4.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;
}
2.1.5.重启项目
访问地址: http://localhost:8080/spboot04/clz/list
在redis连接工具中查看
2.2.注解式缓存
2.2.1.修改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;
}
}
2.2.2.测试注解式开发
修改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中的内容