javascript
程序员必看内容连续集之 SpringBoot05 整合DruidRedis
目錄
一、整合Druid
二、集成redis之非注解式開發(fā)
三、集成redis之注解式開發(fā)
一、整合Druid
1、Druid簡介:
Druid是阿里巴巴開源平臺上一個數(shù)據(jù)庫連接池實現(xiàn),它結(jié)合了C3P0、DBCP、Proxool等DB池的優(yōu)點,同時加入了日志監(jiān)控,可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況,可以說是針對監(jiān)控而生的DB連接池,可以說是目前最好的連接池之一。
2、Druid的優(yōu)點
①結(jié)合了C3P0、DBCP、Proxool等DB池的優(yōu)點;
②速度快,且穩(wěn)定性好;
③可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況。
3、Springboot項目集成Druid?
大家也可以參照這個學(xué)習(xí)網(wǎng)址來學(xué)習(xí):
?官方學(xué)習(xí)網(wǎng)址:
druid/druid-spring-boot-starter at master · alibaba/druid · GitHub
接下來我們直接在一個Springboot項目中集成Druid
第①步:導(dǎo)入pom依賴?
添加配置,不要最新的,小編測試過SQL監(jiān)控會失效,就這個版本就可以了
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency>第②步:整合Druid的配置文件到application.yml文件
#添加druid的源type: com.alibaba.druid.pool.DruidDataSourcedruid:#2.連接池配置#初始化連接池的連接數(shù)量 大小,最小,最大initial-size: 5min-idle: 5max-active: 20#配置獲取連接等待超時的時間max-wait: 60000#配置間隔多久才進行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒time-between-eviction-runs-millis: 60000# 配置一個連接在池中最小生存的時間,單位是毫秒min-evictable-idle-time-millis: 30000validation-query: SELECT 1 FROM DUALtest-while-idle: truetest-on-borrow: truetest-on-return: false# 是否緩存preparedStatement,也就是PSCache 官方建議MySQL下建議關(guān)閉 個人建議如果想用SQL防火墻 建議打開pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20# 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻filter:stat:merge-sql: trueslow-sql-millis: 5000#3.基礎(chǔ)監(jiān)控配置web-stat-filter:enabled: true # 配置訪問路徑 /* 代表所有路徑url-pattern: /*#設(shè)置不統(tǒng)計哪些URLexclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"session-stat-enable: truesession-stat-max-count: 100 # druid的訪問路徑stat-view-servlet:enabled: trueurl-pattern: /druid/*reset-enable: true#設(shè)置監(jiān)控頁面的登錄名和密碼login-username: adminlogin-password: admin # druid配置服務(wù)器(本地或者云服務(wù)器等)allow: 127.0.0.1#deny: 192.168.1.100第③步:啟動訪問Druid的登錄界面并輸入賬號密碼(配置文件中已配置)
二、集成redis之非注解式開發(fā)
Springboot項目集成redis
如果重新創(chuàng)建項目,在選擇組件時,在非關(guān)系數(shù)據(jù)庫是可以看見Redis的組件的,在這博主就不重新創(chuàng)建項目了,而是通過手動引入組件的方法
第①步:導(dǎo)入pom依賴?
<!--添加Redis相關(guān)依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>第②步:整合Redis的配置文件到application.yml文件
redis:#配置主機(這里小編放的是本機的redis)host: localhost#端口port: 6379#選擇數(shù)據(jù)庫database: 0#密碼password: 123456第③步:增加一個redis的配置類
package com.zq.springboot04.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;@Configuration public class RedisConfig {@Beanpublic RedisTemplate<String,Object> getRedisTemplate(RedisConnectionFactory connectionFactory){RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();// 配置序列化器//針對于keyredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());//針對于valueredisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setHashKeySerializer(new GenericJackson2JsonRedisSerializer()); // redisTemplate.afterPropertiesSet();//根據(jù)不同的redis版本// connectionFactory是包含了redis的連接信息redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}}第④步:測試,將查詢數(shù)據(jù)加入緩存:
package com.zq.springboot04.biz.impl;import com.zq.springboot04.biz.ClazzBiz; import com.zq.springboot04.mapper.ClazzMapper; import com.zq.springboot04.model.Clazz; import com.zq.springboot04.util.PageBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service;import java.util.List; import java.util.Map; @Service public class ClazzBizImpl implements ClazzBiz {@Autowiredprivate ClazzMapper clazzMapper;@Autowiredprivate RedisTemplate<String,Object> redisTemplate;@Overridepublic int deleteByPrimaryKey(Integer cid) {return clazzMapper.deleteByPrimaryKey(cid);}@Overridepublic int insert(Clazz record) {return clazzMapper.insert(record);}@Overridepublic int insertSelective(Clazz record) {return clazzMapper.insertSelective(record);}@Overridepublic Clazz selectByPrimaryKey(Integer cid) {return clazzMapper.selectByPrimaryKey(cid);}@Overridepublic int updateByPrimaryKeySelective(Clazz record) {return clazzMapper.updateByPrimaryKeySelective(record);}@Overridepublic int updateByPrimaryKey(Clazz record) {return clazzMapper.updateByPrimaryKey(record);}@Overridepublic List<Clazz> listPager(Clazz clazz, PageBean pageBean) {List<Clazz> clazzes = clazzMapper.listPager(clazz);// 將班級信息緩存到redis中redisTemplate.opsForValue().set("clz_infos",clazzes);return clazzes;}@Overridepublic List<Map> listMapPager(Clazz clazz, PageBean pageBean) {if(true)throw new RuntimeException("查詢班級信息異常,異常存在于ClazzBizImpl.list。。。。");return clazzMapper.listMapPager(clazz);} }?我們發(fā)現(xiàn)redis中已經(jīng)有了我們的緩存那么就說明我們整合不用注解版的redis版本成功了
三、集成redis之注解式開發(fā)
集成注解式也是大同小異的,我們一樣需要一下步驟:
?第①步:導(dǎo)入pom依賴?
<!--添加Redis相關(guān)依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>第②步:整合Redis的配置文件到application.yml文件
redis:#配置主機(這里小編放的是本機的redis)host: localhost#端口port: 6379#選擇數(shù)據(jù)庫database: 0#密碼password: 123456第③步:增加一個redis的配置類(這里就和非注解式不一樣了)
package com.zq.springboot04.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 張強** @Configuration:凡是被@Configuration注解所標(biāo)記,就代表當(dāng)前這個類為配置類* 而配置類等價于ssm階段中spring-*.xml這一類的配置文件** spring-*.xml* <bean id="" class=""></bean>* 將redistemplate進行配置,然后交給spring進行管理*/ @Configuration //開啟緩存 @EnableCaching public class RedisConfig {private final int defaultExpireTime = 600;private final int userCacheExpireTime = 60;private final String userCacheName = "test";@Beanpublic RedisTemplate<String,Object> getRedisTemplate(RedisConnectionFactory connectionFactory){RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();// 配置序列化器//針對于keyredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());//針對于valueredisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setHashKeySerializer(new GenericJackson2JsonRedisSerializer()); // redisTemplate.afterPropertiesSet();//根據(jù)不同的redis版本// connectionFactory是包含了redis的連接信息redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}@Beanpublic RedisCacheManager redis(RedisConnectionFactory connectionFactory){RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();// 設(shè)置緩存管理器管理的緩存的默認過期時間defaultCacheConfig = defaultCacheConfig.entryTtl(Duration.ofSeconds(defaultExpireTime))// 設(shè)置 key為string序列化.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))// 設(shè)置value為json序列化.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))// 不緩存空值.disableCachingNullValues();Set<String> cacheNames = new HashSet<>();cacheNames.add(userCacheName);// 對每個緩存空間應(yīng)用不同的配置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;} }第④步:加入注解然后測試測試查詢單個的方法
然后我們通過地址欄調(diào)用方法:
?當(dāng)執(zhí)行完后就會生成緩存:
OK這樣的話就成功了!
總結(jié)
以上是生活随笔為你收集整理的程序员必看内容连续集之 SpringBoot05 整合DruidRedis的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oculus quest2手势交互
- 下一篇: Not enough memory to