Spring Boot Cache配置 序列化成JSON字符串

當(dāng)我們使用@Cacheable注解的時候會將返回的對象緩存起來季希,我們會發(fā)現(xiàn)默認(rèn)緩存的值是二進制的褪那,不方便查看,為此我們自定義序列化配置式塌,改成JSON格式的

配置如下:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

? ? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

? ? <modelVersion>4.0.0</modelVersion>

? ? <groupId>com.cjs.example</groupId>

? ? <artifactId>cjs-springsecurity-example</artifactId>

? ? <version>0.0.1-SNAPSHOT</version>

? ? <packaging>jar</packaging>

? ? <name>cjs-springsecurity-example</name>

? ? <description></description>

? ? <parent>

? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? <artifactId>spring-boot-starter-parent</artifactId>

? ? ? ? <version>2.0.2.RELEASE</version>

? ? ? ? <relativePath/> <!-- lookup parent from repository -->

? ? </parent>

? ? <properties>

? ? ? ? <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

? ? ? ? <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

? ? ? ? <java.version>1.8</java.version>

? ? </properties>

? ? <dependencies>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? ? <artifactId>spring-boot-starter-cache</artifactId>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? ? <artifactId>spring-boot-starter-data-redis</artifactId>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? ? <artifactId>spring-boot-starter-security</artifactId>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? ? <artifactId>spring-boot-starter-thymeleaf</artifactId>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? ? <artifactId>spring-boot-starter-web</artifactId>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.projectlombok</groupId>

? ? ? ? ? ? <artifactId>lombok</artifactId>

? ? ? ? ? ? <optional>true</optional>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? ? <artifactId>spring-boot-starter-test</artifactId>

? ? ? ? ? ? <scope>test</scope>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.security</groupId>

? ? ? ? ? ? <artifactId>spring-security-test</artifactId>

? ? ? ? ? ? <scope>test</scope>

? ? ? ? </dependency>

? ? </dependencies>

? ? <build>

? ? ? ? <plugins>

? ? ? ? ? ? <plugin>

? ? ? ? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>

? ? ? ? ? ? </plugin>

? ? ? ? </plugins>

? ? </build>

</project>

application.yml

spring:

? cache:

? ? type: redis

? ? redis:

? ? ? cache-null-values: false

? ? ? time-to-live: 3600000ms

? redis:

? ? host: 10.123.52.189

? ? port: 6379

? ? database: 5

? ? password: 自己的密碼

logging:

? level:

? ? root: info

RedisConfig.java

package com.cjs.example.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;

import com.fasterxml.jackson.annotation.PropertyAccessor;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.cache.annotation.CachingConfigurerSupport;

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.cache.RedisCacheWriter;

import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

import org.springframework.data.redis.serializer.RedisSerializationContext;

import org.springframework.data.redis.serializer.StringRedisSerializer;

@EnableCaching

@Configuration

public class RedisConfig extends CachingConfigurerSupport {

? ? @Autowired

? ? private RedisConnectionFactory redisConnectionFactory;

? ? @Bean

? ? public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

? ? ? ? Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);

? ? ? ? ObjectMapper objectMapper = new ObjectMapper();

? ? ? ? objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

? ? ? ? objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

? ? ? ? serializer.setObjectMapper(objectMapper);

? ? ? ? RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

? ? ? ? redisTemplate.setConnectionFactory(redisConnectionFactory);

? ? ? ? redisTemplate.setKeySerializer(new StringRedisSerializer());

? ? ? ? redisTemplate.setValueSerializer(serializer);

? ? ? ? redisTemplate.setHashKeySerializer(new StringRedisSerializer());

? ? ? ? redisTemplate.setHashValueSerializer(serializer);

? ? ? ? redisTemplate.afterPropertiesSet();

? ? ? ? return redisTemplate;

? ? }

? ? @Bean

? ? public RedisCacheManager redisCacheManager(RedisTemplate redisTemplate) {

? ? ? ? RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory());

? ? ? ? RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()

? ? ? ? ? ? ? ? .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer()));

? ? ? ? return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);

? ? }

