Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-zx-biz
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
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
Jobs
Commits
Open sidebar
项目统一框架
一体化_户用光伏项目代码
amos-boot-zx-biz
Commits
aefbd010
Commit
aefbd010
authored
May 27, 2024
by
朱晨阳
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/developer' into developer
parents
5328203c
3aaafd36
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
138 additions
and
40 deletions
+138
-40
pom.xml
amos-boot-data/amos-boot-data-housepvapi/pom.xml
+2
-0
HousevPVapiApplication.java
...rc/main/java/com/yeejoin/amos/HousevPVapiApplication.java
+7
-6
ImasterUtils.java
...com/yeejoin/amos/api/householdapi/Utils/ImasterUtils.java
+41
-27
KsolarRequestUtil.java
...eejoin/amos/api/householdapi/Utils/KsolarRequestUtil.java
+1
-1
GoodWeDataAcquisitionServiceImpl.java
...i/face/service/impl/GoodWeDataAcquisitionServiceImpl.java
+2
-2
SunlightServiceImpl.java
...i/householdapi/face/service/impl/SunlightServiceImpl.java
+9
-4
ListenerAsyncConfiguration.java
...a/com/yeejoin/amos/config/ListenerAsyncConfiguration.java
+76
-0
No files found.
amos-boot-data/amos-boot-data-housepvapi/pom.xml
View file @
aefbd010
...
...
@@ -58,6 +58,7 @@
<artifactId>
tyboot-component-emq
</artifactId>
<version>
${tyboot-version}
</version>
</dependency>
<!--
<dependency>
<groupId>org.typroject</groupId>
<artifactId>tyboot-component-event</artifactId>
...
...
@@ -69,6 +70,7 @@
</exclusion>
</exclusions>
</dependency>
-->
<dependency>
<groupId>
org.typroject
</groupId>
<artifactId>
tyboot-component-opendata
</artifactId>
...
...
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/HousevPVapiApplication.java
View file @
aefbd010
...
...
@@ -5,23 +5,21 @@ import java.net.InetAddress;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.boot.web.servlet.ServletComponentScan
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
import
org.springframework.cloud.netflix.eureka.EnableEurekaClient
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.context.ConfigurableApplicationContext
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.context.annotation.FilterType
;
import
org.springframework.core.env.Environment
;
import
org.springframework.scheduling.annotation.EnableAsync
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.transaction.annotation.EnableTransactionManagement
;
import
org.typroject.tyboot.core.restful.exception.GlobalExceptionHandler
;
/**
*
* <pre>
...
...
@@ -41,10 +39,13 @@ import org.typroject.tyboot.core.restful.exception.GlobalExceptionHandler;
@EnableScheduling
@MapperScan
(
value
=
{
"org.typroject.tyboot.*.*.face.orm.dao"
,
"com.yeejoin.amos.api.*.face.orm.dao"
,
"org.typroject.tyboot.face.*.orm.dao*"
,
"com.yeejoin.amos.boot.biz.common.dao.mapper"
})
@ComponentScan
({
"org.typroject"
,
"com.yeejoin.amos"
})
@SpringBootApplication
(
exclude
=
{
DataSourceAutoConfiguration
.
class
,
DataSourceTransactionManagerAutoConfiguration
.
class
})
@ComponentScan
(
value
=
{
"org.typroject"
,
"com.yeejoin.amos"
},
excludeFilters
=
@ComponentScan
.
Filter
(
type
=
FilterType
.
REGEX
,
pattern
=
"org.typroject.tyboot.component.event"
))
@SpringBootApplication
(
exclude
=
{
DataSourceAutoConfiguration
.
class
,
DataSourceTransactionManagerAutoConfiguration
.
class
})
public
class
HousevPVapiApplication
{
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
HousevPVapiApplication
.
class
);
public
static
void
main
(
String
[]
args
)
throws
Exception
{
// 服务启动
ConfigurableApplicationContext
context
=
SpringApplication
.
run
(
HousevPVapiApplication
.
class
,
args
);
...
...
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/Utils/ImasterUtils.java
View file @
aefbd010
...
...
@@ -11,13 +11,16 @@ import com.yeejoin.amos.api.householdapi.constant.ImasterConstant;
import
com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.houseapi.HousepvapiRecords
;
import
com.yeejoin.amos.api.householdapi.face.orm.mapper.houseapi.HousepvapiRecordsMapper
;
import
com.yeejoin.amos.api.householdapi.face.service.impl.GoodWeDataAcquisitionServiceImpl
;
import
com.yeejoin.amos.openapi.enums.PVProducerInfoEnum
;
import
lombok.extern.slf4j.Slf4j
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.ObjectUtils
;
import
java.util.*
;
@Component
...
...
@@ -30,16 +33,20 @@ public class ImasterUtils {
HousepvapiRecordsMapper
housepvapiRecordsMapper
;
@Autowired
RedisUtils
redisUtils
;
final
static
Logger
logger
=
LoggerFactory
.
getLogger
(
ImasterUtils
.
class
);
/**
* @return HashMap<String, Object> 发送请求前的准备 准备header信息
* @deprecated 根据厂商编码获取厂商的hearer
*/
public
static
HashMap
<
String
,
String
>
getHeader
()
{
HashMap
<
String
,
String
>
hashMap
=
new
HashMap
<>();
String
requestParam
=
""
;
String
requestParam
=
""
;
HashMap
<
String
,
String
>
hashMaphead
=
new
HashMap
<>();
try
{
requestParam
=
"{ \"userName\": \""
+
ImasterConstant
.
account
+
"\", \"systemCode\": \""
+
ImasterConstant
.
password
+
"\"}"
;
requestParam
=
"{ \"userName\": \""
+
ImasterConstant
.
account
+
"\", \"systemCode\": \""
+
ImasterConstant
.
password
+
"\"}"
;
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
...
...
@@ -61,26 +68,27 @@ public class ImasterUtils {
* @return List<T> list<Result>
* @desc 根据请求参数发送http请求并且对于返回的数据进行处理
*/
public
<
T
>
List
<
T
>
getResPonse
(
String
apiurl
,
String
requestMethod
,
String
requestParmInfo
,
String
ResultResolveRule
,
Class
<
T
>
tClass
)
{
public
<
T
>
List
<
T
>
getResPonse
(
String
apiurl
,
String
requestMethod
,
String
requestParmInfo
,
String
ResultResolveRule
,
Class
<
T
>
tClass
)
{
String
respone
=
""
;
String
params
=
""
;
JSONArray
jsonArray
=
null
;
List
<
T
>
result
=
new
ArrayList
<>();
try
{
Object
o
=
redisUtils
.
get
(
redisKey
);
if
(
o
!=
null
)
{
if
(
o
!=
null
)
{
HashMap
<
String
,
String
>
headMap
=
new
HashMap
<>();
headMap
.
put
(
"XSRF-TOKEN"
,
o
.
toString
());
String
url
=
ImasterConstant
.
baseurl
+
apiurl
;
respone
=
sendRequest
(
requestMethod
,
url
,
requestParmInfo
,
headMap
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
respone
);
if
(
jsonObject
.
get
(
"failCode"
).
toString
().
equals
(
"305"
))
{
if
(
jsonObject
.
get
(
"failCode"
).
toString
().
equals
(
"305"
))
{
headMap
=
getHeader
();
respone
=
sendRequest
(
requestMethod
,
url
,
requestParmInfo
,
headMap
);
jsonArray
=
handlerResponseByResultResolverule
(
ResultResolveRule
,
respone
);
if
(!
ObjectUtils
.
isEmpty
(
jsonArray
))
{
result
=
JSONArray
.
parseArray
(
jsonArray
.
toJSONString
(),
tClass
);
redisUtils
.
set
(
redisKey
,
headMap
.
get
(
"XSRF-TOKEN"
));
redisUtils
.
set
(
redisKey
,
headMap
.
get
(
"XSRF-TOKEN"
));
}
}
else
{
jsonArray
=
handlerResponseByResultResolverule
(
ResultResolveRule
,
respone
);
...
...
@@ -95,7 +103,7 @@ public class ImasterUtils {
jsonArray
=
handlerResponseByResultResolverule
(
ResultResolveRule
,
respone
);
if
(!
ObjectUtils
.
isEmpty
(
jsonArray
))
{
result
=
JSONArray
.
parseArray
(
jsonArray
.
toJSONString
(),
tClass
);
redisUtils
.
set
(
redisKey
,
headMap
.
get
(
"XSRF-TOKEN"
));
redisUtils
.
set
(
redisKey
,
headMap
.
get
(
"XSRF-TOKEN"
));
}
}
}
catch
(
Exception
exception
)
{
...
...
@@ -114,26 +122,27 @@ public class ImasterUtils {
* @return List<T> list<Result>
* @desc 根据请求参数发送http请求并且对于返回的数据进行处理
*/
public
<
T
>
List
<
T
>
getResPonseOther
(
String
apiurl
,
String
requestMethod
,
String
requestParmInfo
,
String
ResultResolveRule
,
Class
<
T
>
tClass
)
{
public
<
T
>
List
<
T
>
getResPonseOther
(
String
apiurl
,
String
requestMethod
,
String
requestParmInfo
,
String
ResultResolveRule
,
Class
<
T
>
tClass
)
{
String
respone
=
""
;
String
params
=
""
;
JSONArray
jsonArray
=
null
;
List
<
T
>
result
=
new
ArrayList
<>();
try
{
Object
o
=
redisUtils
.
get
(
redisKey
);
if
(
o
!=
null
)
{
if
(
o
!=
null
)
{
HashMap
<
String
,
String
>
headMap
=
new
HashMap
<>();
headMap
.
put
(
"XSRF-TOKEN"
,
o
.
toString
());
String
url
=
ImasterConstant
.
baseurl
+
apiurl
;
respone
=
sendRequest
(
requestMethod
,
url
,
requestParmInfo
,
headMap
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
respone
);
if
(
jsonObject
.
get
(
"failCode"
).
toString
().
equals
(
"305"
))
{
if
(
jsonObject
.
get
(
"failCode"
).
toString
().
equals
(
"305"
))
{
headMap
=
getHeader
();
respone
=
sendRequest
(
requestMethod
,
url
,
requestParmInfo
,
headMap
);
jsonArray
=
handlerResponseByResultResolveruleOther
(
ResultResolveRule
,
respone
);
if
(!
ObjectUtils
.
isEmpty
(
jsonArray
))
{
result
=
JSONArray
.
parseArray
(
jsonArray
.
toJSONString
(),
tClass
);
redisUtils
.
set
(
redisKey
,
headMap
.
get
(
"XSRF-TOKEN"
));
redisUtils
.
set
(
redisKey
,
headMap
.
get
(
"XSRF-TOKEN"
));
}
}
else
{
jsonArray
=
handlerResponseByResultResolveruleOther
(
ResultResolveRule
,
respone
);
...
...
@@ -148,7 +157,7 @@ public class ImasterUtils {
jsonArray
=
handlerResponseByResultResolveruleOther
(
ResultResolveRule
,
respone
);
if
(!
ObjectUtils
.
isEmpty
(
jsonArray
))
{
result
=
JSONArray
.
parseArray
(
jsonArray
.
toJSONString
(),
tClass
);
redisUtils
.
set
(
redisKey
,
headMap
.
get
(
"XSRF-TOKEN"
));
redisUtils
.
set
(
redisKey
,
headMap
.
get
(
"XSRF-TOKEN"
));
}
}
}
catch
(
Exception
exception
)
{
...
...
@@ -182,7 +191,7 @@ public class ImasterUtils {
}
}
if
(
jsonArray
.
size
()
==
0
)
{
jsonArray
.
addAll
((
JSONArray
)
jsonObject
.
get
(
"list"
));
jsonArray
.
addAll
((
JSONArray
)
jsonObject
.
get
(
"list"
));
}
}
return
jsonArray
;
...
...
@@ -208,22 +217,27 @@ public class ImasterUtils {
jsonArray
=
(
JSONArray
)
jsonObject
.
get
(
rules
[
i
]);
}
}
catch
(
Exception
exception
)
{
try
{
jsonArray
=
(
JSONArray
)
jsonObject
.
get
(
rules
[
i
]);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
logger
.
error
(
"华为数据解析错误:"
+
jsonObject
.
get
(
rules
[
i
]));
}
}
}
}
if
(
jsonArray
.
size
()
!=
0
)
{
for
(
int
i
=
0
;
i
<
jsonArray
.
size
();
i
++
)
{
for
(
int
i
=
0
;
i
<
jsonArray
.
size
();
i
++
)
{
JSONObject
jsonObject1
=
(
JSONObject
)
jsonArray
.
get
(
i
);
if
(
jsonObject1
.
get
(
"dataItemMap"
)
!=
null
)
{
JSONObject
jsonObject2
=
(
JSONObject
)
jsonObject1
.
get
(
"dataItemMap"
);
if
(
jsonObject1
.
get
(
"sn"
)
!=
null
)
{
if
(
jsonObject1
.
get
(
"dataItemMap"
)
!=
null
)
{
JSONObject
jsonObject2
=
(
JSONObject
)
jsonObject1
.
get
(
"dataItemMap"
);
if
(
jsonObject1
.
get
(
"sn"
)
!=
null
)
{
jsonObject2
.
put
(
"inverterId"
,
jsonObject1
.
get
(
"sn"
).
toString
());
}
if
(
jsonObject1
.
get
(
"stationCode"
)
!=
null
)
{
if
(
jsonObject1
.
get
(
"stationCode"
)
!=
null
)
{
jsonObject2
.
put
(
"stationCode"
,
jsonObject1
.
get
(
"stationCode"
).
toString
());
}
if
(
jsonObject1
.
get
(
"collectTime"
)
!=
null
)
{
if
(
jsonObject1
.
get
(
"collectTime"
)
!=
null
)
{
jsonObject2
.
put
(
"collectTime"
,
jsonObject1
.
get
(
"collectTime"
).
toString
());
}
...
...
@@ -245,16 +259,14 @@ public class ImasterUtils {
housepvapiRecords
.
setThridCode
(
PVProducerInfoEnum
.
HUAWEI
.
getCode
());
String
respone
=
""
;
if
(
requestMethod
.
equals
(
"POST"
))
{
respone
=
HttpUtil
.
createPost
(
url
).
headerMap
(
headMap
,
false
).
body
(
params
).
execute
().
body
();
respone
=
HttpUtil
.
createPost
(
url
).
headerMap
(
headMap
,
false
).
body
(
params
).
execute
().
body
();
}
if
(
requestMethod
.
equals
(
"GET"
))
{
respone
=
HttpUtil
.
createGet
(
url
).
headerMap
(
headMap
,
true
).
body
(
params
).
execute
().
body
();
respone
=
HttpUtil
.
createGet
(
url
).
headerMap
(
headMap
,
true
).
body
(
params
).
execute
().
body
();
}
housepvapiRecords
.
setResponse
(
respone
);
// housepvapiRecordsMapper.insert(housepvapiRecords);
//
log.info("华为数据请求详情:"+JSONObject.toJSONString(housepvapiRecords));
//
log.info("华为数据请求详情:"+JSONObject.toJSONString(housepvapiRecords));
return
respone
;
}
...
...
@@ -266,10 +278,12 @@ public class ImasterUtils {
* @param appsecret appsecret
* @desc 锦浪云请求参数及head头处理
*/
public
void
JLYHeaderMapHandler
(
String
params
,
HashMap
<
String
,
String
>
headMap
,
String
orginalAuthorization
,
String
appsecret
,
String
apiurl
)
{
public
void
JLYHeaderMapHandler
(
String
params
,
HashMap
<
String
,
String
>
headMap
,
String
orginalAuthorization
,
String
appsecret
,
String
apiurl
)
{
String
contentMD5
=
GoLangHeaderUtils
.
getDigest
(
params
);
headMap
.
put
(
"Date"
,
GoLangHeaderUtils
.
getGMTTime
());
String
param
=
"POST"
+
"\n"
+
contentMD5
+
"\n"
+
"application/json"
+
"\n"
+
headMap
.
get
(
"Date"
)
+
"\n"
+
apiurl
;
String
param
=
"POST"
+
"\n"
+
contentMD5
+
"\n"
+
"application/json"
+
"\n"
+
headMap
.
get
(
"Date"
)
+
"\n"
+
apiurl
;
String
sign
=
""
;
try
{
sign
=
GoLangHeaderUtils
.
HmacSHA1Encrypt
(
param
,
appsecret
);
...
...
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/Utils/KsolarRequestUtil.java
View file @
aefbd010
...
...
@@ -70,7 +70,7 @@ public class KsolarRequestUtil {
String
url
=
KSolarConstant
.
baseurl
+
apiurl
;
respone
=
sendRequest
(
requestMethod
,
url
,
requestParmInfo
,
headMap
);
jsonArray
=
handlerResponseByResultResolverule
(
ResultResolveRule
,
respone
);
log
.
info
(
"原始数据:{}"
,
jsonArray
);
//
log.info("原始数据:{}", jsonArray);
if
(!
ObjectUtils
.
isEmpty
(
jsonArray
))
{
result
=
JSONArray
.
parseArray
(
jsonArray
.
toJSONString
(),
tClass
);
}
...
...
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/service/impl/GoodWeDataAcquisitionServiceImpl.java
View file @
aefbd010
...
...
@@ -320,7 +320,7 @@ public class GoodWeDataAcquisitionServiceImpl implements GoodWeDataAcquisitionSe
@Async
public
void
stationDetail
()
{
long
ts
=
System
.
currentTimeMillis
();
logger
.
info
(
"-------固德威同步场站
和告警
开始"
+
ts
+
"------- "
+
sdf
.
format
(
new
Date
()));
logger
.
info
(
"-------固德威同步场站
详情
开始"
+
ts
+
"------- "
+
sdf
.
format
(
new
Date
()));
List
<
String
>
stationIds
=
goodWeStationMonitorListMapper
.
getStationIds
();
stationIds
.
forEach
(
stationId
->
{
HashMap
<
String
,
Object
>
requestInfo
=
new
HashMap
<>();
...
...
@@ -349,7 +349,7 @@ public class GoodWeDataAcquisitionServiceImpl implements GoodWeDataAcquisitionSe
});
}
});
logger
.
info
(
"-------固德威同步场站
和告警
结束"
+
ts
+
"------- "
+
sdf
.
format
(
new
Date
()));
logger
.
info
(
"-------固德威同步场站
详情
结束"
+
ts
+
"------- "
+
sdf
.
format
(
new
Date
()));
}
@Override
...
...
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/service/impl/SunlightServiceImpl.java
View file @
aefbd010
...
...
@@ -495,10 +495,8 @@ public class SunlightServiceImpl implements SunlightService {
if
(
device
!=
null
)
{
// 获取逆变器信息存库
JpInverter
jpInverter
=
jpInverterMapper
.
selectOne
(
new
QueryWrapper
<
JpInverter
>().
eq
(
"third_station_id"
,
device
.
getPs_id
().
toString
())
.
eq
(
"third_code"
,
PVProducerInfoEnum
.
YG
.
getCode
())
.
eq
(
"ID"
,
device
.
getUuid
().
toString
()));
new
QueryWrapper
<
JpInverter
>().
eq
(
"sn_code"
,
device
.
getDevice_sn
().
toString
())
.
eq
(
"third_code"
,
PVProducerInfoEnum
.
YG
.
getCode
()));
if
(
ObjectUtils
.
isEmpty
(
jpInverter
))
{
jpInverter
=
new
JpInverter
();
}
...
...
@@ -911,11 +909,18 @@ public class SunlightServiceImpl implements SunlightService {
jpCollector
.
setThirdStationId
(
jpStation
.
getThirdStationId
());
// 第三方厂商标识
jpCollector
.
setThirdCode
(
PVProducerInfoEnum
.
YG
.
getCode
());
if
(
device
.
getGetPs_fault_status
()
!=
null
)
{
if
(
device
.
getGetPs_fault_status
()
>
2
)
{
jpCollector
.
setState
(
SunlightUtil
.
zt
.
get
(
device
.
getDev_status
()
+
""
));
}
else
{
jpCollector
.
setState
(
"报警"
);
// 电站状态
}
}
else
{
//如果获取不了逆变器状态 并且逆变器没状态就默认离线
if
(
jpCollector
.
getState
()
==
null
)
{
jpCollector
.
setState
(
"离线"
);
}
}
jpCollector
.
setStationName
(
jpStation
.
getName
());
// jpCollector.setVersion(imasterCollectorList.getSoftwareVersion());
jpCollector
.
setRecDate
(
new
Date
());
...
...
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/config/ListenerAsyncConfiguration.java
0 → 100644
View file @
aefbd010
package
com
.
yeejoin
.
amos
.
config
;
import
java.lang.reflect.Method
;
import
java.util.concurrent.Executor
;
import
java.util.concurrent.ThreadPoolExecutor
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Primary
;
import
org.springframework.scheduling.annotation.AsyncConfigurer
;
import
org.springframework.scheduling.annotation.EnableAsync
;
import
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
;
import
com.yeejoin.amos.HousevPVapiApplication
;
@EnableAsync
@Configuration
@Primary
public
class
ListenerAsyncConfiguration
implements
AsyncConfigurer
{
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
ListenerAsyncConfiguration
.
class
);
/**
* 用于@Async注解获取默认线程连接池
*
* @return
*/
@Override
public
Executor
getAsyncExecutor
()
{
// 此类由Spring提供,org.springframework.scheduling.concurrent包下,是线程池的封装类
ThreadPoolTaskExecutor
taskExecutor
=
new
ThreadPoolTaskExecutor
();
// 线程池中线程的名字前缀
taskExecutor
.
setThreadNamePrefix
(
"taskThreadPool-async-"
);
// 线程池核心线程数量
taskExecutor
.
setCorePoolSize
(
20
);
// 线程池最大线程数量
taskExecutor
.
setMaxPoolSize
(
50
);
// 线程池空闲线程存活时间,单位秒
taskExecutor
.
setKeepAliveSeconds
(
100
);
// 线程池拒绝策略
taskExecutor
.
setRejectedExecutionHandler
(
new
ThreadPoolExecutor
.
DiscardOldestPolicy
());
// 线程池任务队容量,如果不设置则默认 Integer.MAX_VALUE,
// 队列默认使用LinkedBlockingQueue 若queueCapacity的值 <= 0,则使用SynchronousQueue
taskExecutor
.
setQueueCapacity
(
1000
);
// 线程池中核心线程是否允许超时,默认为false
taskExecutor
.
setAllowCoreThreadTimeOut
(
true
);
// 线程池中的超时处理时间,单位秒,有一个对应方法为毫秒,默认为不超时
taskExecutor
.
setAwaitTerminationSeconds
(
60
);
// 初始化线程池,不可以少,否者会抛出 线程池没有初始化
taskExecutor
.
initialize
();
return
taskExecutor
;
}
/**
* 线程未处理异常的统一处理机制,即线程池异常处理器,简单示例
*
* @return
*/
@Override
public
AsyncUncaughtExceptionHandler
getAsyncUncaughtExceptionHandler
()
{
// 异常处理器函数接口类
return
new
AsyncUncaughtExceptionHandler
()
{
@Override
public
void
handleUncaughtException
(
Throwable
throwable
,
Method
method
,
Object
...
objects
)
{
logger
.
error
(
"============ "
+
throwable
.
getMessage
()
+
" ==========="
,
throwable
);
logger
.
error
(
"============ "
+
method
.
getName
()
+
" ==========="
,
objects
);
}
};
}
}
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