Merge branch 'wvp-28181-2.0' into 结构优化
# Conflicts: # src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java # src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java # src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java # src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java # src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java # src/main/resources/all-application.yml # src/main/resources/application-dev.yml # src/main/resources/application-docker.yml结构优化
commit
e9fce889ba
14
pom.xml
14
pom.xml
|
@ -181,6 +181,20 @@
|
||||||
<artifactId>springdoc-openapi-security</artifactId>
|
<artifactId>springdoc-openapi-security</artifactId>
|
||||||
<version>1.6.10</version>
|
<version>1.6.10</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/com.baomidou/dynamic-datasource-spring-boot-starter -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.baomidou</groupId>
|
||||||
|
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
|
||||||
|
<version>3.6.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<!--在线文档 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springdoc</groupId>
|
||||||
|
<artifactId>springdoc-openapi-ui</artifactId>
|
||||||
|
<version>1.6.10</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.xiaoymin</groupId>
|
<groupId>com.github.xiaoymin</groupId>
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class RecordEndEventListener implements ApplicationListener<RecordEndEven
|
||||||
int sumNum = event.getRecordInfo().getSumNum();
|
int sumNum = event.getRecordInfo().getSumNum();
|
||||||
logger.info("录像查询完成事件触发,deviceId:{}, channelId: {}, 录像数量{}/{}条", event.getRecordInfo().getDeviceId(),
|
logger.info("录像查询完成事件触发,deviceId:{}, channelId: {}, 录像数量{}/{}条", event.getRecordInfo().getDeviceId(),
|
||||||
event.getRecordInfo().getChannelId(), count,sumNum);
|
event.getRecordInfo().getChannelId(), count,sumNum);
|
||||||
if (handlerMap.size() > 0) {
|
if (!handlerMap.isEmpty()) {
|
||||||
RecordEndEventHandler handler = handlerMap.get(deviceId + channelId);
|
RecordEndEventHandler handler = handlerMap.get(deviceId + channelId);
|
||||||
if (handler !=null){
|
if (handler !=null){
|
||||||
handler.handler(event.getRecordInfo());
|
handler.handler(event.getRecordInfo());
|
||||||
|
@ -43,6 +43,9 @@ public class RecordEndEventListener implements ApplicationListener<RecordEndEven
|
||||||
handlerMap.remove(deviceId + channelId);
|
handlerMap.remove(deviceId + channelId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
logger.info("录像查询完成事件触发, 但是订阅为空,取消发送,deviceId:{}, channelId: {}",
|
||||||
|
event.getRecordInfo().getDeviceId(), event.getRecordInfo().getChannelId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +56,7 @@ public class RecordEndEventListener implements ApplicationListener<RecordEndEven
|
||||||
* @param recordEndEventHandler
|
* @param recordEndEventHandler
|
||||||
*/
|
*/
|
||||||
public void addEndEventHandler(String device, String channelId, RecordEndEventHandler recordEndEventHandler) {
|
public void addEndEventHandler(String device, String channelId, RecordEndEventHandler recordEndEventHandler) {
|
||||||
|
logger.info("录像查询事件添加监听,deviceId:{}, channelId: {}", device, channelId);
|
||||||
handlerMap.put(device + channelId, recordEndEventHandler);
|
handlerMap.put(device + channelId, recordEndEventHandler);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -61,6 +65,7 @@ public class RecordEndEventListener implements ApplicationListener<RecordEndEven
|
||||||
* @param channelId
|
* @param channelId
|
||||||
*/
|
*/
|
||||||
public void delEndEventHandler(String device, String channelId) {
|
public void delEndEventHandler(String device, String channelId) {
|
||||||
|
logger.info("录像查询事件移除监听,deviceId:{}, channelId: {}", device, channelId);
|
||||||
handlerMap.remove(device + channelId);
|
handlerMap.remove(device + channelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -739,13 +739,14 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
||||||
if ( parentPlatform ==null) {
|
if ( parentPlatform ==null) {
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
logger.info("[国标级联] 发送录像数据通道: {}", recordInfo.getChannelId());
|
||||||
String characterSet = parentPlatform.getCharacterSet();
|
String characterSet = parentPlatform.getCharacterSet();
|
||||||
StringBuffer recordXml = new StringBuffer(600);
|
StringBuffer recordXml = new StringBuffer(600);
|
||||||
recordXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n")
|
recordXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n")
|
||||||
.append("<Response>\r\n")
|
.append("<Response>\r\n")
|
||||||
.append("<CmdType>RecordInfo</CmdType>\r\n")
|
.append("<CmdType>RecordInfo</CmdType>\r\n")
|
||||||
.append("<SN>" +recordInfo.getSn() + "</SN>\r\n")
|
.append("<SN>" +recordInfo.getSn() + "</SN>\r\n")
|
||||||
.append("<DeviceID>" + recordInfo.getChannelId() + "</DeviceID>\r\n")
|
.append("<DeviceID>" + deviceChannel.getChannelId() + "</DeviceID>\r\n")
|
||||||
.append("<SumNum>" + recordInfo.getSumNum() + "</SumNum>\r\n");
|
.append("<SumNum>" + recordInfo.getSumNum() + "</SumNum>\r\n");
|
||||||
if (recordInfo.getRecordList() == null ) {
|
if (recordInfo.getRecordList() == null ) {
|
||||||
recordXml.append("<RecordList Num=\"0\">\r\n");
|
recordXml.append("<RecordList Num=\"0\">\r\n");
|
||||||
|
@ -775,12 +776,14 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
||||||
|
|
||||||
recordXml.append("</RecordList>\r\n")
|
recordXml.append("</RecordList>\r\n")
|
||||||
.append("</Response>\r\n");
|
.append("</Response>\r\n");
|
||||||
|
logger.info("[国标级联] 发送录像数据通道:{}, 内容: {}", recordInfo.getChannelId(), recordXml);
|
||||||
// callid
|
// callid
|
||||||
CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
|
CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
|
||||||
|
|
||||||
Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, recordXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, recordXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
||||||
sipSender.transmitRequest(parentPlatform.getDeviceIp(), request);
|
sipSender.transmitRequest(parentPlatform.getDeviceIp(), request, null, eventResult -> {
|
||||||
|
logger.info("[国标级联] 发送录像数据通道:{}, 发送成功", recordInfo.getChannelId());
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -276,7 +276,21 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||||
} else {
|
} else {
|
||||||
content.append("t=0 0\r\n");
|
content.append("t=0 0\r\n");
|
||||||
}
|
}
|
||||||
content.append("m=video " + sendRtpItem.getLocalPort() + " RTP/AVP 96\r\n");
|
int localPort = sendRtpItem.getLocalPort();
|
||||||
|
if (localPort == 0) {
|
||||||
|
// 非严格模式端口不统一, 增加兼容性,修改为一个不为0的端口
|
||||||
|
localPort = new Random().nextInt(65535) + 1;
|
||||||
|
}
|
||||||
|
if (sendRtpItem.isTcp()) {
|
||||||
|
content.append("m=video " + localPort + " TCP/RTP/AVP 96\r\n");
|
||||||
|
if (!sendRtpItem.isTcpActive()) {
|
||||||
|
content.append("a=setup:active\r\n");
|
||||||
|
} else {
|
||||||
|
content.append("a=setup:passive\r\n");
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
content.append("m=video " + localPort + " RTP/AVP 96\r\n");
|
||||||
|
}
|
||||||
content.append("a=sendonly\r\n");
|
content.append("a=sendonly\r\n");
|
||||||
content.append("a=rtpmap:96 PS/90000\r\n");
|
content.append("a=rtpmap:96 PS/90000\r\n");
|
||||||
content.append("y=" + sendRtpItem.getSsrc() + "\r\n");
|
content.append("y=" + sendRtpItem.getSsrc() + "\r\n");
|
||||||
|
|
|
@ -107,6 +107,7 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp
|
||||||
// 接收录像数据
|
// 接收录像数据
|
||||||
recordEndEventListener.addEndEventHandler(device.getDeviceId(), channelId, (recordInfo)->{
|
recordEndEventListener.addEndEventHandler(device.getDeviceId(), channelId, (recordInfo)->{
|
||||||
try {
|
try {
|
||||||
|
logger.info("[国标级联] 录像查询收到数据, 通道: {},准备转发===", channelId);
|
||||||
cmderFroPlatform.recordInfo(commonGbChannel, parentPlatform, request.getFromTag(), recordInfo);
|
cmderFroPlatform.recordInfo(commonGbChannel, parentPlatform, request.getFromTag(), recordInfo);
|
||||||
} catch (SipException | InvalidArgumentException | ParseException e) {
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
||||||
logger.error("[命令发送失败] 国标级联 回复录像数据: {}", e.getMessage());
|
logger.error("[命令发送失败] 国标级联 回复录像数据: {}", e.getMessage());
|
||||||
|
|
|
@ -2,7 +2,9 @@ package com.genersoft.iot.vmp.media.zlm;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
|
import com.genersoft.iot.vmp.conf.exception.ControllerException;
|
||||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
||||||
|
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
|
||||||
import okhttp3.*;
|
import okhttp3.*;
|
||||||
import okhttp3.logging.HttpLoggingInterceptor;
|
import okhttp3.logging.HttpLoggingInterceptor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
@ -13,7 +15,9 @@ import org.springframework.util.ObjectUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.ConnectException;
|
import java.net.ConnectException;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
import java.net.SocketTimeoutException;
|
import java.net.SocketTimeoutException;
|
||||||
|
import java.net.URL;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -148,13 +152,14 @@ public class AssistRESTfulUtils {
|
||||||
return responseJSON;
|
return responseJSON;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONObject sendPost(MediaServerItem mediaServerItem, String api, JSONObject param, ZLMRESTfulUtils.RequestCallback callback, Integer readTimeOut) {
|
public JSONObject sendPost(MediaServerItem mediaServerItem, String url,
|
||||||
|
JSONObject param, ZLMRESTfulUtils.RequestCallback callback,
|
||||||
|
Integer readTimeOut) {
|
||||||
OkHttpClient client = getClient(readTimeOut);
|
OkHttpClient client = getClient(readTimeOut);
|
||||||
|
|
||||||
if (mediaServerItem == null) {
|
if (mediaServerItem == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
String url = String.format("http://%s:%s/%s", mediaServerItem.getIp(), mediaServerItem.getRecordAssistPort(), api);
|
|
||||||
JSONObject responseJSON = new JSONObject();
|
JSONObject responseJSON = new JSONObject();
|
||||||
//-2自定义流媒体 调用错误码
|
//-2自定义流媒体 调用错误码
|
||||||
responseJSON.put("code",-2);
|
responseJSON.put("code",-2);
|
||||||
|
@ -253,8 +258,8 @@ public class AssistRESTfulUtils {
|
||||||
if (!ObjectUtils.isEmpty(remoteHost)) {
|
if (!ObjectUtils.isEmpty(remoteHost)) {
|
||||||
videoTaskInfoJSON.put("remoteHost", remoteHost);
|
videoTaskInfoJSON.put("remoteHost", remoteHost);
|
||||||
}
|
}
|
||||||
|
String urlStr = String.format("%s/api/record/file/download/task/add", remoteHost);;
|
||||||
return sendPost(mediaServerItem, "api/record/file/download/task/add", videoTaskInfoJSON, null, 30);
|
return sendPost(mediaServerItem, urlStr, videoTaskInfoJSON, null, 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONObject queryTaskList(MediaServerItem mediaServerItem, String app, String stream, String callId, String taskId, Boolean isEnd) {
|
public JSONObject queryTaskList(MediaServerItem mediaServerItem, String app, String stream, String callId, String taskId, Boolean isEnd) {
|
||||||
|
|
|
@ -35,7 +35,8 @@ public interface ICloudRecordService {
|
||||||
/**
|
/**
|
||||||
* 添加合并任务
|
* 添加合并任务
|
||||||
*/
|
*/
|
||||||
String addTask(String app, String stream, String mediaServerId, String startTime, String endTime, String callId, String remoteHost);
|
String addTask(String app, String stream, MediaServerItem mediaServerItem, String startTime,
|
||||||
|
String endTime, String callId, String remoteHost, boolean filterMediaServer);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.common.InviteSessionStatus;
|
||||||
import com.genersoft.iot.vmp.common.InviteSessionType;
|
import com.genersoft.iot.vmp.common.InviteSessionType;
|
||||||
import com.genersoft.iot.vmp.common.StreamInfo;
|
import com.genersoft.iot.vmp.common.StreamInfo;
|
||||||
import com.genersoft.iot.vmp.conf.DynamicTask;
|
import com.genersoft.iot.vmp.conf.DynamicTask;
|
||||||
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||||
import com.genersoft.iot.vmp.conf.exception.ControllerException;
|
import com.genersoft.iot.vmp.conf.exception.ControllerException;
|
||||||
import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
|
import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
|
||||||
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
|
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
|
||||||
|
@ -47,6 +48,7 @@ import java.time.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
@DS("share")
|
||||||
public class CloudRecordServiceImpl implements ICloudRecordService {
|
public class CloudRecordServiceImpl implements ICloudRecordService {
|
||||||
|
|
||||||
private final static Logger logger = LoggerFactory.getLogger(CloudRecordServiceImpl.class);
|
private final static Logger logger = LoggerFactory.getLogger(CloudRecordServiceImpl.class);
|
||||||
|
@ -136,23 +138,11 @@ public class CloudRecordServiceImpl implements ICloudRecordService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String addTask(String app, String stream, String mediaServerId, String startTime, String endTime, String callId, String remoteHost) {
|
public String addTask(String app, String stream, MediaServerItem mediaServerItem, String startTime, String endTime,
|
||||||
|
String callId, String remoteHost, boolean filterMediaServer) {
|
||||||
// 参数校验
|
// 参数校验
|
||||||
assert app != null;
|
assert app != null;
|
||||||
assert stream != null;
|
assert stream != null;
|
||||||
MediaServerItem mediaServerItem = null;
|
|
||||||
if (mediaServerId == null) {
|
|
||||||
mediaServerItem = mediaServerService.getDefaultMediaServer();
|
|
||||||
}else {
|
|
||||||
mediaServerItem = mediaServerService.getOne(mediaServerId);
|
|
||||||
}
|
|
||||||
if (mediaServerItem == null) {
|
|
||||||
throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到可用的流媒体");
|
|
||||||
}else {
|
|
||||||
if (remoteHost == null) {
|
|
||||||
remoteHost = "http://" + mediaServerItem.getStreamIp() + ":" + mediaServerItem.getRecordAssistPort();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (mediaServerItem.getRecordAssistPort() == 0) {
|
if (mediaServerItem.getRecordAssistPort() == 0) {
|
||||||
throw new ControllerException(ErrorCode.ERROR100.getCode(), "为配置Assist服务");
|
throw new ControllerException(ErrorCode.ERROR100.getCode(), "为配置Assist服务");
|
||||||
}
|
}
|
||||||
|
@ -168,7 +158,8 @@ public class CloudRecordServiceImpl implements ICloudRecordService {
|
||||||
List<MediaServerItem> mediaServers = new ArrayList<>();
|
List<MediaServerItem> mediaServers = new ArrayList<>();
|
||||||
mediaServers.add(mediaServerItem);
|
mediaServers.add(mediaServerItem);
|
||||||
// 检索相关的录像文件
|
// 检索相关的录像文件
|
||||||
List<String> filePathList = cloudRecordServiceMapper.queryRecordFilePathList(app, stream, startTimeStamp, endTimeStamp, callId, mediaServers);
|
List<String> filePathList = cloudRecordServiceMapper.queryRecordFilePathList(app, stream, startTimeStamp,
|
||||||
|
endTimeStamp, callId, filterMediaServer ? mediaServers : null);
|
||||||
if (filePathList == null || filePathList.isEmpty()) {
|
if (filePathList == null || filePathList.isEmpty()) {
|
||||||
throw new ControllerException(ErrorCode.ERROR100.getCode(), "未检索到视频文件");
|
throw new ControllerException(ErrorCode.ERROR100.getCode(), "未检索到视频文件");
|
||||||
}
|
}
|
||||||
|
@ -192,7 +183,7 @@ public class CloudRecordServiceImpl implements ICloudRecordService {
|
||||||
}
|
}
|
||||||
JSONObject result = assistRESTfulUtils.queryTaskList(mediaServerItem, app, stream, callId, taskId, isEnd);
|
JSONObject result = assistRESTfulUtils.queryTaskList(mediaServerItem, app, stream, callId, taskId, isEnd);
|
||||||
if (result == null || result.getInteger("code") != 0) {
|
if (result == null || result.getInteger("code") != 0) {
|
||||||
throw new ControllerException(ErrorCode.ERROR100.getCode(), result.getString("msg"));
|
throw new ControllerException(ErrorCode.ERROR100.getCode(), result == null ? "查询任务列表失败" : result.getString("msg"));
|
||||||
}
|
}
|
||||||
return result.getJSONArray("data");
|
return result.getJSONArray("data");
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ import org.springframework.web.context.request.async.DeferredResult;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -165,6 +166,7 @@ public class CloudRecordController {
|
||||||
@Parameter(name = "callId", description = "鉴权ID", required = false)
|
@Parameter(name = "callId", description = "鉴权ID", required = false)
|
||||||
@Parameter(name = "remoteHost", description = "返回地址时的远程地址", required = false)
|
@Parameter(name = "remoteHost", description = "返回地址时的远程地址", required = false)
|
||||||
public String addTask(
|
public String addTask(
|
||||||
|
HttpServletRequest request,
|
||||||
@RequestParam(required = false) String app,
|
@RequestParam(required = false) String app,
|
||||||
@RequestParam(required = false) String stream,
|
@RequestParam(required = false) String stream,
|
||||||
@RequestParam(required = false) String mediaServerId,
|
@RequestParam(required = false) String mediaServerId,
|
||||||
|
@ -173,7 +175,20 @@ public class CloudRecordController {
|
||||||
@RequestParam(required = false) String callId,
|
@RequestParam(required = false) String callId,
|
||||||
@RequestParam(required = false) String remoteHost
|
@RequestParam(required = false) String remoteHost
|
||||||
){
|
){
|
||||||
return cloudRecordService.addTask(app, stream, mediaServerId, startTime, endTime, callId, remoteHost);
|
MediaServerItem mediaServerItem;
|
||||||
|
if (mediaServerId == null) {
|
||||||
|
mediaServerItem = mediaServerService.getDefaultMediaServer();
|
||||||
|
}else {
|
||||||
|
mediaServerItem = mediaServerService.getOne(mediaServerId);
|
||||||
|
}
|
||||||
|
if (mediaServerItem == null) {
|
||||||
|
throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到可用的流媒体");
|
||||||
|
}else {
|
||||||
|
if (remoteHost == null) {
|
||||||
|
remoteHost = request.getScheme() + "://" + request.getLocalAddr() + ":" + mediaServerItem.getRecordAssistPort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cloudRecordService.addTask(app, stream, mediaServerItem, startTime, endTime, callId, remoteHost, mediaServerId != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
|
|
|
@ -47,18 +47,29 @@ spring:
|
||||||
# username: root
|
# username: root
|
||||||
# password: SYceshizu1234
|
# password: SYceshizu1234
|
||||||
# mysql配置
|
# mysql配置
|
||||||
type: com.zaxxer.hikari.HikariDataSource
|
dynamic:
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
primary: master
|
||||||
url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
|
datasource:
|
||||||
username: root
|
master:
|
||||||
password: root123
|
type: com.zaxxer.hikari.HikariDataSource
|
||||||
hikari:
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
connection-timeout: 20000 # 是客户端等待连接池连接的最大毫秒数
|
url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
|
||||||
initialSize: 50 # 连接池初始化连接数
|
username: root
|
||||||
maximum-pool-size: 200 # 连接池最大连接数
|
password: root123
|
||||||
minimum-idle: 10 # 连接池最小空闲连接数
|
hikari:
|
||||||
idle-timeout: 300000 # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
|
connection-timeout: 20000 # 是客户端等待连接池连接的最大毫秒数
|
||||||
max-lifetime: 1200000 # 是池中连接关闭后的最长生命周期(以毫秒为单位)
|
initialSize: 50 # 连接池初始化连接数
|
||||||
|
maximum-pool-size: 200 # 连接池最大连接数
|
||||||
|
minimum-idle: 10 # 连接池最小空闲连接数
|
||||||
|
idle-timeout: 300000 # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
|
||||||
|
max-lifetime: 1200000 # 是池中连接关闭后的最长生命周期(以毫秒为单位)
|
||||||
|
share:
|
||||||
|
type: com.zaxxer.hikari.HikariDataSource
|
||||||
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
|
url: jdbc:mysql://127.0.0.1:3306/wvp269_1?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
|
||||||
|
username: root
|
||||||
|
password: 12345678
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 修改分页插件为 postgresql, 数据库类型为mysql不需要
|
# 修改分页插件为 postgresql, 数据库类型为mysql不需要
|
||||||
|
|
|
@ -24,18 +24,22 @@ spring:
|
||||||
timeout: 10000
|
timeout: 10000
|
||||||
# mysql数据源
|
# mysql数据源
|
||||||
datasource:
|
datasource:
|
||||||
type: com.zaxxer.hikari.HikariDataSource
|
dynamic:
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
primary: master
|
||||||
url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
|
datasource:
|
||||||
username: root
|
master:
|
||||||
password: root
|
type: com.zaxxer.hikari.HikariDataSource
|
||||||
hikari:
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
connection-timeout: 20000 # 是客户端等待连接池连接的最大毫秒数
|
url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
|
||||||
initialSize: 10 # 连接池初始化连接数
|
username: root
|
||||||
maximum-pool-size: 200 # 连接池最大连接数
|
password: root123
|
||||||
minimum-idle: 5 # 连接池最小空闲连接数
|
hikari:
|
||||||
idle-timeout: 300000 # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
|
connection-timeout: 20000 # 是客户端等待连接池连接的最大毫秒数
|
||||||
max-lifetime: 1200000 # 是池中连接关闭后的最长生命周期(以毫秒为单位)
|
initialSize: 50 # 连接池初始化连接数
|
||||||
|
maximum-pool-size: 200 # 连接池最大连接数
|
||||||
|
minimum-idle: 10 # 连接池最小空闲连接数
|
||||||
|
idle-timeout: 300000 # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
|
||||||
|
max-lifetime: 1200000 # 是池中连接关闭后的最长生命周期(以毫秒为单位)
|
||||||
#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
|
#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
|
||||||
server:
|
server:
|
||||||
port: 8080
|
port: 8080
|
||||||
|
|
|
@ -18,13 +18,22 @@ spring:
|
||||||
timeout: 10000
|
timeout: 10000
|
||||||
# [必选] jdbc数据库配置
|
# [必选] jdbc数据库配置
|
||||||
datasource:
|
datasource:
|
||||||
# 使用mysql 打开23-28行注释, 删除29-36行
|
dynamic:
|
||||||
name: wvp
|
primary: master
|
||||||
url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
|
datasource:
|
||||||
username: root
|
master:
|
||||||
password: root
|
type: com.zaxxer.hikari.HikariDataSource
|
||||||
type: com.zaxxer.hikari.HikariDataSource
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
|
||||||
|
username: root
|
||||||
|
password: root123
|
||||||
|
hikari:
|
||||||
|
connection-timeout: 20000 # 是客户端等待连接池连接的最大毫秒数
|
||||||
|
initialSize: 50 # 连接池初始化连接数
|
||||||
|
maximum-pool-size: 200 # 连接池最大连接数
|
||||||
|
minimum-idle: 10 # 连接池最小空闲连接数
|
||||||
|
idle-timeout: 300000 # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
|
||||||
|
max-lifetime: 1200000 # 是池中连接关闭后的最长生命周期(以毫秒为单位)
|
||||||
|
|
||||||
# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
|
# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
|
||||||
server:
|
server:
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue