首页 > 数据库 > 【Spring-boot-route(十一)数据库配置信息加密+(十二)整合redis做为缓存】

【Spring-boot-route(十一)数据库配置信息加密+(十二)整合redis做为缓存】

时间:2023-02-13 16:01:31浏览次数:37  
标签:return Spring route redis value key spring public

spring-boot-route(十一)数据库配置信息加密

前言:

Spring Boot最大的特点就是自动配置了,大大的减少了传统Spring框架的繁琐配置,通过几行简单的配置就可以完成其他组件的接入。比如你想要连接mysql数据库,只需要的配置文件里面加入mysql的一些配置信息就可以了。为了保护数据的安全性,越来越多的公司选择加密这些重要信息。接下来一起来看看如何实现配置加密文件并且成功连接数据库的。

配置信息加密有好几种方式,这里我只详细的写一下我比较常用的一种方式。首先通过某种加密算法将用户名和密码进行加密,然后在配置文件中用加密串代替原来的明文。然后自定义数据源,在自定义数据源中解密用户名和密码。

SpringBoot自动装配

SpringBoot的自动装配,以前的推文中也详细的讲到过,今天简单来复习一下。在每个Spring Boot的应用的启动类上都能发现有一个注解​​@SpringBootApplication​​,这个注解包含的注解​​@EnableAutoConfiguration​​就是用来完成自动装配的。这个注解通过导入类​​AutoConfigurationImportSelector​​,这个类中有一个方法​​selectImports​​,其作用就是扫描所有jar包中的​​META-INF/spring.factories​​文件,去加载里面的具体实现类,完成自动装配。

在​​spring-boot-autoconfigure​​jar包的​​META-INF/spring.factories​​文件中指定了一个类用来加载数据库配置信息,这个类就是​​org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration​​。

自定义数据源

这里使用​​HikariDataSource​​作为自定义的数据源,自定义的数据源目的就是为了解密配置文件中的配置信息。

 【Spring-boot-route(十一)数据库配置信息加密+(十二)整合redis做为缓存】_spring

配置文件信息如下:

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/xxx
username: aMkeRCLWqNw=
password: rq-fzucH32I=

具体的加解密算法这里就不在提及了,根据具体要求选择一种可逆的加密算法就可以了


》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

接下来讲解:

spring-boot-route(十二)整合redis做为缓存

redis简介

redis作为一种非关系型数据库,读写非常快,应用十分广泛,它采用key-value的形式存储数据,value常用的五大数据类型有string(字符串),list(链表),set(集合),zset(有序集合)和hash(哈希表)。

redis的特性决定了它的功能,它可以用来做以下这些事情!

  1. 排行榜,利用zset可以方便的实现排序功能
  2. 计数器,利用redis中原子性的自增操作,可以统计到阅读量,点赞量等功能
  3. 简单消息队列,list存储结构,满足先进先出的原则,可以使用lpush/rpop或rpush/lpop实现简单消息队列
  4. session共享,分布式系统中,可以利用redis实现session共享。spring官方提供的分布式解决方案Spring Session就是利用redis 实现的。

Spring Boot对redis也实现自动化装配,使用非常方便。

Spring Boot整合redis

1. 引入redis依赖


<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
</dependencies>

2. 配置redis相关信息


spring:
redis:
# redis库
database: 0
# redis 服务器地址
host: localhost
# redis 端口号
port: 6379
# redis 密码
password:
# 连接超时时间(毫秒)
timeout: 1000
lettuce:
pool:
# 连接池最大链接数(负数表示没有限制)
max-active: 8
# 连接池最大阻塞等待时间(负数表示没有限制)
max-wait: -1
# 连接池最大空闲连接数
max-idle: 8
# 连接池最小空闲连接数
min-idle: 0

3. 操作redis

SpringBoot提供了两个bean来操作redis,分别是​​RedisTemplate​​ 和 ​​StringRedisTemplate​​,这两者的主要区别如下。

​RedisTemplate​​使用的是​​JdkSerializationRedisSerializer​​ 存入数据会将数据先序列化成字节数组然后在存入Redis数据库。

​StringRedisTemplate​​使用的是StringRedisSerializer。

下面一起来看看效果:


@RestController
public class RedisDemo {

@Autowired
private RedisTemplate redisTemplate;

@Autowired
private StringRedisTemplate stringRedisTemplate;

@GetMapping("redisTmeplateData")
public void redisTemplateData(){

redisTemplate.opsForValue().set("name","Java旅途");
}

@GetMapping("stringRedisTemplateData")
public void stringRedisTemplateData(){

stringRedisTemplate.opsForValue().set("desc","坚持分享java技术栈");
}
}

第一个方法存入的数据如下图

 【Spring-boot-route(十一)数据库配置信息加密+(十二)整合redis做为缓存】_redis_02

