반응형

back end 65

Windows에 Springboot Service 등록하는 방법

개요 Springboot로 개발 후 Windows에 서비스로 등록하는 방법은 여러 가지가 있습니다. winsw를 이용하여 jar를 등록하는 방법이 검색하면 가장 많이 나오는 방법이고, nssm을 이용한 방법, exe로 만들어서 직접 서비스로 등록하는 방법도 있습니다. 이 글에서는 Apache Commons Daemon을 이용하여 서비스 등록하는 방법에 대해 소개합니다. 왜 Apache Commons Daemon인가? 처음에는 winsw를 사용하여 서비스를 등록했습니다. winsw를 사용하여 서비스를 등록할 경우 다음과 같이 프로세스 2개가 실행됩니다. 이 경우 winsw.exe와 javaw.exe가 동기화가 되지 않아 하나만 실행되어있는 상태가 될 수 있으며, 따라서 프로세스가 실행 중인지 검사할 때 두..

back end/java 2023.02.06

ClassNotFoundException: JAXBException 해결 방법

spring boot로 프로그램 개발 시, java 8에서 상위 버전으로 업그레이드를 한 경우 다음과 같은 에러가 발생할 수 있습니다. ClassNotFoundException: JAXBException JAXBException의 발생 원인 JAXB API는 Java EE(Enterprise Edition) API로 간주되며 자바 9 버전부터는 더 이상 포함되지 않습니다. 게다가 자바 11부터는 JDK에서 완전히 삭제되었다고 합니다. 출처: https://stackoverflow.com/questions/43574426/how-to-resolve-java-lang-noclassdeffounderror-javax-xml-bind-jaxbexception/43574427#43574427 JAXBExcepti..

back end/java 2023.01.06

How to append text to an existing file in Java?

java에서 파일을 열어서 그 파일에 내용을 추가하는 방법은 다음과 같습니다. 이 방법은 java 7 이후 버전에서 사용 가능합니다. try(FileWriter fw = new FileWriter("myfile.txt", true); BufferedWriter bw = new BufferedWriter(fw); PrintWriter out = new PrintWriter(bw)) { out.println("the text"); //more code out.println("more text"); //more code } catch (IOException e) { //exception handling left as an exercise for the reader } 만약 java6이라면 방법은 다음과 같습니..

back end/java 2023.01.01

java - Find a line in a file and remove it

파일에 다음과 같은 내용이 있습니다. aaa bbb ccc ddd 여기서 bbb를 삭제하는 방법은 다음과 같습니다. File inputFile = new File("myFile.txt"); File tempFile = new File("myTempFile.txt"); BufferedReader reader = new BufferedReader(new FileReader(inputFile)); BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); String lineToRemove = "bbb"; String currentLine; while((currentLine = reader.readLine()) != null) { // trim..

back end/java 2023.01.01

[Spring] MariaDB log4jdbc Cannot create JDBC driver error

Spring 또는 Spring boot에서 query log를 이쁘게 찍기 위해 log4jdbc를 사용합니다. 그런데 log4jdbc에서 다음과 같은 오류가 발생하는 경우가 있습니다. org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'net.sf.log4jdbc.sql.jdbcapi.DriverSpy' for connect URL 'jdbc:log4jdbc:mariadb://000:3306/db' 해결방법은 log4jdbc.log4j2.properties 파일에 다음과 같이 추가하면 됩니다. log4jdbc.drivers=org.mariadb.jdbc.Driver 이 내용은 MSSQL, Oracle은 해당되지 않..

back end/java 2022.12.22

spring 에서 cron scheduler 를 disable 하는 방법

Spring 또는 Spring boot를 사용하면서 batch 작업을 하기 위해 cron scheduler를 사용하는데요. 프로그램을 수정하지 않고 설정만으로 cron scheduler를 disable 해야 하는 경우가 있습니다. 1. cron 옵션 처리 당연한 말이지만 설정으로 cron을 disable 하려면 cron이 옵션처리가 되어있어야 합니다. 1.1. application.properties 설정 다음과 같이 application.properties에 옵션을 추가합니다. 이 설정은 매일 11시에 batch를 실행하라는 것입니다. config.cronExpression=0 0 11 * * * 1.2. @Scheduled annotation 변경 application.properties의 confi..

back end/java 2022.12.21

spring boot restful api에서 대용량 엑셀 다운로드

java excel download를 검색하면 많이 나오는 방식으로 엑셀 다운로드를 개발 때 다음과 같은 경우에 메모리 문제(out of memory)가 발생할 수 있습니다. 대용량 엑셀 다운로드가 발생할 경우 여러 명이 동시에 엑셀 다운로드를 할 경우 이번 포스팅에서는 Restful API에서 엑셀 다운로드하는 방법을 알아보겠습니다. Out of Memory(OOM)의 원인 1. 페이징 처리 Out of Memory가 발생하는 가장 흔한 원인은 페이징 처리입니다. 보통 엑셀 다운로드는 페이징 처리 없이 모든 데이터를 엑셀로 만들어야 합니다. 모든 데이터를 보기 위해 엑셀 다운로드를 하는 것이죠. 그래서 엑셀 다운로드 기능 개발 시, 페이징 처리 없이 모든 데이터를 한 번에 가져와서 처리합니다. 구글에서..

back end/java 2022.11.14

[java] 특정 범위 내에서의 임의의 정수 생성하는 방법

1. java 1.7 이상- 특정 범위 내에서의 임의의 정수 생성하는 방법 import java.util.concurrent.ThreadLocalRandom; int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1); ThreadLocalRandom에 대한 자세한 내용은 공식 문서를 확인 바랍니다. 2. java 1.7 이전 - 특정 범위 내에서의 임의의 정수 생성하는 방법 import java.util.Random; public static int randInt(int min, int max) { Random rand; int randomNum = rand.nextInt((max - min) + 1) + min; return randomNum..

back end/java 2022.11.13

[java] class의 모든 field 가져오기 (private 포함)

개발을 하다 보면 프로그램 내에서 class안의 모든 변수명을 알아야 하는 경우가 있습니다. 물론 super class(부모 클래스)를 포함해서요. 다음과 같은 방법이 있습니다. 먼저, 방법을 알아보기 앞서 클래스를 생성합니다. public class ParentClass { private String field1; private String field2; private String field3; } public class ChildClass extends ParentClass { private String field4; private String field5; private String field6; public String field7; } 방법 1. getDeclaredFields()을 사용한 방법..

back end/java 2022.11.10
728x90
반응형
loading