• springboot整合其它项目


    一、整合Druid

    1、添加pom依赖

    <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druid-spring-boot-starterartifactId>
                <version>1.1.10version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、application.yml

    mybatis:
        mapper-locations: classpath:mappers/*xml
        type-aliases-package: com.xnx.spboot04.model
    server:
        port: 8080
        servlet:
            context-path: /spboot04
    spring:
        application:
            name: spboot04
        datasource:
            driver-class-name: com.mysql.jdbc.Driver
            name: defaultDataSource
            password: 123456
            url: jdbc:mysql://localhost:3306/t280?useUnicode=true&characterEncoding=UTF-8
            username: root
            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
        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/**
        redis:
            host: 192.168.230.128
            port: 6379
            database: 0
            password: 123456
    #    resources:
    #        static-locations: classpath:/static/# Ӧ�÷��� WEB ���ʶ˿�
    pagehelper:
        reasonable: true
        supportMethodsArguments: true
        page-size-zero: true
        helper-dialect: mysql
    logging:
        level:
            com.xnx.spboot04: debug
    
    • 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

    二、整合redis

    1、非注解式缓存

    ①导入pom依赖

     
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-data-redisartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ②application.yml

    在上面的yml文件中已配置

    ③配置类RedisConfig.java

    @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.afterPropertiesSet();//根据不同的redis版本,让配置生效
    
    //        connnectionFactory是包含了redis的连接信息
            redisTemplate.setConnectionFactory(connectionFactory);
            return redisTemplate;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    service层ClazzBizImpl.java使用

    package com.xnx.spboot04.biz.impl;
    
    import com.xnx.spboot04.biz.ClazzBiz;
    import com.xnx.spboot04.mapper.ClazzMapper;
    import com.xnx.spboot04.model.Clazz;
    import com.xnx.spboot04.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 {
        @Autowired
        private ClazzMapper clazzMapper;
        @Autowired
        private RedisTemplate<String,Object> redisTemplate;
        @Override
        public int deleteByPrimaryKey(Integer cid) {
            System.out.println("不做任何操作...");
            return clazzMapper.deleteByPrimaryKey(cid);
    //        return 0;
        }
    
        @Override
        public int insert(Clazz record) {
            return clazzMapper.insert(record);
        }
    
        @Override
        public int insertSelective(Clazz record) {
            return clazzMapper.insertSelective(record);
        }
    
        @Override
        public Clazz selectByPrimaryKey(Integer cid) {
            return clazzMapper.selectByPrimaryKey(cid);
        }
    
        @Override
        public int updateByPrimaryKeySelective(Clazz record) {
            return clazzMapper.updateByPrimaryKeySelective(record);
        }
    
        @Override
        public int updateByPrimaryKey(Clazz record) {
            return clazzMapper.updateByPrimaryKey(record);
        }
    
        @Override
        public List<Clazz> listPager(Clazz clazz, PageBean pageBean) {
            List<Clazz> clazzes = clazzMapper.listPager(clazz);
    //        将班级信息缓存到redis中
    //        redisTemplate.opsForValue().set("clz_infos",clazzes);
            return clazzes;
        }
    
        @Override
        public List<Map> listMapPager(Clazz clazz, PageBean pageBean) {
            if(true)
                throw new RuntimeException("查询班级信息异常,异常存在于ClazzBizImpl.list。。。。");
            return clazzMapper.listMapPager(clazz);
        }
    }
    
    
    • 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

    在这里插入图片描述

    2、注解式缓存

    ①RedisConfig.java

    package com.xnx.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 xnx
     * @create 2022-11-02 9:38
     *
     * @Configuration:反射被@Configuration注解所标记,就代表当前这个类为配置类
     * 而配置类等价于ssm阶段的中spring-*.xml这一类的配置文件
     *
     * spring-*.xml
     * 
     *
     * 我们要做的:将redistemplate进行配置,然后交给spring进行管理
     *
     * @EnableCaching替代了下面的配置
     *
     */
    @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<>();
    //        配置序列化器
    //        针对于key
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
    //        针对于value
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
    //        redisTemplate.afterPropertiesSet();//根据不同的redis版本,让配置生效
    
    //        connnectionFactory是包含了redis的连接信息
            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;
        }
    }
    
    
    • 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

    ②ClazzBiz.java

    package com.xnx.spboot04.biz;
    
    import com.xnx.spboot04.model.Clazz;
    import com.xnx.spboot04.util.PageBean;
    import org.springframework.cache.annotation.CacheEvict;
    import org.springframework.cache.annotation.CachePut;
    import org.springframework.cache.annotation.Cacheable;
    
    import java.util.List;
    import java.util.Map;
    
    public interface ClazzBiz {
        int deleteByPrimaryKey(Integer cid);
    
        int insert(Clazz record);
    
        int insertSelective(Clazz record);
    
    //    xx=cache-cid:1
    //    key的作用改变原有的key生成规则
    //    @Cacheable(value = "user") ttl时间为60秒
        @Cacheable(value = "clz",key = "'cid:'+#clazz.cid")
        Clazz selectByPrimaryKey(Integer cid);
    
        int updateByPrimaryKeySelective(Clazz record);
    
        int updateByPrimaryKey(Clazz record);
    
        List<Clazz> listPager(Clazz clazz, PageBean pageBean);
        List<Map> listMapPager(Clazz clazz, PageBean pageBean);
    }
    
    • 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

    在这里插入图片描述
    注意:redis用的是在linux中开启的服务

  • 相关阅读:
    【网络安全】基于centos7搭建discuz+redis服务
    我的合肥 .NET 俱乐部线下活动之旅
    【无标题】
    十大排序 —— 桶排序
    定点数原码二位乘法
    吴军《浪潮之巅》阅读随笔(二)
    《Linux篇》超详细安装FinalShell并连接Linux教程
    移动终端数据业务高安全通信方案研究
    弱监督下的学习对象检测
    升讯威在线客服系统:客户收到攻击威胁勒索,我是如何保障客户安全的
  • 原文地址:https://blog.csdn.net/weixin_67677668/article/details/127654085