Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
datax-common
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄营
datax-common
Commits
36b0b886
Commit
36b0b886
authored
Jan 25, 2024
by
hy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
集成common-redis模块
parent
38dfa77b
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
746 additions
and
1 deletions
+746
-1
pom.xml
pom.xml
+4
-0
RedisConfig.java
src/main/java/cn/datax/common/redis/config/RedisConfig.java
+84
-0
DataRedisSerializer.java
...cn/datax/common/redis/serializer/DataRedisSerializer.java
+40
-0
DistributedLock.java
...n/java/cn/datax/common/redis/service/DistributedLock.java
+60
-0
RedisService.java
...main/java/cn/datax/common/redis/service/RedisService.java
+556
-0
spring.factories
src/main/resources/META-INF/spring.factories
+2
-1
No files found.
pom.xml
View file @
36b0b886
...
@@ -79,6 +79,10 @@
...
@@ -79,6 +79,10 @@
<groupId>
org.springframework
</groupId>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-jdbc
</artifactId>
<artifactId>
spring-jdbc
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
org.springframework.data
</groupId>
<artifactId>
spring-data-redis
</artifactId>
</dependency>
</dependencies>
</dependencies>
<dependencyManagement>
<dependencyManagement>
...
...
src/main/java/cn/datax/common/redis/config/RedisConfig.java
0 → 100644
View file @
36b0b886
package
cn
.
datax
.
common
.
redis
.
config
;
import
cn.datax.common.redis.service.DistributedLock
;
import
cn.datax.common.redis.service.RedisService
;
import
com.fasterxml.jackson.annotation.JsonAutoDetect
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
com.fasterxml.jackson.annotation.JsonTypeInfo
;
import
com.fasterxml.jackson.annotation.PropertyAccessor
;
import
com.fasterxml.jackson.databind.DeserializationFeature
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.SerializationFeature
;
import
com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator
;
import
com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.core.*
;
import
org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer
;
import
org.springframework.data.redis.serializer.RedisSerializer
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
@ConditionalOnClass
(
RedisOperations
.
class
)
public
class
RedisConfig
{
/**
* 自定义redis序列化的机制,重新定义一个ObjectMapper.防止和MVC的冲突
*
* @return
*/
@Bean
public
RedisSerializer
<
Object
>
redisSerializer
()
{
ObjectMapper
objectMapper
=
new
ObjectMapper
();
// null数据不返回
objectMapper
.
setSerializationInclusion
(
JsonInclude
.
Include
.
NON_NULL
);
objectMapper
.
setVisibility
(
PropertyAccessor
.
ALL
,
JsonAutoDetect
.
Visibility
.
ANY
);
//反序列化时候遇到不匹配的属性并不抛出异常
objectMapper
.
configure
(
DeserializationFeature
.
FAIL_ON_UNKNOWN_PROPERTIES
,
false
);
//序列化时候遇到空对象不抛出异常
objectMapper
.
configure
(
SerializationFeature
.
FAIL_ON_EMPTY_BEANS
,
false
);
//反序列化的时候如果是无效子类型,不抛出异常
objectMapper
.
configure
(
DeserializationFeature
.
FAIL_ON_INVALID_SUBTYPE
,
false
);
//不使用默认的dateTime进行序列化,
objectMapper
.
configure
(
SerializationFeature
.
WRITE_DATE_KEYS_AS_TIMESTAMPS
,
false
);
//使用JSR310提供的序列化类,里面包含了大量的JDK8时间序列化类
objectMapper
.
registerModule
(
new
JavaTimeModule
());
//启用反序列化所需的类型信息,在属性中添加@class
objectMapper
.
activateDefaultTyping
(
LaissezFaireSubTypeValidator
.
instance
,
ObjectMapper
.
DefaultTyping
.
NON_FINAL
,
JsonTypeInfo
.
As
.
PROPERTY
);
//配置null值的序列化器
GenericJackson2JsonRedisSerializer
.
registerNullValueSerializer
(
objectMapper
,
null
);
return
new
GenericJackson2JsonRedisSerializer
(
objectMapper
);
}
/**
* 实例化 RedisTemplate 对象
*
* @return
*/
@Bean
(
name
=
"redisTemplate"
)
public
RedisTemplate
<
String
,
Object
>
redisTemplate
(
RedisConnectionFactory
redisConnectionFactory
,
RedisSerializer
<
Object
>
redisSerializer
)
{
RedisTemplate
<
String
,
Object
>
redisTemplate
=
new
RedisTemplate
<>();
redisTemplate
.
setConnectionFactory
(
redisConnectionFactory
);
redisTemplate
.
setDefaultSerializer
(
redisSerializer
);
redisTemplate
.
setValueSerializer
(
redisSerializer
);
redisTemplate
.
setHashValueSerializer
(
redisSerializer
);
redisTemplate
.
setKeySerializer
(
StringRedisSerializer
.
UTF_8
);
redisTemplate
.
setHashKeySerializer
(
StringRedisSerializer
.
UTF_8
);
redisTemplate
.
afterPropertiesSet
();
return
redisTemplate
;
}
@Bean
@ConditionalOnBean
(
name
=
"redisTemplate"
)
public
RedisService
redisService
()
{
return
new
RedisService
();
}
@Bean
@ConditionalOnBean
(
name
=
"redisTemplate"
)
public
DistributedLock
distributedLock
()
{
return
new
DistributedLock
();
}
}
\ No newline at end of file
src/main/java/cn/datax/common/redis/serializer/DataRedisSerializer.java
0 → 100644
View file @
36b0b886
package
cn
.
datax
.
common
.
redis
.
serializer
;
import
org.springframework.data.redis.serializer.RedisSerializer
;
import
org.springframework.data.redis.serializer.SerializationException
;
import
java.io.*
;
public
class
DataRedisSerializer
implements
RedisSerializer
<
Object
>
{
@Override
public
byte
[]
serialize
(
Object
o
)
throws
SerializationException
{
ByteArrayOutputStream
byteOut
=
new
ByteArrayOutputStream
();
ObjectOutputStream
objOut
;
try
{
objOut
=
new
ObjectOutputStream
(
byteOut
);
objOut
.
writeObject
(
o
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
byteOut
.
toByteArray
();
}
@Override
public
Object
deserialize
(
byte
[]
bytes
)
throws
SerializationException
{
if
(
bytes
==
null
)
{
return
null
;
}
ByteArrayInputStream
byteIn
=
new
ByteArrayInputStream
(
bytes
);
ObjectInputStream
objIn
;
Object
obj
;
try
{
objIn
=
new
ObjectInputStream
(
byteIn
);
obj
=
objIn
.
readObject
();
}
catch
(
IOException
|
ClassNotFoundException
e
)
{
e
.
printStackTrace
();
return
null
;
}
return
obj
;
}
}
src/main/java/cn/datax/common/redis/service/DistributedLock.java
0 → 100644
View file @
36b0b886
package
cn
.
datax
.
common
.
redis
.
service
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.data.redis.core.script.DefaultRedisScript
;
import
org.springframework.data.redis.core.script.RedisScript
;
import
java.util.Arrays
;
import
java.util.concurrent.TimeUnit
;
/**
* redis分布式锁
*/
@Slf4j
public
class
DistributedLock
{
@Autowired
private
StringRedisTemplate
redisTemplate
;
/**
* 加锁,无阻塞
* @param lock
* @param key
* @param expireTime 锁过期时间单位秒
* @return
*/
public
boolean
tryLock
(
String
lock
,
String
key
,
Long
expireTime
)
{
return
this
.
tryLock
(
lock
,
key
,
expireTime
,
TimeUnit
.
SECONDS
);
}
/**
* 加锁,无阻塞
* @param lock
* @param key
* @param expireTime 锁过期时间
* @param timeUnit
* @return
*/
public
boolean
tryLock
(
String
lock
,
String
key
,
Long
expireTime
,
TimeUnit
timeUnit
)
{
Boolean
success
=
redisTemplate
.
opsForValue
().
setIfAbsent
(
lock
,
key
,
expireTime
,
timeUnit
);
if
(
success
==
null
||
!
success
)
{
log
.
info
(
"申请锁("
+
lock
+
","
+
key
+
")失败"
);
return
false
;
}
log
.
error
(
"申请锁("
+
lock
+
","
+
key
+
")成功"
);
return
true
;
}
public
void
unlock
(
String
lock
,
String
key
)
{
String
script
=
"if redis.call('get', KEYS[1]) == KEYS[2] then return redis.call('del', KEYS[1]) else return 0 end"
;
RedisScript
<
Long
>
redisScript
=
new
DefaultRedisScript
<>(
script
,
Long
.
class
);
Long
result
=
redisTemplate
.
execute
(
redisScript
,
Arrays
.
asList
(
lock
,
key
));
if
(
result
==
null
||
result
==
0
)
{
log
.
info
(
"释放锁("
+
lock
+
","
+
key
+
")失败,该锁不存在或锁已经过期"
);
}
else
{
log
.
info
(
"释放锁("
+
lock
+
","
+
key
+
")成功"
);
}
}
}
src/main/java/cn/datax/common/redis/service/RedisService.java
0 → 100644
View file @
36b0b886
package
cn
.
datax
.
common
.
redis
.
service
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.concurrent.TimeUnit
;
/**
* 定义常用的 Redis操作
*/
public
class
RedisService
{
@Autowired
private
RedisTemplate
<
String
,
Object
>
redisTemplate
;
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
* @return Boolean
*/
public
Boolean
expire
(
String
key
,
Long
time
)
{
try
{
if
(
time
>
0
)
{
redisTemplate
.
expire
(
key
,
time
,
TimeUnit
.
SECONDS
);
}
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 根据key获取过期时间
*
* @param key 键 不能为 null
* @return 时间(秒) 返回 0代表为永久有效
*/
public
Long
getExpire
(
String
key
)
{
return
redisTemplate
.
getExpire
(
key
,
TimeUnit
.
SECONDS
);
}
/**
* 判断 key是否存在
*
* @param key 键
* @return true 存在 false不存在
*/
public
Boolean
hasKey
(
String
key
)
{
try
{
return
redisTemplate
.
hasKey
(
key
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 删除缓存
*
* @param key 可以传一个值 或多个
*/
public
void
del
(
String
...
key
)
{
if
(
key
!=
null
&&
key
.
length
>
0
)
{
if
(
key
.
length
==
1
)
{
redisTemplate
.
delete
(
key
[
0
]);
}
else
{
redisTemplate
.
delete
(
Arrays
.
asList
(
key
));
}
}
}
/**
* 普通缓存获取
*
* @param key 键
* @return 值
*/
public
Object
get
(
String
key
)
{
return
key
==
null
?
null
:
redisTemplate
.
opsForValue
().
get
(
key
);
}
/**
* 普通缓存放入
*
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public
Boolean
set
(
String
key
,
Object
value
)
{
try
{
redisTemplate
.
opsForValue
().
set
(
key
,
value
);
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 普通缓存放入并设置时间
*
* @param key 键
* @param value 值
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public
Boolean
set
(
String
key
,
Object
value
,
Long
time
)
{
try
{
if
(
time
>
0
)
{
redisTemplate
.
opsForValue
().
set
(
key
,
value
,
time
,
TimeUnit
.
SECONDS
);
}
else
{
set
(
key
,
value
);
}
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 递增
*
* @param key 键
* @param delta 要增加几(大于0)
* @return Long
*/
public
Long
incr
(
String
key
,
Long
delta
)
{
if
(
delta
<
0
)
{
throw
new
RuntimeException
(
"递增因子必须大于0"
);
}
return
redisTemplate
.
opsForValue
().
increment
(
key
,
delta
);
}
/**
* 递减
*
* @param key 键
* @param delta 要减少几(小于0)
* @return Long
*/
public
Long
decr
(
String
key
,
Long
delta
)
{
if
(
delta
<
0
)
{
throw
new
RuntimeException
(
"递减因子必须大于0"
);
}
return
redisTemplate
.
opsForValue
().
increment
(
key
,
-
delta
);
}
/**
* HashGet
*
* @param key 键 不能为 null
* @param item 项 不能为 null
* @return 值
*/
public
Object
hget
(
String
key
,
String
item
)
{
return
redisTemplate
.
opsForHash
().
get
(
key
,
item
);
}
/**
* 获取 hashKey对应的所有键值
*
* @param key 键
* @return 对应的多个键值
*/
public
Map
<
Object
,
Object
>
hmget
(
String
key
)
{
return
redisTemplate
.
opsForHash
().
entries
(
key
);
}
/**
* HashSet
*
* @param key 键
* @param map 对应多个键值
* @return true 成功 false 失败
*/
public
Boolean
hmset
(
String
key
,
Map
<
String
,
Object
>
map
)
{
try
{
redisTemplate
.
opsForHash
().
putAll
(
key
,
map
);
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* HashSet 并设置时间
*
* @param key 键
* @param map 对应多个键值
* @param time 时间(秒)
* @return true成功 false失败
*/
public
Boolean
hmset
(
String
key
,
Map
<
String
,
Object
>
map
,
Long
time
)
{
try
{
redisTemplate
.
opsForHash
().
putAll
(
key
,
map
);
if
(
time
>
0
)
{
expire
(
key
,
time
);
}
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key 键
* @param item 项
* @param value 值
* @return true 成功 false失败
*/
public
Boolean
hset
(
String
key
,
String
item
,
Object
value
)
{
try
{
redisTemplate
.
opsForHash
().
put
(
key
,
item
,
value
);
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key 键
* @param item 项
* @param value 值
* @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
* @return true 成功 false失败
*/
public
Boolean
hset
(
String
key
,
String
item
,
Object
value
,
Long
time
)
{
try
{
redisTemplate
.
opsForHash
().
put
(
key
,
item
,
value
);
if
(
time
>
0
)
{
expire
(
key
,
time
);
}
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 删除hash表中的值
*
* @param key 键 不能为 null
* @param item 项 可以使多个不能为 null
*/
public
void
hdel
(
String
key
,
Object
...
item
)
{
redisTemplate
.
opsForHash
().
delete
(
key
,
item
);
}
/**
* 判断hash表中是否有该项的值
*
* @param key 键 不能为 null
* @param item 项 不能为 null
* @return true 存在 false不存在
*/
public
Boolean
hHasKey
(
String
key
,
String
item
)
{
return
redisTemplate
.
opsForHash
().
hasKey
(
key
,
item
);
}
/**
* hash递增 如果不存在,就会创建一个 并把新增后的值返回
*
* @param key 键
* @param item 项
* @param by 要增加几(大于0)
* @return Double
*/
public
Double
hincr
(
String
key
,
String
item
,
Double
by
)
{
return
redisTemplate
.
opsForHash
().
increment
(
key
,
item
,
by
);
}
/**
* hash递减
*
* @param key 键
* @param item 项
* @param by 要减少记(小于0)
* @return Double
*/
public
Double
hdecr
(
String
key
,
String
item
,
Double
by
)
{
return
redisTemplate
.
opsForHash
().
increment
(
key
,
item
,
-
by
);
}
/**
* 根据 key获取 Set中的所有值
*
* @param key 键
* @return Set
*/
public
Set
<
Object
>
sGet
(
String
key
)
{
try
{
return
redisTemplate
.
opsForSet
().
members
(
key
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
* 根据value从一个set中查询,是否存在
*
* @param key 键
* @param value 值
* @return true 存在 false不存在
*/
public
Boolean
sHasKey
(
String
key
,
Object
value
)
{
try
{
return
redisTemplate
.
opsForSet
().
isMember
(
key
,
value
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 将数据放入set缓存
*
* @param key 键
* @param values 值 可以是多个
* @return 成功个数
*/
public
Long
sSet
(
String
key
,
Object
...
values
)
{
try
{
return
redisTemplate
.
opsForSet
().
add
(
key
,
values
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
0L
;
}
}
/**
* 将set数据放入缓存
*
* @param key 键
* @param time 时间(秒)
* @param values 值 可以是多个
* @return 成功个数
*/
public
Long
sSetAndTime
(
String
key
,
Long
time
,
Object
...
values
)
{
try
{
Long
count
=
redisTemplate
.
opsForSet
().
add
(
key
,
values
);
if
(
time
>
0
)
expire
(
key
,
time
);
return
count
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
0L
;
}
}
/**
* 获取set缓存的长度
*
* @param key 键
* @return Long
*/
public
Long
sGetSetSize
(
String
key
)
{
try
{
return
redisTemplate
.
opsForSet
().
size
(
key
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
0L
;
}
}
/**
* 移除值为value的
*
* @param key 键
* @param values 值 可以是多个
* @return 移除的个数
*/
public
Long
setRemove
(
String
key
,
Object
...
values
)
{
try
{
return
redisTemplate
.
opsForSet
().
remove
(
key
,
values
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
0L
;
}
}
/**
* 获取list缓存的内容
*
* @param key 键
* @param start 开始
* @param end 结束 0 到 -1代表所有值
* @return List
*/
public
List
<
Object
>
lGet
(
String
key
,
int
start
,
int
end
)
{
try
{
return
redisTemplate
.
opsForList
().
range
(
key
,
start
,
end
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
* 获取list缓存的长度
*
* @param key 键
* @return Long
*/
public
Long
lGetListSize
(
String
key
)
{
try
{
return
redisTemplate
.
opsForList
().
size
(
key
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
0L
;
}
}
/**
* 通过索引 获取list中的值
*
* @param key 键
* @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;
* index<0时,-1,表尾,-2倒数第二个元素,依次类推
* @return Object
*/
public
Object
lGetIndex
(
String
key
,
Long
index
)
{
try
{
return
redisTemplate
.
opsForList
().
index
(
key
,
index
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @return Boolean
*/
public
Boolean
lSet
(
String
key
,
Object
value
)
{
try
{
redisTemplate
.
opsForList
().
rightPush
(
key
,
value
);
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @param time 时间(秒)
* @return Boolean
*/
public
Boolean
lSet
(
String
key
,
Object
value
,
Long
time
)
{
try
{
redisTemplate
.
opsForList
().
rightPush
(
key
,
value
);
if
(
time
>
0
)
expire
(
key
,
time
);
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @return Boolean
*/
public
Boolean
lSet
(
String
key
,
List
<
Object
>
value
)
{
try
{
redisTemplate
.
opsForList
().
rightPushAll
(
key
,
value
);
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @param time 时间(秒)
* @return Boolean
*/
public
Boolean
lSet
(
String
key
,
List
<
Object
>
value
,
Long
time
)
{
try
{
redisTemplate
.
opsForList
().
rightPushAll
(
key
,
value
);
if
(
time
>
0
)
expire
(
key
,
time
);
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 根据索引修改list中的某条数据
*
* @param key 键
* @param index 索引
* @param value 值
* @return Boolean
*/
public
Boolean
lUpdateIndex
(
String
key
,
Long
index
,
Object
value
)
{
try
{
redisTemplate
.
opsForList
().
set
(
key
,
index
,
value
);
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
/**
* 移除N个值为value
*
* @param key 键
* @param count 移除多少个
* @param value 值
* @return 移除的个数
*/
public
Long
lRemove
(
String
key
,
Long
count
,
Object
value
)
{
try
{
return
redisTemplate
.
opsForList
().
remove
(
key
,
count
,
value
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
0L
;
}
}
}
\ No newline at end of file
src/main/resources/META-INF/spring.factories
View file @
36b0b886
...
@@ -3,4 +3,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
...
@@ -3,4 +3,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.datax.common.config.RestTemplateConfig,\
cn.datax.common.config.RestTemplateConfig,\
cn.datax.common.exception.GlobalExceptionHandler,\
cn.datax.common.exception.GlobalExceptionHandler,\
cn.datax.common.utils.SpringContextHolder,\
cn.datax.common.utils.SpringContextHolder,\
cn.datax.common.database.datasource.CacheDataSourceFactoryBean
cn.datax.common.database.datasource.CacheDataSourceFactoryBean,\
cn.datax.common.redis.config.RedisConfig
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment