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做为缓存
redis简介
redis作为一种非关系型数据库,读写非常快,应用十分广泛,它采用key-value的形式存储数据,value常用的五大数据类型有string(字符串),list(链表),set(集合),zset(有序集合)和hash(哈希表)。
redis的特性决定了它的功能,它可以用来做以下这些事情!
- 排行榜,利用zset可以方便的实现排序功能
- 计数器,利用redis中原子性的自增操作,可以统计到阅读量,点赞量等功能
- 简单消息队列,list存储结构,满足先进先出的原则,可以使用lpush/rpop或rpush/lpop实现简单消息队列
- session共享,分布式系统中,可以利用redis实现session共享。spring官方提供的分布式解决方案Spring Session就是利用redis 实现的。
Spring Boot对redis也实现自动化装配,使用非常方便。
Spring Boot整合redis
1. 引入redis依赖
2. 配置redis相关信息
3. 操作redis
SpringBoot提供了两个bean来操作redis,分别是RedisTemplate
和 StringRedisTemplate
,这两者的主要区别如下。
RedisTemplate
使用的是JdkSerializationRedisSerializer
存入数据会将数据先序列化成字节数组然后在存入Redis数据库。
StringRedisTemplate
使用的是StringRedisSerializer。
下面一起来看看效果:
第一个方法存入的数据如下图:
第二个方法存入的数据如下图:
由于RedisTemplate是序列化成字节数组存储的,因此在redis客户端的可读性并不好。
自动缓存
@Cacheable
可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。
如果添加了@Cacheable
注解,那么方法被调用后,值会被存入redis,下次再调用的时候会直接从redis中取值返回。
记得要开启缓存,在启动类加上@EnableCaching
注解
访问上面的方法,如果不打印日志,则是从缓存中获取的值。
封装redisUtils
RedisTemplate提供了很多方法来操作redis,但是找起来比较费事,为了更好的操作redis,一般会封装redisUtils来满足业务开发。这里简单封装几个做个示例,如果开发中有需求可以自己封装。
此是spring-boot-route系列的第十二篇文章,这个系列的文章都比较简单,主要目的就是为了帮助初次接触Spring Boot 的同学有一个系统的认识。