1.redis和其他配置
server:
port: 8090
# Spring Boot 的数据源配置
spring:
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
username: scott
password: Aaaa8888
redis:
host: 192.168.220.130
database: 1
jedis: # 配置jedis线程池,也可以配置Lettuce
pool:
max-active: 8 # 最大活动数量()
max-wait: -1 # 连接池最大阻塞时间 (使用负数表示没有限制)
port: 6379 # 6379默认端口,不配置就取默认
password: 123456
# mybatis-plus相关配置
mybatis-plus:
# xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
mapper-locations: classpath:mapper1 15 * * ?"
2.添加pom依赖
<!-- 引用Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3.redis工具类
package com.jsxy.servic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
@Component
public class RedisLockUtil {
@Autowired
private StringRedisTemplate redisTemplate;
public boolean lock(String key, String value, long expireTime) {
Boolean success = redisTemplate.opsForValue().setIfAbsent(key, value);
if (success != null && success) {
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
return true;
}
return false;
}
public void unlock(String key, String value) {
String currentValue = redisTemplate.opsForValue().get(key);
if (currentValue != null && currentValue.equals(value)) {
redisTemplate.delete(key);
}
}
}
4.业务逻辑代码
package com.jsxy;
import com.jsxy.entity.User;
import com.jsxy.servic.RedisLockUtil;
import com.jsxy.servic.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class TestScheduling {
@Autowired
private UserService userService;
@Autowired
private RedisLockUtil redisLockUtil;
@Async(value="taskExecutor")
@Scheduled(cron="${my.test.startTime}")
public void printVal(){
User user = new User();
user.setName("王小王");
user.setAdress("江苏盱眙");
user.setAge(28);
user.setSex("男");
Date data = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dataStr = sdf.format(data);
user.setCreateTime(dataStr);
String key = user.getName();
String value = "lockValue";
long expireTime = 30;
boolean success = redisLockUtil.lock(key, value, expireTime);
if (success) {
try {
userService.insertUser(user);
System.out.println("执行成功!");
} finally {
redisLockUtil.unlock(key, value);
System.out.println("释放锁成功!");
}
} else {
System.out.println("执行失败!");
}
}
}
5.mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jsxy.mapper.UserMapper">
<insert id="insertUser" parameterType="com.jsxy.entity.User">
insert into USERS(name, age, adress, sex, create_time)
values (#{user.name}, #{user.age}, #{user.adress}, #{user.sex}, #{user.createTime})
</insert>
</mapper>
6.结果每一时间段不会有重复数据生成

