欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合Druid、Redis的示例詳解

 更新時(shí)間:2022年02月09日 10:39:31   作者:邂逅于晚風(fēng)  
Druid 是阿里巴巴開源平臺(tái)上一個(gè)數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn),結(jié)合了 C3P0、DBCP 等 DB 池的優(yōu)點(diǎn),同時(shí)加入了日志監(jiān)控。這篇文章主要介紹了SpringBoot整合Druid、Redis的實(shí)例詳解,感興趣的朋友跟隨小編一起看看吧

1.整合Druid

1.1Druid簡(jiǎn)介

Java程序很大一部分要操作數(shù)據(jù)庫(kù),為了提高性能操作數(shù)據(jù)庫(kù)的時(shí)候,又不得不使用數(shù)據(jù)庫(kù)連接池。

Druid 是阿里巴巴開源平臺(tái)上一個(gè)數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn),結(jié)合了 C3P0、DBCP 等 DB 池的優(yōu)點(diǎn),同時(shí)加入了日志監(jiān)控。

Druid 可以很好的監(jiān)控 DB 池連接和 SQL 的執(zhí)行情況,天生就是針對(duì)監(jiān)控而生的 DB 連接池。

1.2添加上 Druid 數(shù)據(jù)源依賴

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </dependency>

1.3使用Druid 數(shù)據(jù)源

server:
  port: 8080
spring:
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/eshop?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
      username: xxx
      password: xxx
      driver-class-name: com.mysql.cj.jdbc.Driver
      initial-size: 10
      max-active: 20
      min-idle: 10
      max-wait: 60000
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      stat-view-servlet:
        enabled: true
        login-username: admin
        login-password: 1234
logging:
  level:
    com.wyy.spring.Dao: debug

測(cè)試一下看是否成功!

package com.wyy.spring;
import com.wyy.spring.Dao.StudentMapper;
import com.wyy.spring.service.StudentService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
@SpringBootTest
class SpringBoot04ApplicationTests {
    @Autowired
    DataSource dataSource;
    @Test
    void contextLoads() {
        System.out.println(dataSource.getClass());
    }
}

打印結(jié)果 

 2.整合redis

2.1添加上 redis依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2.2yml添加redis配置信息 

redis:
    database: 0
    host: 120.0.0.0
    port: 6379
    password: xxxx
    jedis:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0
    timeout: 10000

2.3 redis 配置類 

