build : 添加skywalking
This commit is contained in:
@@ -74,7 +74,7 @@ volumes:
|
||||
path: /home/build/fateverse
|
||||
- name: skywalking
|
||||
host:
|
||||
path: /home/skywalking-agent
|
||||
path: /home/build/skywalking-agent
|
||||
- name: config # k8s对接的配置文件
|
||||
host:
|
||||
path: /home/kubect
|
||||
|
||||
@@ -2,17 +2,15 @@ FROM azul/zulu-openjdk:11.0.22-jdk
|
||||
VOLUME /tmp
|
||||
RUN useradd -b /home -m -s /bin/bash clay
|
||||
RUN chmod a+xr -R /home/clay && chown clay:clay -R /home/clay
|
||||
#COPY skywalking /home/clay/skywalking-agent
|
||||
#RUN chmod a+xr -R /home/clay/skywalking-agent && chown clay:clay -R /home/clay/skywalking-agent
|
||||
COPY skywalking /home/clay/skywalking-agent
|
||||
RUN chmod a+xr -R /home/clay/skywalking-agent && chown clay:clay -R /home/clay/skywalking-agent
|
||||
USER clay
|
||||
ARG NAME=$DRONE_COMMIT_BRANCH
|
||||
COPY ./$NAME.jar /home/clay/$NAME.jar
|
||||
COPY start.sh /home/clay/start.sh
|
||||
WORKDIR /home/clay
|
||||
RUN mkdir -p /home/clay/logs && touch /home/clay/logs/spring.log
|
||||
#RUN mkdir -p /home/clay/code
|
||||
#RUN chmod 777 /home/clay/code
|
||||
#RUN mkdir -p /home/clay/skywalking-agent/logs && touch /home/clay/skywalking-agent/logs/skywalking-api.log
|
||||
RUN mkdir -p /home/clay/skywalking-agent/logs && touch /home/clay/skywalking-agent/logs/skywalking-api.log
|
||||
ENV REF_NAME dev
|
||||
EXPOSE 8080
|
||||
CMD bash /home/clay/start.sh $REF_NAME && echo "start logging..." && : > /home/clay/logs/spring.log && tail -F -n 500 /home/clay/logs/spring.log
|
||||
@@ -22,8 +22,8 @@
|
||||
| 依赖 | 版本 |
|
||||
|----------------------|------------|
|
||||
| Spring Boot | 2.7.3 |
|
||||
| Spring Cloud | 2021.0.5 |
|
||||
| Spring Cloud Alibaba | 2021.0.4.0 |
|
||||
| Spring Cloud | 2021.0.3 |
|
||||
| Spring Cloud Alibaba | 2021.0.1.0 |
|
||||
| Mybatis | 3.5.2 |
|
||||
| Vue | 3.1.3 |
|
||||
| React | 18.2.0 |
|
||||
|
||||
@@ -96,7 +96,7 @@ public class JavaScriptEngine {
|
||||
}
|
||||
|
||||
|
||||
private static void remove(String functionName) {
|
||||
public static void remove(String functionName) {
|
||||
SegmentLock.lock(functionName, () -> {
|
||||
functionMap.remove(functionName);
|
||||
return null;
|
||||
|
||||
@@ -8,6 +8,7 @@ import cn.fateverse.common.decrypt.annotation.EncryptField;
|
||||
import cn.fateverse.query.entity.dto.DataAdapterCodeDto;
|
||||
import cn.fateverse.query.entity.dto.MockParam;
|
||||
import cn.fateverse.query.entity.dto.PortalDto;
|
||||
import cn.fateverse.query.entity.dto.PortalPublish;
|
||||
import cn.fateverse.query.entity.query.PortalQuery;
|
||||
import cn.fateverse.query.entity.vo.PortalIdWrapper;
|
||||
import cn.fateverse.query.entity.vo.PortalVo;
|
||||
@@ -116,6 +117,25 @@ public class PortalController {
|
||||
return Result.ok();
|
||||
}
|
||||
|
||||
@ApiOperation("列表接口发布")
|
||||
@PostMapping("/list/publish")
|
||||
@Encrypt(Encrypt.Position.IN)
|
||||
@PreAuthorize("@ss.hasPermission('query:portal:edit')")
|
||||
public Result<Void> listPublish(@RequestBody @Validated PortalPublish portalPublish) {
|
||||
portalService.publish(portalPublish, Boolean.TRUE);
|
||||
return Result.ok();
|
||||
}
|
||||
@ApiOperation("设计器接口发布")
|
||||
@PostMapping("/publish")
|
||||
@PreAuthorize("@ss.hasPermission('query:portal:edit')")
|
||||
public Result<Void> publish(@RequestBody @Validated PortalPublish portalPublish) {
|
||||
if (ObjectUtils.isEmpty(portalPublish.getCode())){
|
||||
return Result.error("代码不能为空!");
|
||||
}
|
||||
portalService.publish(portalPublish, Boolean.FALSE);
|
||||
return Result.ok();
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("撤销发布")
|
||||
@Encrypt
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
package cn.fateverse.query.dubbo;
|
||||
|
||||
import cn.fateverse.query.constant.QueryConstant;
|
||||
import cn.fateverse.query.entity.Portal;
|
||||
import cn.fateverse.query.entity.PortalMapping;
|
||||
import cn.fateverse.query.entity.bo.PortalBo;
|
||||
import cn.fateverse.query.mapper.PortalMapper;
|
||||
import cn.fateverse.query.mapper.PortalMappingMapper;
|
||||
import cn.fateverse.query.portal.service.HandlerMethodService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
@@ -9,6 +13,7 @@ import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Clay
|
||||
@@ -18,10 +23,14 @@ import javax.annotation.Resource;
|
||||
@DubboService(scope = "remote")
|
||||
public class DubboDispatchServletPublishImpl implements DubboDispatchServletPublish {
|
||||
|
||||
|
||||
@Resource
|
||||
private HandlerMethodService methodService;
|
||||
|
||||
@Resource
|
||||
private PortalMapper portalMapper;
|
||||
|
||||
@Resource
|
||||
private PortalMappingMapper portalMappingMapper;
|
||||
|
||||
@Resource
|
||||
private RedisTemplate<String, PortalBo> redisTemplate;
|
||||
@@ -30,7 +39,13 @@ public class DubboDispatchServletPublishImpl implements DubboDispatchServletPubl
|
||||
public Boolean publish(String path, String requestMethod) {
|
||||
PortalBo portalBo = redisTemplate.opsForValue().get(QueryConstant.PORTAL_KEY + path + ":" + requestMethod);
|
||||
if (portalBo == null) {
|
||||
return Boolean.FALSE;
|
||||
Portal portal = portalMapper.selectByPath(path, requestMethod);
|
||||
if (portal == null) {
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
List<PortalMapping> portalMappings = portalMappingMapper.selectByPortalId(portal.getPortalId());
|
||||
portalBo = PortalBo.toPortalBo(portal, portalMappings);
|
||||
redisTemplate.opsForValue().set(QueryConstant.PORTAL_KEY + portalBo.getPath() + ":" + portalBo.getRequestMethod(), portalBo);
|
||||
}
|
||||
try {
|
||||
log.info("registerMapping, path:{}, requestMethod:{}", path, requestMethod);
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package cn.fateverse.query.entity.dto;
|
||||
|
||||
import cn.fateverse.common.decrypt.annotation.EncryptField;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @author Clay
|
||||
* @date 2024/4/30 16:58
|
||||
*/
|
||||
@Data
|
||||
public class PortalPublish {
|
||||
|
||||
@EncryptField
|
||||
@NotBlank(message = "接口id不能为空")
|
||||
private String portalId;
|
||||
|
||||
private String code;
|
||||
|
||||
|
||||
public Long getLongPortalId() {
|
||||
return Long.valueOf(portalId);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -61,6 +61,11 @@ public class JavaScriptEngineExecuteHandler implements EngineExecuteHandler {
|
||||
|
||||
@Override
|
||||
public Boolean remove(DataAdapter dataAdapter) {
|
||||
return Boolean.FALSE;
|
||||
if (!DataAdapterType.JAVA_SCRIPT.equals(dataAdapter.getType())) {
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
JavaScriptEngine.remove("execute" + dataAdapter.getAdapterId());
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import cn.fateverse.query.entity.Portal;
|
||||
import cn.fateverse.query.entity.PortalMapping;
|
||||
import cn.fateverse.query.entity.bo.PortalBo;
|
||||
import cn.fateverse.query.handler.reader.DataAdapterHandlerReader;
|
||||
import cn.fateverse.query.mapper.DataAdapterMapper;
|
||||
import cn.fateverse.query.mapper.PortalMapper;
|
||||
import cn.fateverse.query.mapper.PortalMappingMapper;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
@@ -31,19 +30,14 @@ public class PortalDispatchServlet {
|
||||
|
||||
private final PortalMapper portalMapper;
|
||||
|
||||
private final DataAdapterMapper dataAdapterMapper;
|
||||
|
||||
private final PortalMappingMapper portalMappingMapper;
|
||||
|
||||
private final DataAdapterHandlerReader dataAdapterHandler;
|
||||
|
||||
|
||||
public PortalDispatchServlet(PortalMapper portalMapper,
|
||||
DataAdapterMapper dataAdapterMapper,
|
||||
PortalMappingMapper portalMappingMapper,
|
||||
DataAdapterHandlerReader dataAdapterHandler) {
|
||||
this.portalMapper = portalMapper;
|
||||
this.dataAdapterMapper = dataAdapterMapper;
|
||||
this.portalMappingMapper = portalMappingMapper;
|
||||
this.dataAdapterHandler = dataAdapterHandler;
|
||||
}
|
||||
@@ -67,12 +61,7 @@ public class PortalDispatchServlet {
|
||||
redisTemplate.opsForValue().set(QueryConstant.PORTAL_KEY + portalBo.getPath() + ":" + portalBo.getRequestMethod(), portalBo);
|
||||
}
|
||||
//进行数据适配器的执行逻辑
|
||||
Object result = null;
|
||||
// if (portalBo.getState() == 1 || portalBo.getState() == 2) {
|
||||
result = dataAdapterHandler.execute(portalBo, request);
|
||||
// } else {
|
||||
// result = dataAdapterHandler.mockExecute(portalBo, request);
|
||||
// }
|
||||
Object result = dataAdapterHandler.execute(portalBo, request);
|
||||
//将返回结果放入response
|
||||
ResponseRender.renderString(response, Result.ok(result));
|
||||
}
|
||||
|
||||
@@ -2,28 +2,12 @@ package cn.fateverse.query.portal.service;
|
||||
|
||||
import cn.fateverse.common.core.exception.CustomException;
|
||||
import cn.fateverse.common.core.utils.SpringContextHolder;
|
||||
import cn.fateverse.query.dubbo.DubboDispatchServletPublish;
|
||||
import cn.fateverse.query.portal.PortalDispatchServlet;
|
||||
import cn.fateverse.query.portal.config.DubboServiceBean;
|
||||
import cn.fateverse.query.portal.event.DispatchSyncEvent;
|
||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||
import com.alibaba.cloud.nacos.registry.NacosRegistration;
|
||||
import com.alibaba.nacos.api.PropertyKeyConst;
|
||||
import com.alibaba.nacos.api.exception.NacosException;
|
||||
import com.alibaba.nacos.api.naming.NamingService;
|
||||
import com.alibaba.nacos.api.naming.pojo.Instance;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.apache.dubbo.rpc.RpcContext;
|
||||
import org.apache.dubbo.rpc.RpcContextAttachment;
|
||||
import org.apache.dubbo.rpc.cluster.specifyaddress.Address;
|
||||
import org.apache.dubbo.rpc.cluster.specifyaddress.UserSpecifiedAddressUtil;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
@@ -32,12 +16,7 @@ import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
|
||||
/**
|
||||
* @author Clay
|
||||
@@ -49,7 +28,7 @@ public class HandlerMethodService implements ApplicationContextAware {
|
||||
|
||||
public static final String CUSTOM_INTERFACE = "customInterface:";
|
||||
|
||||
private RequestMappingHandlerMapping mapping;
|
||||
private RequestMappingHandlerMapping handlerMapping;
|
||||
|
||||
private Method mappingMethod;
|
||||
|
||||
@@ -73,7 +52,7 @@ public class HandlerMethodService implements ApplicationContextAware {
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||
//获取到web mvc的接口存储mapping
|
||||
mapping = (RequestMappingHandlerMapping) applicationContext.getBean("requestMappingHandlerMapping");
|
||||
handlerMapping = (RequestMappingHandlerMapping) applicationContext.getBean("requestMappingHandlerMapping");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -92,12 +71,12 @@ public class HandlerMethodService implements ApplicationContextAware {
|
||||
.consumes(empty)
|
||||
.produces(empty)
|
||||
.mappingName(CUSTOM_INTERFACE + path);
|
||||
RequestMappingInfo requestMappingInfo = builder.options(mapping.getBuilderConfiguration()).build();
|
||||
Map<RequestMappingInfo, HandlerMethod> handlerMethods = mapping.getHandlerMethods();
|
||||
RequestMappingInfo requestMappingInfo = builder.options(handlerMapping.getBuilderConfiguration()).build();
|
||||
Map<RequestMappingInfo, HandlerMethod> handlerMethods = handlerMapping.getHandlerMethods();
|
||||
if (handlerMethods.containsKey(requestMappingInfo)) {
|
||||
throw new CustomException("path is exist");
|
||||
}
|
||||
mapping.registerMapping(requestMappingInfo, "portalDispatchServlet", mappingMethod);
|
||||
handlerMapping.registerMapping(requestMappingInfo, "portalDispatchServlet", mappingMethod);
|
||||
// 判断是否需要发起同步
|
||||
if (sync) {
|
||||
//使用事件监听机制,避免循环注入
|
||||
@@ -112,12 +91,12 @@ public class HandlerMethodService implements ApplicationContextAware {
|
||||
* @param requestMethod 请求类型
|
||||
*/
|
||||
public void unregisterMapping(String path, RequestMethod requestMethod, Boolean sync) {
|
||||
Map<RequestMappingInfo, HandlerMethod> handlerMethods = mapping.getHandlerMethods();
|
||||
Map<RequestMappingInfo, HandlerMethod> handlerMethods = handlerMapping.getHandlerMethods();
|
||||
for (RequestMappingInfo mappingInfo : handlerMethods.keySet()) {
|
||||
if (!ObjectUtils.isEmpty(mappingInfo.getName())
|
||||
&& (CUSTOM_INTERFACE + path).equals(mappingInfo.getName())
|
||||
&& mappingInfo.getMethodsCondition().getMethods().contains(requestMethod)) {
|
||||
mapping.unregisterMapping(mappingInfo);
|
||||
handlerMapping.unregisterMapping(mappingInfo);
|
||||
if (sync) {
|
||||
SpringContextHolder.publishEvent(new DispatchSyncEvent(path, requestMethod.name(), Boolean.FALSE));
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import cn.fateverse.common.core.result.page.TableDataInfo;
|
||||
import cn.fateverse.query.entity.dto.DataAdapterCodeDto;
|
||||
import cn.fateverse.query.entity.dto.MockParam;
|
||||
import cn.fateverse.query.entity.dto.PortalDto;
|
||||
import cn.fateverse.query.entity.dto.PortalPublish;
|
||||
import cn.fateverse.query.entity.query.PortalQuery;
|
||||
import cn.fateverse.query.entity.vo.PortalIdWrapper;
|
||||
import cn.fateverse.query.entity.vo.PortalVo;
|
||||
@@ -79,6 +80,14 @@ public interface PortalService {
|
||||
*/
|
||||
PortalIdWrapper edit(PortalDto portalDto);
|
||||
|
||||
/**
|
||||
* 发布接口
|
||||
*
|
||||
* @param portalPublish 发布接口对象
|
||||
* @param isList 是否为list发布
|
||||
*/
|
||||
void publish(PortalPublish portalPublish, Boolean isList);
|
||||
|
||||
/**
|
||||
* 取消发布
|
||||
*
|
||||
|
||||
@@ -7,11 +7,13 @@ import cn.fateverse.query.entity.*;
|
||||
import cn.fateverse.query.entity.bo.PortalBo;
|
||||
import cn.fateverse.query.entity.dto.DataAdapterCodeDto;
|
||||
import cn.fateverse.query.entity.dto.MockParam;
|
||||
import cn.fateverse.query.entity.dto.PortalPublish;
|
||||
import cn.fateverse.query.entity.vo.DataAdapterVo;
|
||||
import cn.fateverse.query.entity.vo.PortalIdWrapper;
|
||||
import cn.fateverse.query.enums.DataAdapterType;
|
||||
import cn.fateverse.query.enums.PortalPremEnum;
|
||||
import cn.fateverse.query.handler.reader.DataAdapterHandlerReader;
|
||||
import cn.fateverse.query.handler.reader.EngineExecuteHandlerReader;
|
||||
import cn.fateverse.query.mapper.*;
|
||||
import cn.fateverse.query.portal.service.HandlerMethodService;
|
||||
import cn.fateverse.query.constant.QueryConstant;
|
||||
@@ -60,6 +62,8 @@ public class PortalServiceImpl implements PortalService {
|
||||
|
||||
private final DataAdapterHandlerReader handlerReader;
|
||||
|
||||
private final EngineExecuteHandlerReader executeHandlerReader;
|
||||
|
||||
public PortalServiceImpl(PortalMapper portalMapper,
|
||||
UniQueryMapper queryMapper,
|
||||
DataAdapterMapper adapterMapper,
|
||||
@@ -67,7 +71,8 @@ public class PortalServiceImpl implements PortalService {
|
||||
ThreadPoolTaskExecutor taskExecuteExecutor,
|
||||
HandlerMethodService methodService,
|
||||
PortalInterfaceMapper portalInterfaceMapper,
|
||||
DataAdapterHandlerReader handlerReader) {
|
||||
DataAdapterHandlerReader handlerReader,
|
||||
EngineExecuteHandlerReader executeHandlerReader) {
|
||||
this.portalMapper = portalMapper;
|
||||
this.queryMapper = queryMapper;
|
||||
this.adapterMapper = adapterMapper;
|
||||
@@ -75,6 +80,7 @@ public class PortalServiceImpl implements PortalService {
|
||||
this.methodService = methodService;
|
||||
this.portalInterfaceMapper = portalInterfaceMapper;
|
||||
this.handlerReader = handlerReader;
|
||||
this.executeHandlerReader = executeHandlerReader;
|
||||
taskExecuteExecutor.execute(() -> {
|
||||
PortalQuery query = new PortalQuery();
|
||||
// query.setState(QueryConstant.PORTAL_PUBLISH);
|
||||
@@ -354,6 +360,24 @@ public class PortalServiceImpl implements PortalService {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void publish(PortalPublish portalPublish, Boolean isList) {
|
||||
Long portalId = portalPublish.getLongPortalId();
|
||||
Portal portal = portalMapper.selectById(portalId);
|
||||
List<PortalMapping> mappings = portalMappingMapper.selectByPortalId(portalId);
|
||||
if (!isList && portal.getCreateDataAdapter() && !ObjectUtils.isEmpty(portal.getAdapterId())) {
|
||||
DataAdapter dataAdapter = adapterMapper.selectById(portal.getAdapterId());
|
||||
dataAdapter.setCode(portalPublish.getCode());
|
||||
adapterMapper.updateCode(dataAdapter);
|
||||
}
|
||||
portalMapper.updateState(portalId, QueryConstant.PORTAL_PUBLISH);
|
||||
if (PortalPremEnum.EXTERNAL.equals(portal.getPermissionType()) || PortalPremEnum.ANONYMITY.equals(portal.getPermissionType())) {
|
||||
publishPortal(portal, mappings, Boolean.TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(Long portalId) {
|
||||
|
||||
14
start.sh
14
start.sh
@@ -31,13 +31,13 @@ batch=${DRONE_COMMIT_BRANCH}
|
||||
|
||||
ignoreArr=("monitor","sentinel-dashboard-pro","sentinel-dashboard")
|
||||
|
||||
#if [[ "${ignoreArr[*]}" =~ "${batch}" ]]; then
|
||||
# JAVA_AGENT="-javaagent:/home/clay/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=$DRONE_COMMIT_BRANCH -Dskywalking.trace.ignore_path=/actuator/** -Dskywalking.collector.backend_service=10.7.89.101:11800 --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dio.netty.tryReflectionSetAccessible=true"
|
||||
# nohup java -jar $JAVA_AGENT $JAVA_OPTS $JAVA_MEM_OPTS $DRONE_COMMIT_BRANCH.jar --spring.profiles.active=pro --server.port=8080 >./logs/spring.log 2>&1 &
|
||||
#else
|
||||
# echo "exist";
|
||||
# nohup java -jar $JAVA_OPTS $JAVA_MEM_OPTS $DRONE_COMMIT_BRANCH.jar --spring.profiles.active=pro --server.port=8080 >./logs/spring.log 2>&1 &
|
||||
#fi
|
||||
if [[ "${ignoreArr[*]}" =~ "${batch}" ]]; then
|
||||
JAVA_AGENT="-javaagent:/home/clay/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=$DRONE_COMMIT_BRANCH -Dskywalking.trace.ignore_path=/actuator/** -Dskywalking.collector.backend_service=10.7.125.151:11800 --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dio.netty.tryReflectionSetAccessible=true"
|
||||
nohup java -jar $JAVA_AGENT $JAVA_OPTS $JAVA_MEM_OPTS $DRONE_COMMIT_BRANCH.jar --spring.profiles.active=pro --server.port=8080 >./logs/spring.log 2>&1 &
|
||||
else
|
||||
echo "exist";
|
||||
nohup java -jar $JAVA_OPTS $JAVA_MEM_OPTS $DRONE_COMMIT_BRANCH.jar --spring.profiles.active=pro --server.port=8080 >./logs/spring.log 2>&1 &
|
||||
fi
|
||||
|
||||
nohup java -jar $JAVA_OPTS $JAVA_MEM_OPTS $DRONE_COMMIT_BRANCH.jar --spring.profiles.active=pro --server.port=8080 >./logs/spring.log 2>&1 &
|
||||
|
||||
|
||||
Reference in New Issue
Block a user