首页 > 其他分享 >springboot - 项目启动初始化数据

springboot - 项目启动初始化数据

时间:2023-06-02 17:33:38浏览次数:31  
标签:初始化 return springboot 启动 redis collect template new public

1、redis配置

依赖

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

redisconfig.java

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        // 创建RedisTemplate对象
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // 设置连接工厂
        template.setConnectionFactory(connectionFactory);
        // 创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 设置Key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        // 设置Value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashValueSerializer(jsonRedisSerializer);
        // 返回
        return template;
    }
}

配置

#redis配置
spring.redis.host=127.0.0.1
spring.redis.port=6379

 

2、实现

@Component
@Slf4j
public class InitConfig {
    @Autowired
    SysCityMapper cityMapper;
    @Autowired
    RedisTemplate<String, Object> redisTemplate;

    //所有城市
    private static List<PubListVo> allCity = new ArrayList<>();
    private static List<SysCityDO> allCityList = new ArrayList<>();

    /**
     * 初始化省市县
     */
    @PostConstruct
    public void initProvinceCityRegion() {
        //城市
        allCityList = cityMapper.selectList(new LambdaQueryWrapper<>());
        List<PubListVo> cityList = allCityList.stream().map(obj -> {
            PubListVo vo = new PubListVo();
            vo.setKey(obj.getCityCode().toString());
            vo.setValue(obj.getName());
            return vo;
        }).collect(Collectors.toList());
        allCity.addAll(cityList);

        //放入redis
        if (Boolean.TRUE.equals(redisTemplate.hasKey(CITY_KEY))) {
            redisTemplate.delete(CITY_KEY);
        }
        List<SysCityDO> cityDOList = cityMapper.selectList(null);
        Map<String, String> cityMap = cityDOList.stream()
                .collect(Collectors.toMap(city -> String.valueOf(city.getCityCode()), SysCityDO::getName));
        redisTemplate.opsForHash().putAll(CITY_KEY, cityMap);
    }

    /**
     * 根据市名称查找市code
     */
    public static Integer findCityKeyByName(String cityName) {
        List<PubListVo> collect = allCity.stream()
                .filter(obj -> obj.getValue().equalsIgnoreCase(cityName))
                .collect(Collectors.toList());

        if (collect.size() == 1) {
            return Integer.parseInt(collect.get(0).getKey());
        }
        else
        {
            log.info("error:{}, collect:{}",cityName, collect.size());
        }
        return null;
    }


    /**
     * 所有城市
     *
     * @return
     */
    public static List<SysCityDO> getAllCityList() {
        return allCityList;
    }

}

 

 初始化了两种:

一种是初始化数据放入list集合,获取InitConfig.getAllCityList(),不能及时更新数据,必须重启项目。例如当系统添加一个城市后,数据库更新,但是代码层面没有重新获取新的数据。

另一种是放入了redis缓存中,通过redis获取,解决了第一种需要重启才能更新的弊端,可以在添加后redis添加对应的缓存。

 

标签:初始化,return,springboot,启动,redis,collect,template,new,public
From: https://www.cnblogs.com/shirleyxueli/p/17452494.html

相关文章

  • SpringBoot大文件分片上传/多线程上传
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......
  • WebStorm前端启动JetLinks 物联网基础平台(2.x)
    目录一、环境准备二、下载源码三、安装依赖四、修改配置五、启动项目六、访问项目一、环境准备1.降级node版本为12.22.0使用node版本管理器gnvm_苍穹之跃的博客-以管理员身份打开cmd,cd到node安装目录。2.降级npm版本为[email protected]二、下载源码jetlinks-ui-antd:......
  • IDE后端启动JetLinks 物联网基础平台(2.x)
    目录一、官网二、文档中心三、下载源码四、安装依赖五、IDE配置六、修改配置文件:jetlinks-standalone/src/main/resources/application.yml七、启动项目(项目会自动建表) 一、官网JetLinkshttps://www.jetlinks.cn/#/二、文档中心JetLinks物联网基础平台(2.x)http://doc.jetlinks.cn/......
  • springboot项目rabbitmq消费者消费json格式的String,出现无限循环抛出No method found
    转:springboot项目rabbitmq消费者消费json格式的String,出现无限循环抛出Nomethodfoundforclass[B     ......
  • linux sh脚本启动springboot
    1、restart.sh#!/bin/bashAPP_NAME=xxxxx.jar#定义JAVA程序名LOG_FILE="$APP_NAME.log"#定义日志文件名称#查询进程并终止PID=`ps-ef|grep$APP_NAME|grep-vgrep|awk'{print$2}'`kill-9$PIDecho"$APP_NAME的进程$PID已经终止"#启动jar包,指......
  • RocketMQ启动和端口介绍【转】
    关闭namesrv和broker关闭namesrv服务#进入binshmqshutdownnamesrv   如图关闭broker服务shmqshutdownbroker   如图通过jps验证下 如图第五节:防火墙配置宿主机需要远程访问虚拟机的rocketmq服务和web服务,需要开放相关的端口号,简单粗暴的方式是直接......
  • springboot gradle dockerfle
    本地打包FROMopenjdk:8-jdk-alpineRUNset-eux&&sed-i's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g'/etc/apk/repositoriesRUNmkdir/appCOPYbuild/libs/dataExChangePlatform-0.0.1-SNAPSHOT.jar/app/dataExChangePlatform-0.0.1-SNAPSHOT.......
  • elastic开机自启动
    创建es的系统启动服务文件,进入到cd/etc/init.d目录;cd/etc/init.d【进入到目录】vielasticsearch【创建es系统启动服务文件】 #!/bin/bash#chkconfig:3456337#description:elasticsearch#processname:elasticsearch-7.0.0exportES_HOME=/usr/local/ela......
  • SeaTunnel V2.3.1源码分析--zeta引擎启动过程分析
    今天主要看SeaTunnel自研的数据同步引擎,叫Zeta。首先,如果使用的是zeta引擎,那么第一步一定是运行bin/seatunnel-cluster.sh脚本,这个脚本就是启动zeta的服务端的。打开seatunnel-cluster.sh看看,可以看到其实是去启动seatunnel-core/seatunnel-starter/src/main/java/org/apache/se......
  • SpringBoot Vue3 Element Plus 打造分布式存储系统
    SpringBoot+Vue3+ElementPlus打造分布式存储系统download:3w51xuebccom配置IDEA热部署-devtools开发过程中频繁修改代码,每次都需要重新编译,部署,重启服务器,这无疑极大浪费了我们的时间。解决这个问题的方法就是使用热部署技术。本篇文章将介绍如何在IDEA中使用devtools实现热部署......