第二个方法存入的数据如下图

 【Spring-boot-route(十一)数据库配置信息加密+(十二)整合redis做为缓存】_缓存_03

由于RedisTemplate是序列化成字节数组存储的,因此在redis客户端的可读性并不好。


自动缓存

​@Cacheable​​可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。

如果添加了​​@Cacheable​​注解,那么方法被调用后,值会被存入redis,下次再调用的时候会直接从redis中取值返回。


@GetMapping("getStudent")
@Cacheable(value = "student:key")
public Student getStudent(){
log.info("我不是缓存,我是new的对象!");
Student student = new Student("Java旅途",26);
return student;
}

记得要开启缓存,在启动类加上@EnableCaching​注解

访问上面的方法,如果不打印日志,则是从缓存中获取的值。


封装redisUtils

RedisTemplate提供了很多方法来操作redis,但是找起来比较费事,为了更好的操作redis,一般会封装redisUtils来满足业务开发。这里简单封装几个做个示例,如果开发中有需求可以自己封装。


public class RedisUtils {

@Autowired
private RedisTemplate redisTemplate;

/**
* 普通存入
* @param key
* @param value
* @return
*/
public boolean set(String key,Object value){
try {
redisTemplate.opsForValue().set(key,value);
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}

/**
* 普通获取key
* @param key
* @return
*/
public Object get(String key){
return key == null ? null : redisTemplate.opsForValue().get(key);
}

/**
* 存入key,设置过期时长
* @param key
* @param value
* @param time
* @return
*/
public boolean set(String key,Object value,long time){
try {
if(time > 0){
redisTemplate.opsForValue().set(key,value,time, TimeUnit.SECONDS);
}else{
redisTemplate.opsForValue().set(key,value);
}
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}

/**
* 判断key是否存在
* @param key
* @return
*/
public boolean exists(String key){
try {
return redisTemplate.hasKey(key);
}catch (Exception e){
e.printStackTrace();
return false;
}
}

/**
* 删除key
* @param key
*/
public void del(String key){
try {
if(key != null && key.length() > 0){
redisTemplate.delete(key);
}
}catch (Exception e){
e.printStackTrace();
}
}
}

此是spring-boot-route系列的第十二篇文章,这个系列的文章都比较简单,主要目的就是为了帮助初次接触Spring Boot 的同学有一个系统的认识。

标签:return,Spring,route,redis,value,key,spring,public
From: https://blog.51cto.com/u_15874356/6053305

相关文章

  • docker安装redis:6.0.8(挂载外部redis.conf启动)
    docker安装redis:6.0.8​​1、从dockerhub上(阿里云加速器)拉取redis镜像到本地​​​​2、在centos宿主机文件模板拷贝进/zzyyuse/redis目录下​​​​3、修改/zzyyuse/re......
  • redis命令操作list和set&sortedset以及通用命令
    列表类型list:可以添加一个元素到列表的头部(左边)或者尾部(右边) 1.添加: 1.lpushkeyvalue:将元素加入列表左表 2.rpushkeyvalue:将元素加入列表右边 ......
  • Redis常用数据类型
    1.通用命令-KEYS:查看符合模板的所有key,`不建议在生产环境设备上使用`-DEL:删除一个指定的key-EXISTS:判断key是否存在-EXPIRE:给一个key设置有效期,有效期到期时该ke......
  • Redis主从模式的优缺点
    优点:一个Master可以同步多个SlavesSlave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结......
  • Redis数据持久化、数据备份、数据的故障恢复
    1.redis持久化的意义----redis故障恢复在实际的生产环境中,很可能会遇到redis突然挂掉的情况,比如redis的进程死掉了、电缆被施工队挖了(支付宝例子)等等,总之一定会遇到各......
  • Docker 服务编排 快速部署 SpringCloud 项目 (一)
    一、docker-compose.ymlversion:"3.3"networks:zeal:volumes:data:services:gateway:restart:alwaysbuild:context:./gateway......
  • spring 快速上手spring
    HelloSpring导入Jar包注:spring需要导入commons-logging进行日志记录.我们利用maven,他会自动下载对应的依赖项.<dependency><groupId>org.springframework......
  • MQ的定时任务改装,实现自定义定时:MQ+redis
    packagecom.*.server.live.listener;importcom.*.common.core.entity.constant.LiveConstant;importcom.*.common.redis.service.RedisService;importcom.*.serve......
  • spring(七) - Sleuth链路追踪
    服务跟踪的具体步骤sleuth系统自动埋点并把数据发给zipkin,ziplin负责存储和展示数据。 具体实现cmd执行jar  代码执行(server、licent都需要配)<!--添加jar--......
  • 【Spring】Bean装配类注解
     默认注入类型多个同类型Bean注入失败依赖使用目标(@Target)@AutoWired通过type默认首先安装属性名称进行注入结合@Qualifier注解(value属性)设置注入的Bean......