package com.wyy.spring.conf;
 
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
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.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.util.ClassUtils;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.time.Duration;
@Configuration
@EnableCaching
public class RedisConfiguration extends CachingConfigurerSupport {
    @Bean
    @Primary
    /**
     * 緩存管理器
     */
    CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .computePrefixWith(cacheName -> cacheName + ":-cache-:")
                /*設(shè)置緩存過(guò)期時(shí)間*/
                .entryTtl(Duration.ofHours(1))
                /*禁用緩存空值,不緩存null校驗(yàn)*/
                .disableCachingNullValues()
                /*設(shè)置CacheManager的值序列化方式為json序列化,可使用加入@Class屬性*/
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(
                        new GenericJackson2JsonRedisSerializer()
                ));
        /*使用RedisCacheConfiguration創(chuàng)建RedisCacheManager*/
        RedisCacheManager manager = RedisCacheManager.builder(factory)
                .cacheDefaults(cacheConfiguration)
                .build();
        return manager;
    }
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(factory);
        RedisSerializer stringSerializer = new StringRedisSerializer();
        /* key序列化 */
        redisTemplate.setKeySerializer(stringSerializer);
        /* value序列化 */
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        /* Hash key序列化 */
        redisTemplate.setHashKeySerializer(stringSerializer);
        /* Hash value序列化 */
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    @Override
    public KeyGenerator keyGenerator() {
        return (Object target, Method method, Object... params) -> {
            final int NO_PARAM_KEY = 0;
            final int NULL_PARAM_KEY = 53;
            StringBuilder key = new StringBuilder();
            /* Class.Method: */
            key.append(target.getClass().getSimpleName())
                    .append(".")
                    .append(method.getName())
                    .append(":");
            if (params.length == 0) {
                return key.append(NO_PARAM_KEY).toString();
            }
            int count = 0;
            for (Object param : params) {
                /* 參數(shù)之間用,進(jìn)行分隔 */
                if (0 != count) {
                    key.append(',');
                }
                if (param == null) {
                    key.append(NULL_PARAM_KEY);
                } else if (ClassUtils.isPrimitiveArray(param.getClass())) {
                    int length = Array.getLength(param);
                    for (int i = 0; i < length; i++) {
                        key.append(Array.get(param, i));
                        key.append(',');
                    }
                } else if (ClassUtils.isPrimitiveOrWrapper(param.getClass()) || param instanceof String) {
                    key.append(param);
                } else {
                    /*JavaBean一定要重寫hashCode和equals*/
                    key.append(param.hashCode());
                count++;
            return key.toString();
        };
}

@CacheConfig 一個(gè)類級(jí)別的注解,允許共享緩存的cacheNames、KeyGenerator、CacheManager 和 CacheResolver

@Cacheable 用來(lái)聲明方法是可緩存的。將結(jié)果存儲(chǔ)到緩存中以便后續(xù)使用相同參數(shù)調(diào)用時(shí)不需執(zhí)行實(shí)際的方 法。直接從緩存中取值

@CachePut 標(biāo)注的方法在執(zhí)行前不會(huì)去檢查緩存中是否存在之前執(zhí)行過(guò)的結(jié)果,而是每次都會(huì)執(zhí)行該方法, 并將執(zhí)行結(jié)果以鍵值對(duì)的形式存入指定的緩存中。

@CacheEvict 的作用 主要針對(duì)方法配置,能夠根據(jù)一定的條件對(duì)緩存進(jìn)行清空 

到此這篇關(guān)于SpringBoot整合Druid、Redis的文章就介紹到這了,更多相關(guān)SpringBoot整合Druid、Redis內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java隨機(jī)數(shù)生產(chǎn)算法實(shí)例

    java隨機(jī)數(shù)生產(chǎn)算法實(shí)例

    下面小編就為大家?guī)?lái)一篇java隨機(jī)數(shù)生產(chǎn)算法實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Java反射機(jī)制介紹

    Java反射機(jī)制介紹

    Java的反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任何一個(gè)類,都可以知道這個(gè)類的所有屬性和方法,對(duì)于任何一個(gè)對(duì)象,都可以調(diào)用它所有的方法和屬性,修改部分類型信息,這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為Java的反射機(jī)制
    2022-08-08
  • Java函數(shù)式編程(三):列表的轉(zhuǎn)化

    Java函數(shù)式編程(三):列表的轉(zhuǎn)化

    這篇文章主要介紹了Java函數(shù)式編程(二):列表的轉(zhuǎn)化,lambda表達(dá)式不僅能幫助我們遍歷集合,并且可以進(jìn)行集合的轉(zhuǎn)化,需要的朋友可以參考下
    2014-09-09
  • Java壓縮文件工具類ZipUtil使用方法代碼示例

    Java壓縮文件工具類ZipUtil使用方法代碼示例

    這篇文章主要介紹了Java壓縮文件工具類ZipUtil使用方法代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • Java中的復(fù)合數(shù)據(jù)類型

    Java中的復(fù)合數(shù)據(jù)類型

    這篇文章主要介紹了Java中的復(fù)合數(shù)據(jù)類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Mybatis-plus多租戶項(xiàng)目實(shí)戰(zhàn)進(jìn)階指南

    Mybatis-plus多租戶項(xiàng)目實(shí)戰(zhàn)進(jìn)階指南

    多租戶是一種軟件架構(gòu)技術(shù),在多用戶的環(huán)境下共有同一套系統(tǒng),并且要注意數(shù)據(jù)之間的隔離性,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus多租戶項(xiàng)目實(shí)戰(zhàn)進(jìn)階的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • Idea的Generate Sources無(wú)法生成QueryDSL問(wèn)題及解決方法

    Idea的Generate Sources無(wú)法生成QueryDSL問(wèn)題及解決方法

    這篇文章主要介紹了解決Idea的Generate Sources無(wú)法生成QueryDSL問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Springboot集成mybatis實(shí)現(xiàn)多數(shù)據(jù)源配置詳解流程

    Springboot集成mybatis實(shí)現(xiàn)多數(shù)據(jù)源配置詳解流程

    在日常開發(fā)中,若遇到多個(gè)數(shù)據(jù)源的需求,怎么辦呢?通過(guò)springboot集成mybatis實(shí)現(xiàn)多數(shù)據(jù)源配置,簡(jiǎn)單嘗試一下,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 淺談Java中的四種引用方式的區(qū)別

    淺談Java中的四種引用方式的區(qū)別

    下面小編就為大家?guī)?lái)一篇淺談Java中的四種引用方式的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • Spring?Boot超大文件上傳實(shí)現(xiàn)秒傳功能

    Spring?Boot超大文件上傳實(shí)現(xiàn)秒傳功能

    這篇文章主要介紹了Spring?Boot超大文件上傳實(shí)現(xiàn)秒傳功能,在實(shí)現(xiàn)分片上傳的過(guò)程,需要前端和后端配合,比如前后端的上傳塊號(hào)的文件大小,前后端必須得要一致,否則上傳就會(huì)有問(wèn)題,需要的朋友可以參考下
    2022-12-12

最新評(píng)論