Compare commits

..

7 Commits

  1. 37
      pom.xml
  2. 6
      src/main/java/com/palnet/PavApplication.java
  3. 2
      src/main/java/com/palnet/biz/api/anls/smlt/service/AnlsSmltService.java
  4. 25
      src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
  5. 15
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightCoordModel.java
  6. 57
      src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java
  7. 58
      src/main/java/com/palnet/biz/api/comn/controller/ComnController.java
  8. 58
      src/main/java/com/palnet/biz/api/ctr/cntrl/controller/SocketReceiverController.java
  9. 10
      src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java
  10. 117
      src/main/java/com/palnet/biz/api/ctr/cntrl/service/SocketReceiverService.java
  11. 86
      src/main/java/com/palnet/biz/config/MessageConfig.java
  12. 4
      src/main/java/com/palnet/biz/config/WebSecurityConfig.java
  13. 1
      src/main/java/com/palnet/biz/jpa/entity/CtrCntrlHstry.java
  14. 1
      src/main/java/com/palnet/biz/jpa/entity/CtrCntrlHstryArea.java
  15. 22
      src/main/java/com/palnet/biz/message/Receiver.java
  16. 53
      src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java
  17. 13
      src/main/java/com/palnet/biz/message/service/MessageService.java
  18. 203
      src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java
  19. 2
      src/main/java/com/palnet/comn/model/GPModel.java
  20. 71
      src/main/java/com/palnet/comn/utils/KmlUtils.java
  21. 142
      src/main/java/com/palnet/comn/utils/SftpUtils.java
  22. 2
      src/main/java/com/palnet/server/collection/ChannelCollection.java
  23. 4
      src/main/resources/application-database.yml
  24. 10
      src/main/resources/application.properties
  25. 2
      src/main/resources/application.yml

37
pom.xml

@ -140,15 +140,15 @@
</dependency>
<!-- Spring AMQP -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.amqp</groupId>-->
<!-- <artifactId>spring-rabbit-test</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-amqp</artifactId>-->
<!-- </dependency>-->
<!-- Swagger -->
<dependency>
@ -192,24 +192,7 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
<!-- https://mvnrepository.com/artifact/de.micromata.jak/JavaAPIforKml -->
<dependency>
<groupId>de.micromata.jak</groupId>
<artifactId>JavaAPIforKml</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
<build>

6
src/main/java/com/palnet/Application.java → src/main/java/com/palnet/PavApplication.java

@ -1,10 +1,8 @@
package com.palnet;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@ -12,10 +10,10 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@EnableScheduling
@EnableAsync
@EnableCaching
public class Application {
public class PavApplication {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
SpringApplication.run(PavApplication.class, args);
}
}

2
src/main/java/com/palnet/biz/api/anls/smlt/service/AnlsSmltService.java

@ -71,7 +71,7 @@ public class AnlsSmltService {
List<JwtGroupModel> adminAuth = new ArrayList<>();
Integer cstmrSno = jwtTokenUtil.getCstmrSnoByToken();
ComnPagingRs<AnlsHstryModel> response = new ComnPagingRs<>();
Pageable pageable = PageRequest.of(rq.getPage()-1, 5);
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord());
PageImpl<AnlsHstryModel> result;
List<AnlsHstryModel>resultList = new ArrayList<>();

25
src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java