? ? /**

? ? * 二者選其一即可

? ? */


//? ? @Bean

//? ? public RedisCacheConfiguration redisCacheConfiguration() {

//? ? ? ? Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);

//? ? ? ? ObjectMapper objectMapper = new ObjectMapper();

//? ? ? ? objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

//? ? ? ? objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

//? ? ? ? serializer.setObjectMapper(objectMapper);

//? ? ? ? return RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer));

//? ? }

}

UserServiceImpl.java

package com.cjs.example.service.impl;

import com.cjs.example.dao.UserDao;

import com.cjs.example.entity.SysUser;

import com.cjs.example.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.cache.annotation.Cacheable;

import org.springframework.stereotype.Service;

@Service

public class UserServiceImpl implements UserService {

? ? @Autowired

? ? private UserDao userDao;

? ? @Cacheable(cacheNames = "authority", key = "#username")

? ? @Override

? ? public SysUser getUserByName(String username) {

? ? ? ? return userDao.selectByName(username);

? ? }

}

反復(fù)看文檔博敬,一遍又一遍

最最重要的是

歡迎工作一到五年的Java工程師朋友們加入Java架構(gòu)開發(fā): 854393687

群內(nèi)提供免費的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)峰尝、高性能及分布式偏窝、Jvm性能調(diào)優(yōu)、Spring源碼武学,MyBatis祭往,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構(gòu)資料)合理利用自己每一分每一秒的時間來學(xué)習(xí)提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰火窒!趁年輕硼补,使勁拼,給未來的自己一個交代熏矿!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末已骇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子票编,更是在濱河造成了極大的恐慌褪储,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慧域,死亡現(xiàn)場離奇詭異鲤竹,居然都是意外死亡,警方通過查閱死者的電腦和手機吊趾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門宛裕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瑟啃,“玉大人论泛,你說我怎么就攤上這事∮加欤” “怎么了屁奏?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長错负。 經(jīng)常有香客問我坟瓢,道長,這世上最難降的妖魔是什么犹撒? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任折联,我火速辦了婚禮,結(jié)果婚禮上识颊,老公的妹妹穿的比我還像新娘诚镰。我一直安慰自己奕坟,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布清笨。 她就那樣靜靜地躺著月杉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抠艾。 梳的紋絲不亂的頭發(fā)上苛萎,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音检号,去河邊找鬼腌歉。 笑死,一個胖子當(dāng)著我的面吹牛谨敛,可吹牛的內(nèi)容都是我干的究履。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼脸狸,長吁一口氣:“原來是場噩夢啊……” “哼最仑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起炊甲,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤泥彤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卿啡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吟吝,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年颈娜,在試婚紗的時候發(fā)現(xiàn)自己被綠了剑逃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡官辽,死狀恐怖蛹磺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情同仆,我是刑警寧澤萤捆,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站俗批,受9級特大地震影響俗或,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜岁忘,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一辛慰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧干像,春花似錦帅腌、人聲如沸辱志。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揩懒。三九已至,卻和暖如春挽封,著一層夾襖步出監(jiān)牢的瞬間已球,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工辅愿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留智亮,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓点待,卻偏偏與公主長得像阔蛉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子癞埠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理状原,服務(wù)發(fā)現(xiàn),斷路器苗踪,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • 緩存是最直接有效提升系統(tǒng)性能的手段之一颠区。個人認(rèn)為用好用對緩存是優(yōu)秀程序員的必備基本素質(zhì)。 本文結(jié)合實際開發(fā)經(jīng)驗通铲,從...
    Java小生閱讀 797評論 1 3
  • spring boot學(xué)習(xí)筆記 官方地址:https://spring.io/projects 1. 從hello...
    Vchar_Fred閱讀 223評論 0 1
  • 曾經(jīng)青蔥歲月毕莱,曾經(jīng)努力拼搏, 曾經(jīng)你我歡笑著許諾颅夺, 曾經(jīng)你我落淚的拼搏朋截, 為了心中的夢想, 為了夢中的未來吧黄, 可未...
    騎著宇宙飛船去兜風(fēng)閱讀 169評論 0 0