springboot集成redis
a.步骤:
1.创建prom文件,进行依赖注入
2.创建springboot启动类进行启动
3.创建application.yml文件
4.创建通用mapper基类TkMapper
5.控制器Controller的编写
6.服务层Service的搭建
7.持久层mapper的构建
8.测试效果图
b.出现的问题以及解决方案
报错以及解决方案:
1. org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context
解决方案:
springboot的启动类命名错误,不能起名为关键字SpringbootApplication为启动类名
2. [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.io.NotSerializableException: com.guigu.liujie.pojo.User] with root cause
解决方案:
给User实体类进行实现序列化Serializable
项目目录:
- 创建prom文件,进行依赖注入
<?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.guigu</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--springboot的mvc加载器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--springboot整合junit-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--test所需包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.0</version>
</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
</project>
2.创建springboot启动类进行启动
/**
* @ClassName SpringbootApplication
* @Description TODO
* @Author liujie
* @Date 2021/6/10 18:52
* @Version 1.0
**/
@SpringBootApplication
@MapperScan(basePackages = {"com.guigu.liujie.mybatis.mapper"})
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class,args);
}
@Bean
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
//设置key的值为字符串序列化方式 那么在使用过程中key 一定只能是字符串
template.setKeySerializer(new StringRedisSerializer());
//设置value的序列化机制为JDK自带的方式
template.setValueSerializer(new JdkSerializationRedisSerializer());
return template;
}
}
3.创建application.yml文件
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/springboot_user?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
password: 123456
username: root
redis:
host: localhost
port: 6379
mybatis:
mapper-locations: classpath:mappers/*.xml #定义xml文件位置,不是必须的,如果需要在xml写sql请配置此选项
type-aliases-package: com.guigu.liujie.pojo # 注意:对应实体类的路径
mapper:
mappers: com.guigu.liujie.mybaits.TkMapper #通用基类配置
identity: MYSQL
4.创建通用mapper基类TkMapper
/**Mapper基类
* @author liujie
*/
public interface TkMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
5.控制器Controller的编写
/**
* @ClassName UserController
* @Description TODO
* @Author liujie
* @Date 2021/6/10 11:18
* @Version 1.0
**/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/findUserAll")
public Object findUserAll(){
return userService.findAllUser();
}
}
6.服务层Service的搭建
/**
* @ClassName UserServiceImpl
* @Description TODO
* @Author liujie
* @Date 2021/6/10 11:00
* @Version 1.0
**/
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Autowired
private RedisTemplate redisTemplate;
/**
* 查询所有用户
*
* @return
*/
@Override
public List<User> findAllUser() {
List<User> userList = (List<User>) redisTemplate.boundValueOps("userList").get();
if(userList==null||userList.size()<=0){
System.out.println("mysql查询");
userList = userMapper.selectAll();
redisTemplate.boundValueOps("userList").set(userList);
}
return userList;
}
}
7.持久层mapper的构建
package com.guigu.liujie.mybaits.mapper;
import com.guigu.liujie.mybaits.TkMapper;
import com.guigu.liujie.pojo.User;
import org.apache.ibatis.annotations.Mapper;
/**
* @author liujie
*/
@Mapper
public interface UserMapper extends TkMapper<User> {
}
8.测试效果图
userList对象以jdk序列化的形式存入了redis中