Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dlink
Project
Project
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
zhaowei
dlink
Commits
ffa17ad9
Commit
ffa17ad9
authored
May 29, 2022
by
wenmo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Feature-545][admin] Add Task Pool to solve frequent database writes
parent
5c696e96
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
233 additions
and
56 deletions
+233
-56
JobInstanceController.java
...main/java/com/dlink/controller/JobInstanceController.java
+15
-8
FlinkJobTask.java
dlink-admin/src/main/java/com/dlink/job/FlinkJobTask.java
+10
-7
FlinkJobTaskPool.java
...k-admin/src/main/java/com/dlink/job/FlinkJobTaskPool.java
+33
-0
JobInfoDetail.java
dlink-admin/src/main/java/com/dlink/model/JobInfoDetail.java
+13
-0
JobHistoryService.java
...in/src/main/java/com/dlink/service/JobHistoryService.java
+1
-1
JobInstanceService.java
...n/src/main/java/com/dlink/service/JobInstanceService.java
+6
-2
JobHistoryServiceImpl.java
...in/java/com/dlink/service/impl/JobHistoryServiceImpl.java
+9
-6
JobInstanceServiceImpl.java
...n/java/com/dlink/service/impl/JobInstanceServiceImpl.java
+63
-15
TaskServiceImpl.java
...src/main/java/com/dlink/service/impl/TaskServiceImpl.java
+45
-17
AbstractPool.java
dlink-common/src/main/java/com/dlink/pool/AbstractPool.java
+38
-0
No files found.
dlink-admin/src/main/java/com/dlink/controller/JobInstanceController.java
View file @
ffa17ad9
package
com
.
dlink
.
controller
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.dlink.common.result.ProTableResult
;
import
com.dlink.common.result.Result
;
import
com.dlink.model.Jar
;
import
com.dlink.model.JobInstance
;
import
com.dlink.service.JobInstanceService
;
import
com.dlink.service.TaskService
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
lombok.extern.slf4j.Slf4j
;
/**
* JobInstanceController
...
...
@@ -35,7 +42,7 @@ public class JobInstanceController {
*/
@PostMapping
public
ProTableResult
<
JobInstance
>
listJobInstances
(
@RequestBody
JsonNode
para
)
{
return
jobInstanceService
.
selectForProTable
(
para
);
return
jobInstanceService
.
listJobInstances
(
para
);
}
/**
...
...
dlink-admin/src/main/java/com/dlink/job/FlinkJobTask.java
View file @
ffa17ad9
package
com
.
dlink
.
job
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.context.annotation.DependsOn
;
import
com.dlink.assertion.Asserts
;
import
com.dlink.context.SpringContextUtils
;
import
com.dlink.daemon.constant.FlinkTaskConstant
;
...
...
@@ -9,12 +16,6 @@ import com.dlink.daemon.task.DaemonTaskConfig;
import
com.dlink.model.JobInstance
;
import
com.dlink.model.JobStatus
;
import
com.dlink.service.TaskService
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.context.annotation.DependsOn
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
@DependsOn
(
"springContextUtils"
)
public
class
FlinkJobTask
implements
DaemonTask
{
...
...
@@ -56,6 +57,8 @@ public class FlinkJobTask implements DaemonTask {
if
((!
JobStatus
.
isDone
(
jobInstance
.
getStatus
()))
||
(
Asserts
.
isNotNull
(
jobInstance
.
getFinishTime
())
&&
Duration
.
between
(
jobInstance
.
getFinishTime
(),
LocalDateTime
.
now
()).
toMinutes
()
<
1
))
{
DefaultThreadPool
.
getInstance
().
execute
(
this
);
}
else
{
FlinkJobTaskPool
.
getInstance
().
remove
(
config
.
getId
().
toString
());
}
}
}
dlink-admin/src/main/java/com/dlink/job/FlinkJobTaskPool.java
0 → 100644
View file @
ffa17ad9
package
com
.
dlink
.
job
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
com.dlink.model.JobInfoDetail
;
import
com.dlink.pool.AbstractPool
;
/**
* FlinkJobTaskPool
*
* @author wenmo
* @since 2022/5/28 16:39
*/
public
class
FlinkJobTaskPool
extends
AbstractPool
<
JobInfoDetail
>
{
private
static
volatile
Map
<
String
,
JobInfoDetail
>
flinkJobTaskEntityMap
=
new
ConcurrentHashMap
<>();
private
static
FlinkJobTaskPool
instance
=
new
FlinkJobTaskPool
();
public
static
FlinkJobTaskPool
getInstance
(){
return
instance
;
}
@Override
public
Map
<
String
,
JobInfoDetail
>
getMap
()
{
return
flinkJobTaskEntityMap
;
}
public
void
refresh
(
JobInfoDetail
entity
)
{
entity
.
refresh
();
}
}
dlink-admin/src/main/java/com/dlink/model/JobInfoDetail.java
View file @
ffa17ad9
...
...
@@ -14,9 +14,11 @@ public class JobInfoDetail {
private
ClusterConfiguration
clusterConfiguration
;
private
History
history
;
private
JobHistory
jobHistory
;
private
Integer
refreshCount
;
public
JobInfoDetail
(
Integer
id
)
{
this
.
id
=
id
;
this
.
refreshCount
=
0
;
}
public
Integer
getId
()
{
...
...
@@ -66,4 +68,15 @@ public class JobInfoDetail {
public
void
setJobHistory
(
JobHistory
jobHistory
)
{
this
.
jobHistory
=
jobHistory
;
}
public
void
refresh
()
{
refreshCount
=
refreshCount
+
1
;
if
(
isNeedSave
())
{
refreshCount
=
0
;
}
}
public
boolean
isNeedSave
()
{
return
refreshCount
%
60
==
0
;
}
}
dlink-admin/src/main/java/com/dlink/service/JobHistoryService.java
View file @
ffa17ad9
...
...
@@ -15,5 +15,5 @@ public interface JobHistoryService extends ISuperService<JobHistory> {
JobHistory
getJobHistoryInfo
(
JobHistory
jobHistory
);
JobHistory
refreshJobHistory
(
Integer
id
,
String
jobManagerHost
,
String
jobId
);
JobHistory
refreshJobHistory
(
Integer
id
,
String
jobManagerHost
,
String
jobId
,
boolean
needSave
);
}
dlink-admin/src/main/java/com/dlink/service/JobInstanceService.java
View file @
ffa17ad9
package
com
.
dlink
.
service
;
import
java.util.List
;
import
com.dlink.common.result.ProTableResult
;
import
com.dlink.db.service.ISuperService
;
import
com.dlink.explainer.lineage.LineageResult
;
import
com.dlink.model.JobInfoDetail
;
import
com.dlink.model.JobInstance
;
import
com.dlink.model.JobInstanceStatus
;
import
java.util.List
;
import
com.fasterxml.jackson.databind.JsonNode
;
/**
* JobInstanceService
...
...
@@ -27,4 +29,6 @@ public interface JobInstanceService extends ISuperService<JobInstance> {
LineageResult
getLineage
(
Integer
id
);
JobInstance
getJobInstanceByTaskId
(
Integer
id
);
ProTableResult
<
JobInstance
>
listJobInstances
(
JsonNode
para
);
}
dlink-admin/src/main/java/com/dlink/service/impl/JobHistoryServiceImpl.java
View file @
ffa17ad9
package
com
.
dlink
.
service
.
impl
;
import
org.springframework.stereotype.Service
;
import
com.dlink.api.FlinkAPI
;
import
com.dlink.assertion.Asserts
;
import
com.dlink.db.service.impl.SuperServiceImpl
;
...
...
@@ -8,7 +10,6 @@ import com.dlink.model.JobHistory;
import
com.dlink.service.JobHistoryService
;
import
com.dlink.utils.JSONUtil
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
org.springframework.stereotype.Service
;
/**
* JobHistoryServiceImpl
...
...
@@ -64,7 +65,7 @@ public class JobHistoryServiceImpl extends SuperServiceImpl<JobHistoryMapper, Jo
}
@Override
public
JobHistory
refreshJobHistory
(
Integer
id
,
String
jobManagerHost
,
String
jobId
)
{
public
JobHistory
refreshJobHistory
(
Integer
id
,
String
jobManagerHost
,
String
jobId
,
boolean
needSave
)
{
JobHistory
jobHistory
=
new
JobHistory
();
jobHistory
.
setId
(
id
);
try
{
...
...
@@ -78,11 +79,13 @@ public class JobHistoryServiceImpl extends SuperServiceImpl<JobHistoryMapper, Jo
jobHistory
.
setCheckpointsJson
(
JSONUtil
.
toJsonString
(
checkPoints
));
jobHistory
.
setCheckpointsConfigJson
(
JSONUtil
.
toJsonString
(
checkPointsConfig
));
jobHistory
.
setConfigJson
(
JSONUtil
.
toJsonString
(
jobsConfig
));
if
(
needSave
)
{
if
(
Asserts
.
isNotNull
(
getById
(
id
)))
{
updateById
(
jobHistory
);
}
else
{
save
(
jobHistory
);
}
}
}
catch
(
Exception
e
)
{
}
finally
{
return
jobHistory
;
...
...
dlink-admin/src/main/java/com/dlink/service/impl/JobInstanceServiceImpl.java
View file @
ffa17ad9
package
com
.
dlink
.
service
.
impl
;
import
java.util.List
;
import
java.util.Map
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.dlink.assertion.Asserts
;
import
com.dlink.common.result.ProTableResult
;
import
com.dlink.db.service.impl.SuperServiceImpl
;
import
com.dlink.db.util.ProTableUtil
;
import
com.dlink.explainer.lineage.LineageBuilder
;
import
com.dlink.explainer.lineage.LineageResult
;
import
com.dlink.job.FlinkJobTaskPool
;
import
com.dlink.mapper.JobInstanceMapper
;
import
com.dlink.model.*
;
import
com.dlink.service.*
;
import
com.dlink.model.History
;
import
com.dlink.model.JobInfoDetail
;
import
com.dlink.model.JobInstance
;
import
com.dlink.model.JobInstanceCount
;
import
com.dlink.model.JobInstanceStatus
;
import
com.dlink.model.JobStatus
;
import
com.dlink.service.ClusterConfigurationService
;
import
com.dlink.service.ClusterService
;
import
com.dlink.service.HistoryService
;
import
com.dlink.service.JobHistoryService
;
import
com.dlink.service.JobInstanceService
;
import
com.dlink.utils.JSONUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
/**
* JobInstanceServiceImpl
...
...
@@ -99,7 +117,13 @@ public class JobInstanceServiceImpl extends SuperServiceImpl<JobInstanceMapper,
@Override
public
JobInfoDetail
getJobInfoDetailInfo
(
JobInstance
jobInstance
)
{
Asserts
.
checkNull
(
jobInstance
,
"该任务实例不存在"
);
JobInfoDetail
jobInfoDetail
=
new
JobInfoDetail
(
jobInstance
.
getId
());
JobInfoDetail
jobInfoDetail
;
FlinkJobTaskPool
pool
=
FlinkJobTaskPool
.
getInstance
();
String
key
=
jobInstance
.
getId
().
toString
();
if
(
pool
.
exist
(
key
))
{
jobInfoDetail
=
pool
.
get
(
key
);
}
else
{
jobInfoDetail
=
new
JobInfoDetail
(
jobInstance
.
getId
());
jobInfoDetail
.
setInstance
(
jobInstance
);
jobInfoDetail
.
setCluster
(
clusterService
.
getById
(
jobInstance
.
getClusterId
()));
jobInfoDetail
.
setJobHistory
(
jobHistoryService
.
getJobHistory
(
jobInstance
.
getId
()));
...
...
@@ -109,6 +133,7 @@ public class JobInstanceServiceImpl extends SuperServiceImpl<JobInstanceMapper,
if
(
Asserts
.
isNotNull
(
history
)
&&
Asserts
.
isNotNull
(
history
.
getClusterConfigurationId
()))
{
jobInfoDetail
.
setClusterConfiguration
(
clusterConfigurationService
.
getClusterConfigById
(
history
.
getClusterConfigurationId
()));
}
}
return
jobInfoDetail
;
}
...
...
@@ -123,4 +148,27 @@ public class JobInstanceServiceImpl extends SuperServiceImpl<JobInstanceMapper,
return
baseMapper
.
getJobInstanceByTaskId
(
id
);
}
@Override
public
ProTableResult
<
JobInstance
>
listJobInstances
(
JsonNode
para
)
{
Integer
current
=
para
.
has
(
"current"
)
?
para
.
get
(
"current"
).
asInt
()
:
1
;
Integer
pageSize
=
para
.
has
(
"pageSize"
)
?
para
.
get
(
"pageSize"
).
asInt
()
:
10
;
QueryWrapper
<
JobInstance
>
queryWrapper
=
new
QueryWrapper
<>();
ProTableUtil
.
autoQueryDefalut
(
para
,
queryWrapper
);
ObjectMapper
mapper
=
new
ObjectMapper
();
Map
<
String
,
Object
>
param
=
mapper
.
convertValue
(
para
,
Map
.
class
);
Page
<
JobInstance
>
page
=
new
Page
<>(
current
,
pageSize
);
List
<
JobInstance
>
list
=
baseMapper
.
selectForProTable
(
page
,
queryWrapper
,
param
);
FlinkJobTaskPool
pool
=
FlinkJobTaskPool
.
getInstance
();
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
if
(
pool
.
exist
(
list
.
get
(
i
).
getId
().
toString
()))
{
list
.
get
(
i
).
setStatus
(
pool
.
get
(
list
.
get
(
i
).
getId
().
toString
()).
getInstance
().
getStatus
());
list
.
get
(
i
).
setUpdateTime
(
pool
.
get
(
list
.
get
(
i
).
getId
().
toString
()).
getInstance
().
getUpdateTime
());
list
.
get
(
i
).
setFinishTime
(
pool
.
get
(
list
.
get
(
i
).
getId
().
toString
()).
getInstance
().
getFinishTime
());
list
.
get
(
i
).
setError
(
pool
.
get
(
list
.
get
(
i
).
getId
().
toString
()).
getInstance
().
getError
());
list
.
get
(
i
).
setDuration
(
pool
.
get
(
list
.
get
(
i
).
getId
().
toString
()).
getInstance
().
getDuration
());
}
}
return
ProTableResult
.<
JobInstance
>
builder
().
success
(
true
).
data
(
list
).
total
(
page
.
getTotal
()).
current
(
current
).
pageSize
(
pageSize
).
build
();
}
}
dlink-admin/src/main/java/com/dlink/service/impl/TaskServiceImpl.java
View file @
ffa17ad9
...
...
@@ -35,6 +35,7 @@ import com.dlink.gateway.config.SavePointType;
import
com.dlink.gateway.model.JobInfo
;
import
com.dlink.gateway.result.SavePointResult
;
import
com.dlink.job.FlinkJobTask
;
import
com.dlink.job.FlinkJobTaskPool
;
import
com.dlink.job.Job
;
import
com.dlink.job.JobConfig
;
import
com.dlink.job.JobManager
;
...
...
@@ -47,6 +48,7 @@ import com.dlink.model.AlertHistory;
import
com.dlink.model.AlertInstance
;
import
com.dlink.model.Cluster
;
import
com.dlink.model.DataBase
;
import
com.dlink.model.History
;
import
com.dlink.model.Jar
;
import
com.dlink.model.JobHistory
;
import
com.dlink.model.JobInfoDetail
;
...
...
@@ -63,6 +65,7 @@ import com.dlink.service.AlertHistoryService;
import
com.dlink.service.ClusterConfigurationService
;
import
com.dlink.service.ClusterService
;
import
com.dlink.service.DataBaseService
;
import
com.dlink.service.HistoryService
;
import
com.dlink.service.JarService
;
import
com.dlink.service.JobHistoryService
;
import
com.dlink.service.JobInstanceService
;
...
...
@@ -101,6 +104,8 @@ public class TaskServiceImpl extends SuperServiceImpl<TaskMapper, Task> implemen
private
AlertGroupService
alertGroupService
;
@Autowired
private
AlertHistoryService
alertHistoryService
;
@Autowired
private
HistoryService
historyService
;
@Value
(
"${spring.datasource.driver-class-name}"
)
private
String
driver
;
...
...
@@ -581,30 +586,53 @@ public class TaskServiceImpl extends SuperServiceImpl<TaskMapper, Task> implemen
@Override
public
JobInstance
refreshJobInstance
(
Integer
id
,
boolean
isCoercive
)
{
JobInfoDetail
jobInfoDetail
;
FlinkJobTaskPool
pool
=
FlinkJobTaskPool
.
getInstance
();
String
key
=
id
.
toString
();
if
(
pool
.
exist
(
key
))
{
jobInfoDetail
=
pool
.
get
(
key
);
}
else
{
jobInfoDetail
=
new
JobInfoDetail
(
id
);
JobInstance
jobInstance
=
jobInstanceService
.
getById
(
id
);
Asserts
.
checkNull
(
jobInstance
,
"该任务实例不存在"
);
if
(!
isCoercive
&&
!
inRefreshPlan
(
jobInstance
))
{
return
jobInstance
;
}
String
status
=
jobInstance
.
getStatus
();
jobInfoDetail
.
setInstance
(
jobInstance
);
Cluster
cluster
=
clusterService
.
getById
(
jobInstance
.
getClusterId
());
JobHistory
jobHistoryJson
=
jobHistoryService
.
refreshJobHistory
(
id
,
cluster
.
getJobManagerHost
(),
jobInstance
.
getJid
());
jobInfoDetail
.
setCluster
(
cluster
);
History
history
=
historyService
.
getById
(
jobInstance
.
getHistoryId
());
history
.
setConfig
(
JSONUtil
.
parseObject
(
history
.
getConfigJson
()));
if
(
Asserts
.
isNotNull
(
history
)
&&
Asserts
.
isNotNull
(
history
.
getClusterConfigurationId
()))
{
jobInfoDetail
.
setClusterConfiguration
(
clusterConfigurationService
.
getClusterConfigById
(
history
.
getClusterConfigurationId
()));
}
jobInfoDetail
.
setHistory
(
history
);
pool
.
push
(
key
,
jobInfoDetail
);
}
if
(!
isCoercive
&&
!
inRefreshPlan
(
jobInfoDetail
.
getInstance
()))
{
return
jobInfoDetail
.
getInstance
();
}
JobHistory
jobHistoryJson
=
jobHistoryService
.
refreshJobHistory
(
id
,
jobInfoDetail
.
getCluster
().
getJobManagerHost
(),
jobInfoDetail
.
getInstance
().
getJid
(),
jobInfoDetail
.
isNeedSave
());
JobHistory
jobHistory
=
jobHistoryService
.
getJobHistoryInfo
(
jobHistoryJson
);
if
(
Asserts
.
isNull
(
jobHistory
.
getJob
())
||
jobHistory
.
getJob
().
has
(
FlinkRestResultConstant
.
ERRORS
))
{
jobInstance
.
setStatus
(
JobStatus
.
UNKNOWN
.
getValue
());
jobInfoDetail
.
setJobHistory
(
jobHistory
);
String
status
=
jobInfoDetail
.
getInstance
().
getStatus
();
boolean
jobStatusChanged
=
false
;
if
(
Asserts
.
isNull
(
jobInfoDetail
.
getJobHistory
().
getJob
())
||
jobInfoDetail
.
getJobHistory
().
getJob
().
has
(
FlinkRestResultConstant
.
ERRORS
))
{
jobInfoDetail
.
getInstance
().
setStatus
(
JobStatus
.
UNKNOWN
.
getValue
());
}
else
{
jobIn
stance
.
setDuration
(
jobHistory
.
getJob
().
get
(
FlinkRestResultConstant
.
JOB_DURATION
).
asLong
()
/
1000
);
jobIn
stance
.
setStatus
(
jobHistory
.
getJob
().
get
(
FlinkRestResultConstant
.
JOB_STATE
).
asText
());
jobIn
foDetail
.
getInstance
().
setDuration
(
jobInfoDetail
.
getJobHistory
()
.
getJob
().
get
(
FlinkRestResultConstant
.
JOB_DURATION
).
asLong
()
/
1000
);
jobIn
foDetail
.
getInstance
().
setStatus
(
jobInfoDetail
.
getJobHistory
()
.
getJob
().
get
(
FlinkRestResultConstant
.
JOB_STATE
).
asText
());
}
if
(
JobStatus
.
isDone
(
jobInstance
.
getStatus
())
&&
!
status
.
equals
(
jobInstance
.
getStatus
()))
{
jobInstance
.
setFinishTime
(
LocalDateTime
.
now
());
handleJobDone
(
jobInstance
);
if
(
JobStatus
.
isDone
(
jobInfoDetail
.
getInstance
().
getStatus
())
&&
!
status
.
equals
(
jobInfoDetail
.
getInstance
().
getStatus
()))
{
jobStatusChanged
=
true
;
jobInfoDetail
.
getInstance
().
setFinishTime
(
LocalDateTime
.
now
());
handleJobDone
(
jobInfoDetail
.
getInstance
());
}
if
(
isCoercive
)
{
DaemonFactory
.
addTask
(
DaemonTaskConfig
.
build
(
FlinkJobTask
.
TYPE
,
jobInstance
.
getId
()));
DaemonFactory
.
addTask
(
DaemonTaskConfig
.
build
(
FlinkJobTask
.
TYPE
,
jobInfoDetail
.
getInstance
().
getId
()));
}
if
(
jobStatusChanged
||
jobInfoDetail
.
isNeedSave
())
{
jobInstanceService
.
updateById
(
jobInfoDetail
.
getInstance
());
}
jobInstanceService
.
updateById
(
jobInstance
);
return
jobIn
stance
;
pool
.
refresh
(
jobInfoDetail
);
return
jobIn
foDetail
.
getInstance
()
;
}
private
boolean
inRefreshPlan
(
JobInstance
jobInstance
)
{
...
...
dlink-common/src/main/java/com/dlink/pool/AbstractPool.java
0 → 100644
View file @
ffa17ad9
package
com
.
dlink
.
pool
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* AbstractPool
*
* @author wenmo
* @since 2022/5/28 19:40
*/
public
abstract
class
AbstractPool
<
T
>{
public
abstract
Map
<
String
,
T
>
getMap
();
public
boolean
exist
(
String
key
)
{
if
(
getMap
().
containsKey
(
key
))
{
return
true
;
}
return
false
;
}
public
int
push
(
String
key
,
T
entity
)
{
getMap
().
put
(
key
,
entity
);
return
getMap
().
size
();
}
public
int
remove
(
String
key
)
{
getMap
().
remove
(
key
);
return
getMap
().
size
();
}
public
T
get
(
String
key
)
{
return
getMap
().
get
(
key
);
}
public
abstract
void
refresh
(
T
entity
);
}
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