@ -6,6 +6,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -14,6 +15,8 @@ import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.proj4j.CRSFactory;
import org.locationtech.proj4j.CoordinateReferenceSystem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
@ -32,7 +35,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.palnet.biz.api.bas.flight.model.BasFlightAprovRq;
import com.palnet.biz.api.bas.flight.model.BasFlightCoordModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq;
@ -141,8 +143,8 @@ public class BasFlightController {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
log.info(">>> rq : {}", rq);
basFlightService.createPlan(rq);
resultMap.put("result", true);
boolean result = basFlightService.createPlan(rq);
resultMap.put("result", result);
log.info(">>> resultMap : " , resultMap);
} catch (CustomException e) {
@ -384,20 +386,15 @@ public class BasFlightController {
}
//test
@PostMapping("/adex/buffer")
public List<Coordinate> adexBuffer(@RequestBody BasFlightCoordModel model) {
List<Coordinate> transCoordList = utils.transform(model.getCoordinates(), "EPSG:4326", "EPSG:5181");
@GetMapping("/test")
public void createCircleTest(@RequestParam double getX, @RequestParam double getY, @RequestParam double buffer) {
List<Coordinate> bufferList = utils.buffer(transCoordList, model.getBuffer()); // buffer 영역 생성
List<Coordinate> transBufferList = utils.transform(bufferList, "EPSG:5181", "EPSG:4326"); // buffer 영역 좌표계 변환
Coordinate circleCoord = new Coordinate(getY, getX);
return transBufferList;
List<Coordinate> coordList = utils.createCircle(circleCoord, buffer);
for(Coordinate a : coordList) {
System.out.println("["+a.getX() + ", " + a.getY()+"],");
}
public void test3d(@RequestBody Coordinate coord, @RequestParam double buffer) {
}
}

15
src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightCoordModel.java

@ -1,15 +0,0 @@
package com.palnet.biz.api.bas.flight.model;
import java.util.List;
import org.locationtech.jts.geom.Coordinate;
import lombok.Data;
@Data
public class BasFlightCoordModel {
private List<Coordinate> coordinates;
private Double buffer;
}

57
src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

@ -13,15 +13,12 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.xml.bind.JAXBException;
import org.apache.commons.lang3.StringUtils;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.locationtech.jts.geom.Coordinate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
@ -60,8 +57,6 @@ import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException;
import com.palnet.comn.utils.AreaUtils;
import com.palnet.comn.utils.EncryptUtils;
import com.palnet.comn.utils.KmlUtils;
import com.palnet.comn.utils.SftpUtils;
import lombok.extern.log4j.Log4j2;
@ -74,14 +69,6 @@ public class BasFlightService {
@Autowired
private CtrTrnsLctnService ctrTrnsLctnService;
@Value("${spring.config.activate.on-profile:}")
private String profile;
@Value("${weather.api.url}")
private String weatherUrl;
@Value("${weather.api.key}")
private String weatherKey;
private final FltPlanBasRepository fltPlanBasRepository;
private final FltPlanArcrftRepository fltPlanArcrftRepository;
private final FltPlanAreaRepository fltPlanAreaRepository;
@ -91,8 +78,6 @@ public class BasFlightService {
private final PtyGroupQueryRepository ptyPlanQueryRepository;
private final JwtTokenUtil jwtTokenUtil;
private final AreaUtils areaUtils;
private final KmlUtils kmlUtils;
private final SftpUtils sftpUtils;
public BasFlightService(FltPlanBasRepository fltPlanBasRepository,
FltPlanArcrftRepository fltPlanArcrftRepository,
@ -102,9 +87,7 @@ public class BasFlightService {
FltPlanQueryRepository fltPlanQueryRepository,
PtyGroupQueryRepository ptyPlanQueryRepository,
JwtTokenUtil jwtTokenUtil,
AreaUtils areaUtils,
KmlUtils kmlUtils,
SftpUtils sftpUtils) {
AreaUtils areaUtils) {
this.fltPlanBasRepository = fltPlanBasRepository;
this.fltPlanArcrftRepository = fltPlanArcrftRepository;
this.fltPlanAreaRepository = fltPlanAreaRepository;
@ -114,8 +97,6 @@ public class BasFlightService {
this.ptyPlanQueryRepository = ptyPlanQueryRepository;
this.jwtTokenUtil = jwtTokenUtil;
this.areaUtils = areaUtils;
this.kmlUtils = kmlUtils;
this.sftpUtils = sftpUtils;
}
// 비행계획서 조회
@ -308,7 +289,7 @@ public class BasFlightService {
// 비행계획서 등록
@Transactional
public void createPlan(BasFlightPlanModel rq) throws IOException, JAXBException {
public boolean createPlan(BasFlightPlanModel rq) {
// 비행계획서 유효성 검사.
this.planValid(rq);
@ -368,27 +349,12 @@ public class BasFlightService {
fltPlanArcrftRepository.save(arcrftEntity);
}
}
List<String> coords = new ArrayList<String>();
for(BasFlightPlanAreaCoordModel coordModel : areaModelList.get(0).getCoordList()) {
coords.add(coordModel.getLon() + "," + coordModel.getLat());
}
log.info("profile >>>>>>>>>>>> : {} " , profile);
if(!("local".equals(profile.toString()))) {
log.info("kml parse");
String kml = kmlUtils.generateKMLFromSimpleKml(coords);
sftpUtils.init(kml, "PLAN-COORDS-" + planSno);
}
// log.info(">>>>>>>>>>>>>> result {}" , result);
return true;
}
// 비행계획서 수정
@Transactional
public boolean updatePlan(BasFlightPlanModel rq) throws IOException, JAXBException {
public boolean updatePlan(BasFlightPlanModel rq) {
// 비행계획서 유효성 검사.
this.planValid(rq);
@ -508,18 +474,7 @@ public class BasFlightService {
}).collect(Collectors.toList());
fltPlanArcrftRepository.deleteAll(deleteArcrftEntity);
}
List<String> coords = new ArrayList<String>();
for(BasFlightPlanAreaCoordModel coordModel : areaModelList.get(0).getCoordList()) {
coords.add(coordModel.getLon() + "," + coordModel.getLat());
}
String kml = kmlUtils.generateKMLFromSimpleKml(coords);
sftpUtils.init(kml, "PLAN-COORDS-" + planSno);
}
return true;
}
@ -718,8 +673,8 @@ public class BasFlightService {
return schedule;
}
public JSONObject getWeather(BasFlightWeatherModel rq) throws IOException, ParseException {
StringBuilder urlBuilder = new StringBuilder(weatherUrl);
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + weatherKey);
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst");
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D");
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode(rq.getPageNo(),"UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode(rq.getNumOfRows(), "UTF-8")); /*한 페이지 결과 수*/
urlBuilder.append("&" + URLEncoder.encode("dataType","UTF-8") + "=" + URLEncoder.encode("JSON", "UTF-8")); /*요청자료형식(XML/JSON) Default: XML*/

58
src/main/java/com/palnet/biz/api/comn/controller/ComnController.java

@ -1,58 +0,0 @@
package com.palnet.biz.api.comn.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@RestController
@Slf4j
@RequestMapping("/api/comn")
@RequiredArgsConstructor
public class ComnController {
private final HttpServletResponse response;
private final String BASE_URL = "/data/pdf/3-1.paldesign.pdf";
@GetMapping("/pdf-download")
public void pdfDownload(){
log.error("ComnController - pdfDownload()");
try (InputStream inputStream = new FileInputStream(new File(BASE_URL));
OutputStream outputStream = response.getOutputStream()) {
String fileOriName = "3-1.paldesign.pdf";
fileOriName = URLEncoder.encode(fileOriName, StandardCharsets.UTF_8);
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileOriName + "\"");
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}
} catch (IOException e) {
log.error("error -> {}", e.getMessage());
}
}
}

58
src/main/java/com/palnet/biz/api/ctr/cntrl/controller/SocketReceiverController.java

@ -0,0 +1,58 @@
package com.palnet.biz.api.ctr.cntrl.controller;
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlModel;
import com.palnet.biz.api.ctr.cntrl.service.SocketReceiverService;
import com.palnet.comn.model.GPModel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
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.RestController;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
/**
* packageName : com.palnet.biz.api.ctr.cntrl.controller
* fileName : SocketReciverController
* author : dhji
* date : 2023-08-29(029)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-08-29(029) dhji 최초 생성
*/
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/server")
public class SocketReceiverController {
private final SocketReceiverService socketReceiverService;
@PostMapping("/receiver")
public ResponseEntity<?> receiver(@RequestBody GPModel model) {
System.out.println("socket message : " + model);
socketReceiverService.insert(model);
return ResponseEntity.ok().build();
}
@PostMapping("/receiver/async")
public Callable<String> asyncReceiver(@RequestBody GPModel model) {
return () -> {
log.info("websocket message : {}", model);
socketReceiverService.insert(model);
return "OK";
};
}
@PostMapping("/receiver/all")
public ResponseEntity<?> receiver(@RequestBody Map<String, List<GPModel>> models) {
// System.out.println("socket message : " + models);
socketReceiverService.insertAll(models);
return ResponseEntity.ok().build();
}
}

10
src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java

@ -24,7 +24,6 @@ import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.locationtech.jts.geom.Coordinate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -88,11 +87,6 @@ public class CtrCntrlService {
@Autowired
private FltPlanCtrCntrlRelRepository relRepository;
@Value("${weather.api.url}")
private String weatherUrl;
@Value("${weather.api.key}")
private String weatherKey;
private final CtrCntrlQueryRepository query;
private final CtrCntrlBasRepository cntrlBasRepository;
private final CtrCntrlHstryRepository cntrlHstryRepository;
@ -623,7 +617,7 @@ public class CtrCntrlService {
public JSONObject getWeather(CtrCntrlWeatherModel rq) throws IOException, ParseException {
StringBuilder urlBuilder = new StringBuilder(weatherUrl);
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Calendar c1 = Calendar.getInstance();
@ -703,7 +697,7 @@ public class CtrCntrlService {
String Snx = String.format("%.0f",nx);
String Sny = String.format("%.0f",ny);
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + weatherKey);
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D");
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1","UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("14", "UTF-8")); /*한 페이지 결과 수*/
urlBuilder.append("&" + URLEncoder.encode("dataType","UTF-8") + "=" + URLEncoder.encode("JSON", "UTF-8")); /*요청자료형식(XML/JSON) Default: XML*/

117
src/main/java/com/palnet/biz/api/ctr/cntrl/service/SocketReceiverService.java

@ -0,0 +1,117 @@
package com.palnet.biz.api.ctr.cntrl.service;
import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.repository.com.ComArcrftBasRepository;
import com.palnet.biz.jpa.repository.com.ComIdntBasRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanCtrCntrlRelRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository;
import com.palnet.biz.jpa.repository.pty.PtyDronQueryRepository;
import com.palnet.biz.jpa.service.ctr.CtrCntrlJpaService;
import com.palnet.comn.model.GPDatabaseModel;
import com.palnet.comn.model.GPModel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StopWatch;
import java.util.List;
import java.util.Map;
/**
* packageName : com.palnet.biz.api.ctr.cntrl.service
* fileName : SocketReciverService
* author : dhji
* date : 2023-08-29(029)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-08-29(029) dhji 최초 생성
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class SocketReceiverService {
private final CtrCntrlJpaService ctrCntrlJpaService;
private final PtyDronQueryRepository ptyDronQueryRepository;
private final ComArcrftBasRepository arcrftBasRepository;
private final ComIdntBasRepository idntBasRepository;
private final FltPlanQueryRepository fltPlanQueryRepository;
private final FltPlanCtrCntrlRelRepository ctrCntrlRelRepository;
@Transactional
public void insert(GPModel model) {
GPDatabaseModel dbModel = new GPDatabaseModel();
BeanUtils.copyProperties(model, dbModel);
if ("01".equals(model.getTypeCd())) {
String prodNumber = ptyDronQueryRepository.findIdntfNumByProdNumber(model.getObjectId());
dbModel.setProdNumber(prodNumber);
// 비행 이력 생성
CtrCntrlBas ctrCntrlBas = ctrCntrlJpaService.insertCtrCntrlBas(dbModel);
// 비행 이력, 비행 계획서 mapping
if ("PA".equals(model.getObjectId().substring(0, 2))) {
FltPlanCtrCntrlRel fltPlanCtrCntrlRel = new FltPlanCtrCntrlRel();
// 1. 식별 번호의 소유자 정보 저장.
ComIdntfBas idntfBas = idntBasRepository.findById(model.getObjectId()).orElse(null);
// 1-1. 식별 번호의 모델 정보 조회
ComArcrftBas arcrftBas = arcrftBasRepository.findById(idntfBas.getArcrftSno()).orElse(null);
if (idntfBas != null && arcrftBas != null) {
fltPlanCtrCntrlRel.setCntrlId(ctrCntrlBas.getCntrlId());
fltPlanCtrCntrlRel.setIdntfNum(ctrCntrlBas.getIdntfNum());
fltPlanCtrCntrlRel.setIdntfCstmrSno(idntfBas.getCstmrSno());
fltPlanCtrCntrlRel.setGroupId(arcrftBas.getGroupId());
}
// 2. 해당 되는 비행계획서 정보 저장.
List<FltPlanBas> planArcrft =
fltPlanQueryRepository.findByFlightPlanArcrft(ctrCntrlBas.getIdntfNum(), dbModel.getServerRcvDt());
if (!planArcrft.isEmpty()) {
for (FltPlanBas plan : planArcrft) {
fltPlanCtrCntrlRel.setPlanSno(plan.getPlanSno());
}
}
// 3. mapping 정보 주입.
if (!fltPlanCtrCntrlRel.getCntrlId().isEmpty()) {
ctrCntrlRelRepository.save(fltPlanCtrCntrlRel);
}
}
}
// Drone인 경우에만 history 생성
CtrCntrlHstry ctrCntrlHstry = ctrCntrlJpaService.insertCtrCntrlHstry(dbModel);
if ("01".equals(model.getTypeCd()) || "99".equals(model.getTypeCd())) {
ctrCntrlJpaService.insertCtrCntrlHstryArea(dbModel, ctrCntrlHstry.getHstrySno());
}
}
@Transactional
public void insertAll(Map<String, List<GPModel>> models) {
// TODO 일괄 처리 필요
log.info(">>> models :: {}", models.size());
StopWatch stopWatch = new StopWatch();
stopWatch.start();
for (String key : models.keySet()) {
List<GPModel> list = models.get(key);
log.info(">>> models size :: {}", list.size());
for (GPModel model : list) {
log.info(">> model: {}", model);
this.insert(model);
}
}
stopWatch.stop();
log.info(">>> insertAll time : {}", stopWatch.getTotalTimeSeconds());
}
}

86
src/main/java/com/palnet/biz/config/MessageConfig.java

@ -1,86 +0,0 @@
package com.palnet.biz.config;
import com.rabbitmq.client.ShutdownSignalException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.Connection;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
@Configuration
@Slf4j
public class MessageConfig {
private final Environment env;
public MessageConfig(Environment env) {
this.env = env;
}
// @Bean
// public CachingConnectionFactory cachingConnectionFactory() {
// CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
//
// connectionFactory.setHost(env.getProperty("spring.rabbitmq.host"));
// connectionFactory.setPort(Integer.parseInt(env.getProperty("spring.rabbitmq.port")));
// connectionFactory.setUsername(env.getProperty("spring.rabbitmq.username"));
// connectionFactory.setPassword(env.getProperty("spring.rabbitmq.password"));
//
// return connectionFactory;
// }
@Bean
public Jackson2JsonMessageConverter converter() {
return new Jackson2JsonMessageConverter();
}
// @Bean
// public DirectExchange appDroneExchange() {
// return new DirectExchange(env.getProperty("message.app.exchange-name"));
// }
//
// @Bean
// public DirectExchange websocketDroneExchange() {
// return new DirectExchange(env.getProperty("message.websocket.exchange-name"));
// }
//
// @Bean
// public Queue appDroneQueue() {
// return new Queue(env.getProperty("message.app.queue-name"), false);
// }
//
// @Bean
// public Queue websocketDroneQueue() {
// return new Queue(env.getProperty("message.websocket.queue-name"), false);
// }
//
// @Bean
// public Binding appDroneBinding(Queue appDroneQueue, DirectExchange appDroneExchange) {
// return BindingBuilder.bind(appDroneQueue)
// .to(appDroneExchange)
// .with(env.getProperty("message.app.routing-key"));
// }
//
// @Bean
// public Binding websocketDroneBinding(Queue websocketDroneQueue, DirectExchange websocketDroneExchange) {
// return BindingBuilder.bind(websocketDroneQueue)
// .to(websocketDroneExchange)
// .with(env.getProperty("message.websocket.routing-key"));
// }
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) {
RabbitTemplate rabbitTemplate = new RabbitTemplate();
rabbitTemplate.setConnectionFactory(connectionFactory);
rabbitTemplate.setMessageConverter(converter);
return rabbitTemplate;
}
}

4
src/main/java/com/palnet/biz/config/WebSecurityConfig.java

@ -38,6 +38,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final String[] PERMITTED_URL = {
"/api/acnt/**",
"/api/ctr/cntrl/id/**",
"/api/server/**",
/* swagger v2 */
"/v2/api-docs",
"/swagger-resources",
@ -48,8 +49,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
"/webjars/**",
/* swagger v3 */
"/v3/api-docs/**",
"/swagger-ui/**",
"/api/comn/pdf-download" // TODO :: 전시회를 위한 임시 허용 URL
"/swagger-ui/**"
};
@Autowired

1
src/main/java/com/palnet/biz/jpa/entity/CtrCntrlHstry.java

@ -16,6 +16,7 @@ public class CtrCntrlHstry implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="HSTRY_SNO")
private int hstrySno;

1
src/main/java/com/palnet/biz/jpa/entity/CtrCntrlHstryArea.java

@ -16,6 +16,7 @@ public class CtrCntrlHstryArea implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="HSTRY_AREA_SNO")
private int hstryAreaSno;

22
src/main/java/com/palnet/biz/message/Receiver.java

@ -1,22 +0,0 @@
package com.palnet.biz.message;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.concurrent.CountDownLatch;
@Component
@Slf4j
public class Receiver {
private CountDownLatch latch = new CountDownLatch(1);
public void receiveMessage(String message) {
log.info("Received <" + message);
latch.countDown();
}
public CountDownLatch getLatch() {
return latch;
}
}

53
src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java

@ -1,53 +0,0 @@
package com.palnet.biz.message.consumer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.palnet.biz.message.service.MessageService;
import com.palnet.comn.model.GPModel;
import com.palnet.comn.utils.JsonUtils;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
@Slf4j
public class MessageConsumer {
private final MessageService messageService;
private final ObjectMapper objectMapper;
public MessageConsumer(MessageService messageService) {
this.messageService = messageService;
this.objectMapper = JsonUtils.getObjectMapper();
}
@RabbitHandler
@RabbitListener(queues = {"app.drone.queue"})
public void receivedDroneMessage(final String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
try {
GPModel model = objectMapper.readValue(message, GPModel.class);
messageService.insert(model); // GPS 정보 DB 동기화 처리
/* channel.queueDeclare(message, true, false, false, null); rabbitMQ 서버 강제 종료 Queue가 유실되는 것을 방지하기 위해 disk에 Queue를 적재 ( Queue 영속성 )
-> 옵션 설정시 Queue의 유실은 방지할 있으나 Consumer Ack의 응답률이 절반으로 떨어지게 되고 , Unacked -> Ready로 되돌아가는 Queue가 생김 */
// channel.basicConsume(message, true, null);
channel.basicAck(tag, true); // channel 유지를 위해 Consumer -> Producer로 수신 확인 신호를 자동으로 전송
// channel.exchangeDeclare(message, "direct", true); Queue Exchange 방식 지정(binding 안되어있으면 설정)
} catch (RuntimeException e) {
channel.basicReject(tag, false);
}
}
}

13
src/main/java/com/palnet/biz/message/service/MessageService.java

@ -1,13 +0,0 @@
package com.palnet.biz.message.service;
import com.palnet.comn.model.GPModel;
public interface MessageService {
GPModel mapper(GPModel model);
void insert(GPModel model);
void sendToMessage(GPModel model);
}

203
src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java

@ -1,203 +0,0 @@
package com.palnet.biz.message.service.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel;
import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.repository.com.ComArcrftBasRepository;
import com.palnet.biz.jpa.repository.com.ComIdntBasRepository;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlHstryRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanArcrftRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanCtrCntrlRelRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository;
import com.palnet.biz.jpa.repository.pty.PtyDronQueryRepository;
import com.palnet.biz.jpa.service.ctr.CtrCntrlJpaService;
import com.palnet.biz.api.comn.model.ControlGpsDataContext;
import com.palnet.biz.message.service.MessageService;
import com.palnet.comn.model.GPDatabaseModel;
import com.palnet.comn.model.GPModel;
import com.palnet.comn.utils.DateUtils;
import com.palnet.comn.utils.JsonUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.BeanUtils;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@Service
@Slf4j
public class MessageServiceImpl implements MessageService {
private final CtrCntrlJpaService ctrCntrlJpaService;
private final CtrCntrlBasRepository ctrCntrlBasRepository;
private final CtrCntrlHstryRepository ctrCntrlHstryRepository;
private final PtyDronQueryRepository ptyDronQueryRepository;
private final ComArcrftBasRepository arcrftBasRepository;
private final ComIdntBasRepository idntBasRepository;
private final FltPlanQueryRepository fltPlanQueryRepository;
private final FltPlanCtrCntrlRelRepository ctrCntrlRelRepository;
private final ControlGpsDataContext shareContext;
private final RabbitTemplate rabbitTemplate;
private final Environment env;
private final ObjectMapper objectMapper;
public MessageServiceImpl(CtrCntrlJpaService ctrCntrlJpaService,
CtrCntrlBasRepository ctrCntrlBasRepository,
CtrCntrlHstryRepository ctrCntrlHstryRepository,
PtyDronQueryRepository ptyDronQueryRepository,
ComArcrftBasRepository arcrftBasRepository,
ComIdntBasRepository idntBasRepository,
FltPlanQueryRepository fltPlanQueryRepository,
FltPlanCtrCntrlRelRepository ctrCntrlRelRepository,
ControlGpsDataContext shareContext,
RabbitTemplate rabbitTemplate,
Environment env
) {
this.ctrCntrlJpaService = ctrCntrlJpaService;
this.ctrCntrlBasRepository = ctrCntrlBasRepository;
this.ctrCntrlHstryRepository = ctrCntrlHstryRepository;
this.ptyDronQueryRepository = ptyDronQueryRepository;
this.arcrftBasRepository = arcrftBasRepository;
this.idntBasRepository = idntBasRepository;
this.fltPlanQueryRepository = fltPlanQueryRepository;
this.ctrCntrlRelRepository = ctrCntrlRelRepository;
this.shareContext = shareContext;
this.rabbitTemplate = rabbitTemplate;
this.env = env;
this.objectMapper = JsonUtils.getObjectMapper();
}
/**
* TODO Control-Id Mapping
*
* @param model
* @return
*/
@Override
@Transactional(readOnly = true)
public GPModel mapper(GPModel model) {
/* 식별번호의 가장 최근 이력 불러오기 */
CtrCntrlBas latestControl = ctrCntrlBasRepository.findFirstByIdntfNumOrderByCreateDtDesc(model.getObjectId()).orElse(null);
boolean isControl = false;
if(latestControl != null) {
CtrCntrlHstry latestHistory = ctrCntrlHstryRepository.findFirstByCntrlIdOrderBySrvrRcvDtDesc(latestControl.getCntrlId()).orElse(null);
long diffMinute = DateUtils.diffMinute(latestHistory.getSrvrRcvDt(), new Date());
log.info("DIFF MINUTE : {}", diffMinute);
if("01".equals(latestControl.getEndTypeCd()) || diffMinute > 5) {
isControl = false;
}
if(!"01".equals(latestControl.getEndTypeCd()) && diffMinute < 5) {
isControl = true;
}
} else {
isControl = false;
}
if(isControl) {
model.setControlId(latestControl.getCntrlId());
model.setTypeCd("02");
model.setAreaTrnsYn("E");
} else {
String controlID = UUID.randomUUID().toString();
model.setControlId(controlID);
model.setTypeCd("01");
model.setAreaTrnsYn("N");
model.setControlStartDt(DateUtils.getCurrentTime());
}
// 기체 식별번호의 관제 ID 저장
shareContext.putIdntfKey(model.getObjectId(), model.getControlId());
return model;
}
/**
* TODO 비행 이력 생성
*
* @param model
*/
@Override
@Transactional
public void insert(GPModel model) {
GPDatabaseModel dbModel = new GPDatabaseModel();
BeanUtils.copyProperties(model, dbModel);
if(model.getTypeCd().equals("01")) {
String prodNumber = ptyDronQueryRepository.findIdntfNumByProdNumber(model.getObjectId());
dbModel.setProdNumber(prodNumber);
// 비행 이력 생성
CtrCntrlBas ctrCntrlBas = ctrCntrlJpaService.insertCtrCntrlBas(dbModel);
// 비행 이력, 비행 계획서 mapping
if ("PA".equals(model.getObjectId().substring(0,2))) {
FltPlanCtrCntrlRel fltPlanCtrCntrlRel = new FltPlanCtrCntrlRel();
// 1. 식별 번호의 소유자 정보 저장.
ComIdntfBas idntfBas = idntBasRepository.findById(model.getObjectId()).orElse(null);
// 1-1. 식별 번호의 모델 정보 조회
ComArcrftBas arcrftBas = arcrftBasRepository.findById(idntfBas.getArcrftSno()).orElse(null);
if (idntfBas != null && arcrftBas != null) {
fltPlanCtrCntrlRel.setCntrlId(ctrCntrlBas.getCntrlId());
fltPlanCtrCntrlRel.setIdntfNum(ctrCntrlBas.getIdntfNum());
fltPlanCtrCntrlRel.setIdntfCstmrSno(idntfBas.getCstmrSno());
fltPlanCtrCntrlRel.setGroupId(arcrftBas.getGroupId());
}
// 2. 해당 되는 비행계획서 정보 저장.
List<FltPlanBas> planArcrft =
fltPlanQueryRepository.findByFlightPlanArcrft(ctrCntrlBas.getIdntfNum(), dbModel.getServerRcvDt());
if (!planArcrft.isEmpty()) {
for (FltPlanBas plan : planArcrft) {
fltPlanCtrCntrlRel.setPlanSno(plan.getPlanSno());
}
}
// 3. mapping 정보 주입.
if (!fltPlanCtrCntrlRel.getCntrlId().isEmpty()) {
ctrCntrlRelRepository.save(fltPlanCtrCntrlRel);
}
}
}
// Drone인 경우에만 history 생성
CtrCntrlHstry ctrCntrlHstry = ctrCntrlJpaService.insertCtrCntrlHstry(dbModel);
if(model.getTypeCd().equals("01") || model.getTypeCd().equals("99")) {
ctrCntrlJpaService.insertCtrCntrlHstryArea(dbModel, ctrCntrlHstry.getHstrySno());
}
}
@Override
public void sendToMessage(GPModel model) {
String json ="";
try {
json = objectMapper.writeValueAsString(model);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
/* Websocket 서버로 전달 할 드론 데이터 */
rabbitTemplate.convertAndSend(
Objects.requireNonNull(env.getProperty("message.websocket.exchange-name")),
Objects.requireNonNull(env.getProperty("message.websocket.routing-key")),
json
);
}
}

2
src/main/java/com/palnet/comn/model/GPModel.java

@ -1,5 +1,6 @@
package com.palnet.comn.model;
import java.time.Instant;
import java.util.List;
import lombok.Data;
@ -68,5 +69,6 @@ public class GPModel {
// 비정상 상황 식별 코드
private boolean controlWarnCd;
private Instant regDt;
}

71
src/main/java/com/palnet/comn/utils/KmlUtils.java

@ -1,71 +0,0 @@
package com.palnet.comn.utils;
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import de.micromata.opengis.kml.v_2_2_0.Document;
import de.micromata.opengis.kml.v_2_2_0.Kml;
import de.micromata.opengis.kml.v_2_2_0.Placemark;
import de.micromata.opengis.kml.v_2_2_0.Point;
import lombok.extern.slf4j.Slf4j;
@Component
@Slf4j
public class KmlUtils {
public String generateKMLFromSimpleKml(List<String> coordinates) throws IOException, JAXBException {
Kml kml = new Kml();
Document document = kml.createAndSetDocument();
for (String coordinate : coordinates) {
Placemark placemark = document.createAndAddPlacemark();
placemark.setName("Simple placemark");
placemark.setDescription("Attached to the ground. Intelligently places itself at the height of the underlying terrain.");
Point point = placemark.createAndSetPoint();
point.addToCoordinates(coordinate);
}
StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(Kml.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(kml, writer);
String kmlString = writer.toString();
return kmlString;
}
// public String generateKMLFromCoordinates(List<String> coordinatesList) {
// StringBuilder kmlBuilder = new StringBuilder();
// kmlBuilder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
// kmlBuilder.append("<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n");
// kmlBuilder.append("<Document>\n");
// for (String coordinates : coordinatesList) {
// kmlBuilder.append("<Placemark>\n");
// kmlBuilder.append("<name>Simple placemark</name>\n");
// kmlBuilder.append("<description>Attached to the ground. Intelligently places itself at the height of the underlying terrain.</description>\n");
// kmlBuilder.append("<Point>\n");
// kmlBuilder.append("<coordinates>").append(coordinates).append("</coordinates>\n");
// kmlBuilder.append("</Point>\n");
// kmlBuilder.append("</Placemark>\n");
// }
// kmlBuilder.append("</Document>\n");
// kmlBuilder.append("</kml>");
//
// log.info("kml>>>>>>>>>>>{}", kmlBuilder);
//
// return kmlBuilder.toString();
// }
}

142
src/main/java/com/palnet/comn/utils/SftpUtils.java

@ -1,142 +0,0 @@
package com.palnet.comn.utils;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
import lombok.extern.log4j.Log4j2;
@Component
@Log4j2
public class SftpUtils {
private Session session = null;
private Channel channel = null;
private ChannelSftp channelSftp = null;
@Value("${spring.sftp.host}")
private String host;
@Value("${spring.sftp.userName}")
private String userName;
@Value("${spring.sftp.password}")
private String password;
@Value("${spring.sftp.port}")
private int port;
@Value("${spring.sftp.uploadPath}")
private String uploadPath;
private final Date today = new Date();
private final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
public void init(String kmlContent, String fileName) {
JSch jSch = new JSch();
try {
session = jSch.getSession(userName, host, port);
session.setPassword(password);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
// kmlContent를 ByteArrayInputStream으로 변환
ByteArrayInputStream inputStream = new ByteArrayInputStream(kmlContent.getBytes("UTF-8"));
// 파일 업로드
channelSftp.cd(uploadPath); // 원격 디렉토리로 이동
channelSftp.put(inputStream, fileName); // 파일 업로드
log.info("파일 업로드 완료");
} catch (JSchException | SftpException | UnsupportedEncodingException e) {
e.printStackTrace();
} finally {
if (channelSftp != null && channelSftp.isConnected()) {
channelSftp.disconnect();
}
if (session != null && session.isConnected()) {
session.disconnect();
}
}
}
public boolean exists(String path) {
Vector res = null;
try {
res = channelSftp.ls(path);
} catch (SftpException e) {
if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) {
return false;
}
}
return res != null && !res.isEmpty();
}
public boolean upload(String dir, File file) {
boolean isUpload = false;
SftpATTRS attrs;
FileInputStream in = null;
try {
in = new FileInputStream(file);
channelSftp.cd(dir);
channelSftp.put(in, file.getName());
// 업로드했는지 확인
if (this.exists(dir +"/"+file.getName())) {
isUpload = true;
}
} catch (SftpException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return isUpload;
}
// public void sftp(String kml) {
//
// this.init(host, userName, password, port);
//
// // 업로드 테스트
// File uploadfile = new File(uploadPath + "파일명"); // 파일 객체 생성
//
// String mkdirPath = sdf.format(today); //현재날짜 년월일
// boolean isUpload = this.upload(uploadPath+mkdirPath, uploadfile); //업로드
// System.out.println("isUpload -" + isUpload); // 업로드 여부 확인
//
// // 업로드 다운로드 수행 후 꼭 연결을 끊어줘야 한다!!
// channelSftp.quit();
// session.disconnect();
// }
}

2
src/main/java/com/palnet/server/collection/ChannelCollection.java

@ -1,7 +1,5 @@
package com.palnet.server.collection;
import java.io.Serializable;
import io.netty.channel.Channel;
import io.netty.channel.group.ChannelGroup;
import io.netty.channel.group.DefaultChannelGroup;

4
src/main/resources/application-database.yml

@ -5,7 +5,7 @@ spring:
datasource:
control:
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbc-url: jdbc:log4jdbc:mysql://palnet.cexpliz30rwl.ap-northeast-2.rds.amazonaws.com:3306/PAV?characterEncoding=UTF-8&autoReconnect=true&useSSL=false
jdbc-url: jdbc:log4jdbc:mysql://43.202.177.213:3306/PAV?characterEncoding=UTF-8&autoReconnect=true&useSSL=false
username: pav
password: palnet!234
# minimumidle: 5
@ -22,7 +22,7 @@ spring:
datasource:
control:
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbc-url: jdbc:log4jdbc:mysql://13.125.97.21:3306/PAV?characterEncoding=UTF-8&autoReconnect=true&useSSL=false
jdbc-url: jdbc:log4jdbc:mysql://43.202.177.213:3306/PAV?characterEncoding=UTF-8&autoReconnect=true&useSSL=false
username: pav
password: palnet!234
minimumidle: 5

10
src/main/resources/application.properties

@ -14,9 +14,6 @@ naver.api.url=https://naveropenapi.apigw.ntruss.com/map-reversegeocode/v2/gc
spring.jwt.secret=jwtsecretkey
spring.jwt.prefix=palnet
## Weather key ####
weather.api.url = http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst
weather.api.key = =r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D
### AWS S3 ####
#cloud.aws.credentials.accessKey=AKIAW75VMZKFTMBRXK4I
@ -28,10 +25,3 @@ cloud.aws.s3.bucket=palnet-file
cloud.aws.region.static=ap-northeast-2
cloud.aws.s3.bucket.url=https://s3.ap-northeast-2.amazonaws.com/palnet-file
### sftp info ###
spring.sftp.host=211.253.38.218
spring.sftp.userName=root
spring.sftp.password=palnet!234
spring.sftp.port=3022
spring.sftp.uploadPath=/data/coord

2
src/main/resources/application.yml

@ -50,7 +50,7 @@ spring:
# show_sql: true
# format_sql: true
rabbitmq:
host: 192.168.0.45
host: 192.168.0.26
port: 5672
username: palnet
password: palnet!234

Loading…
Cancel
Save