• SpringBoot整合其它项目


    一、整合Druid

    学习链接:link

    1.1 添加pom依赖

    不要最新的,进过测试SQL监控失效(如果是最新的可能还需要添加其他依赖)

    <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.2 添加配置

    #添加druid的源
            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
    #            druid的访问路径
                stat-view-servlet:
                    enabled: true
                    url-pattern: /druid/*
                    reset-enable: true
                    #设置监控页面的登录名和密码
                    login-username: admin
                    login-password: admin
    #               druid配置服务器(本地或者云服务器等)
                    allow: 127.0.0.1
                    #deny: 192.168.1.100
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    完整的application.yml

    logging:
        level:
            com:
                xlb:
                    springbootviem: debug
    mybatis:
        mapper-locations: classpath:mappers/**/*xml
        type-aliases-package: com.xlb.springbootviem.mybatis.model
    pagehelper:
        helper-dialect: mysql
        page-size-zero: true
        reasonable: true
        supportMethodsArguments: true
    server:
        port: 8080
        servlet:
            context-path: /spboots
    spring:
        application:
            name: springbootviem
        datasource:
            driver-class-name: com.mysql.jdbc.Driver
            name: defaultDataSource
            password: 123456
            url: jdbc:mysql://localhost:3306/y101?useUnicode=true&characterEncoding=UTF-8
            username: root
            #添加druid的源
            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
    #            druid的访问路径
                stat-view-servlet:
                    enabled: true
                    url-pattern: /druid/*
                    reset-enable: true
                    #设置监控页面的登录名和密码
                    login-username: admin
                    login-password: admin
    #               druid配置服务器(本地或者云服务器等)
                    allow: 127.0.0.1
                    #deny: 192.168.1.100
        freemarker:
            cache: false
            charset: utf-8
            expose-request-attributes: true
            expose-session-attributes: true
            suffix: .ftl
            template-loader-path: classpath:/templates/
        mvc:
            static-path-pattern: /static/**
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82

    1.3 测试

    首先启动项目,访问项目主界面

    在这里插入图片描述

    在访问druid配置的路径

    在这里插入图片描述

    输入配置好的账号和密码

    在这里插入图片描述

    这里面只要看SQL监控和URL监控

    下图是博主目前的监控情况

    在这里插入图片描述
    在这里插入图片描述

    这里博主执行一次增加操作

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、集成redis之非注解式开发

    2.1 application.yml相关配置

    如果重新创建项目,在选择组件时,在非关系数据库是可以看见Redis的组件的,在这博主就不重新创建项目了,而是通过手动引入组件的方法

    在这里插入图片描述

    手动添加pom依赖引入redis

    <!--添加Redis相关依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    application.yml配置

    redis:
            #配置主机 (这里我配置的是我本人的云服务器)
            host: ***********
            #端口
            port: 6379
            #选择数据库
            database: 0
            #密码
            password: 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    完整的application.yml

    logging:
        level:
            com:
                xlb:
                    springbootviem: debug
    mybatis:
        mapper-locations: classpath:mappers/**/*xml
        type-aliases-package: com.xlb.springbootviem.mybatis.model
    pagehelper:
        helper-dialect: mysql
        page-size-zero: true
        reasonable: true
        supportMethodsArguments: true
    server:
        port: 8080
        servlet:
            context-path: /spboots
    spring:
        application:
            name: springbootviem
        redis:
            #配置主机 (这里我配置的是我本人的云服务器)
            host: 43.143.169.245
            #端口
            port: 6379
            #选择数据库
            database: 0
            #密码
            password: 123456
        datasource:
            driver-class-name: com.mysql.jdbc.Driver
            name: defaultDataSource
            password: 123456
            url: jdbc:mysql://localhost:3306/y101?useUnicode=true&characterEncoding=UTF-8
            username: root
            #添加druid的源
            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
    #            druid的访问路径
                stat-view-servlet:
                    enabled: true
                    url-pattern: /druid/*
                    reset-enable: true
                    #设置监控页面的登录名和密码
                    login-username: admin
                    login-password: admin
    #               druid配置服务器(本地或者云服务器等)
                    allow: 127.0.0.1
                    #deny: 192.168.1.100
        freemarker:
            cache: false
            charset: utf-8
            expose-request-attributes: true
            expose-session-attributes: true
            suffix: .ftl
            template-loader-path: classpath:/templates/
        mvc:
            static-path-pattern: /static/**
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91

    在这之后,如果是使用虚拟机的小伙伴,那么就需要启动虚拟机,然后打开redis的服务

    2.2 redistemplate设置

    将redistemplate交给spring管理

    创建配置类config

    在这里插入图片描述
    RedisConfig

    package com.xlb.springbootviem.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;
    import org.springframework.data.repository.NoRepositoryBean;
    
    /**
     * @author 波哥
     * @QQ 2212371722
     * @company 波哥集团
     * @create  2022-11-06 15:28
     */
    
    //@Configuration: 凡是被该注解所标记的,就代表当前这个类为配置类,而配置类等价于spring-*.xml这一类的配置文件
    @Configuration
    public class RedisConfig {
    
        // @Bean交给spring管理
        @Bean
        public RedisTemplate<String,Object> getRedisTemplate(RedisConnectionFactory connectionFactory){
            RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
            //序列化器配置
            //针对于key
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            //针对于value
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
           	// 如果当前版本加入上面的不生效,那么就加入下面这段配置
            // redisTemplate.ofterPropertiesSet();//根据不同的redis版本
    
            // connectionFactory 包含了redis的连接信息
            redisTemplate.setConnectionFactory(connectionFactory);
            return redisTemplate;
        }
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    2.3 测试

    博主这边测试把查询的数据放入到redis中

    service层ClazzBizImpl.java使用

      @Autowired
        private RedisTemplate redisTemplate;
        
        @Override
        public List<Clazz> listPager(Clazz clazz, PageBean pageBean) {
            List<Clazz> clazzes = clazzMapper.listPager(clazz);
            //将班级信息缓存到redis中
            redisTemplate.opsForValue().set("clz_infos",clazzes);
            return clazzes;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    启动测试

    在这里插入图片描述

    去实体类中实现序列化接口

    在这里插入图片描述

    再次启动测试

    在这里插入图片描述

    在去redis中可以发现有数据了,但是是我们看不懂的数据

    在这里插入图片描述

    问题:因为我们在service掉用时没有加泛型,加入泛型试试

    在这里插入图片描述

    在启动项目测试

    在这里插入图片描述

    三、集成redis之注解式开发

    3.1 添加配置

    RedisConfig

    package com.xlb.springbootviem.config;
    
    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 org.springframework.data.repository.NoRepositoryBean;
    
    import java.time.Duration;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * @author 波哥
     * @QQ 2212371722
     * @company 波哥集团
     * @create  2022-11-06 15:28
     */
    
    //@Configuration: 凡是被该注解所标记的,就代表当前这个类为配置类,而配置类等价于spring-*.xml这一类的配置文件
    @Configuration
    //开启缓存
    @EnableCaching
    public class RedisConfig {
    
        // 非注解式配置
        // @Bean交给spring管理
        @Bean
        public RedisTemplate<String,Object> getRedisTemplate(RedisConnectionFactory connectionFactory){
            RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
            //序列化器配置
            //针对于key
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            //针对于value
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
    
            // connectionFactory 包含了redis的连接信息
            redisTemplate.setConnectionFactory(connectionFactory);
            return redisTemplate;
        }
    
    
        //注解式配置
        //默认有效时间
        private final int defaultExpireTime = 600;
    
        //储存插槽,插槽的有效时间
        private final int userCacheExpireTime = 60;
    
        //槽的名称
        private final String userCacheName = "test";
    
        @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;
        }
    
    
    
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95

    3.2 编写测试代码

    首先service层(博主测试单个查询方法)添加注解缓存

    ClazzBiz

    //text跟配置类中定义的插槽相同,说明过期时间是60s
        @CachePut(value = "test")
        Clazz selectByPrimaryKey(Integer cid);
    
    • 1
    • 2
    • 3

    Controller定义方法
    ClazzController

    @ResponseBody
        @RequestMapping("/load")
        public Clazz load(Clazz clazz, HttpServletRequest request){
            return clazzBiz.selectByPrimaryKey(clazz.getCid());
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.3 测试

    启动项目,并且通过地址栏访问‘

    在这里插入图片描述
    在这里插入图片描述

    如果ttl名不是text,那么时间就是默认的600s,测试一下

    只需要改变service层

    @Cacheable(value = "xx",key = "'cid:'+#cid")
        Clazz selectByPrimaryKey(Integer cid);
    
    • 1
    • 2

    启动测试

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    java计算机毕业设计-食材采购平台-源程序+mysql+系统+lw文档+远程调试
    小学生python游戏编程arcade----基本知识2
    MySQL的主从同步原理
    常用的Lambda操作
    免root修改手机imei的技术原理是什么?如何实现的?hook吗
    vue3+vite+nodejs,通过接口的形式请求后端打包(可打包全部或指定打包组件)
    STL- 函数对象
    会计学试题以及答案
    前后端 websocket 通信
    Numpy数组计算实训
  • 原文地址:https://blog.csdn.net/qq_63531917/article/details/127715114