본문 바로가기

java

동기(Synchronous)/비동기(Asynchronous) 처리 다음과 같이 여러개의 작업을 동시에 처리할때 작업1,2가 메인작업과 별개의 작업일때 비동기(@Async)로 던져놓고 메인 작업만 완료 후 응답을 주기도 합니다. (응답시간 0.5초, 작업1,2의 결과 받을 수 없음) 메인작업 : 0.5초 작업1 : 1초 작업2 : 2초 하지만 3가지 작업의 결과가 모두 필요할 경우 동기 처리를 하면 3.5초가 걸리지만 작업1, 2를 비동기로 처리하면 일찍 처리가 끝난 작업은 모든 작업이 완료될때까지 대기 후 응답을 줍니다. (응답시간 2초, 3개의 작업 결과 확인 가능) Kotlin @RestController @EnableAsync class ThreadTest( val taskService: TaskService, val mainService: MainService .. 더보기
RestTemplate 한글 깨짐 FCM 연동 중 한글 깨짐 현상 발생 시 다음과 같이 메세지 컨버터의 인코딩을 변경한다. Kotlin val restTemplate = RestTemplate().apply { messageConverters.forEach { if(it is StringHttpMessageConverter) { it.defaultCharset = Charset.forName("UTF-8") } } } 더보기
스프링 부트+마이바티스에서 트랜잭션이 안먹을때 @Transactional(rollbackFor = Exception.class) 1. rollbackFor를 명시해준다2. 메소드는 public으로 선언해준다 다른 패키지에서 안쓴다고 public으로 안했다가 삽질 경험그 외에 다른 DataSourceTransactionManager니 @EnableTransactionManagement니이런거 안넣어도 잘 동작함(블로그 글 기준) [개발/JAVA] - 스프링 부트(Spring boot)에서 mybatis(oracle) 적용하기 참고https://stackoverflow.com/questions/7085271/how-to-set-up-transaction-with-mybatis-and-spring 더보기
H2 DB 사용 중 file is locked 발생 H2 DB를 사용 시 다음과 같은 오류 메세지를 만날때가 있습니다 The file is locked 내용 보면 알겠지만 여러 프로세스에서 동시에 접근할때 발행하는 오류입니다제 경우 API 서버를 띄워놓고 배치를 돌릴때 이미 DB를 사용중이기 때문에 발생한 경우였습니다.그럴 경우 설정을 다음과 같이 변경해 주시면 두개의 프로세스에서 동시 접근이 가능합니다. datasource: # url: jdbc:h2:file:~/test url: jdbc:h2:~/test;AUTO_SERVER=true username: sa driver-class-name: org.h2.Driver 더보기
spring profile 사용시 주의점 최근 삽질 application.yml에 값을 설정 해두고spring: profiles: local sleep: min: 100 max: 500 --- spring: profiles: dev sleep: min: 500 max: 1000 application.properties에 아래와 같이 프로파일을 설정해주었다spring.profiles.active=dev 어플리케이션 구동했으나 계속 발생하는 오류. 심지어 다른 서버에서는 정상 동작 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sleepAspect': Injection of autowired dependencies failed; neste.. 더보기
@Scope 어노테이션 사용하기(request+ProxyMode) [개발/JAVA] - Threadlocal을 이용하여 사용자별 요청 처리하기 ThreadLocal과 같이 보시면 좋습니다. 스프링에서 빈 Scope 타입은 여러가지 방식이 있으며 아래를 참고해 주세요. https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html 별도의 옵션이 없다면 빈은 싱글톤으로 관리되며 부모의 속성을 따라갑니다. 즉 controller는 따로 설정을 하지 않았기 때문에 singleton으로 동작하게 되며 그 안에서 주입받은 빈 역시 scope를 request로 줘도 singleton으로 동작하게 됩니다. 빈을 생성해 주고 위에 보이는것처럼 scope를 request로 선언해줍니다. 그리고 위처럼 컨트롤러를 구현합니다.. 더보기
Threadlocal을 이용하여 사용자별 요청 처리하기 개발시 소스 전체에서 사용할 수 있는 전역변수처럼 데이터를 할당하고 싶을떄가 있습니다. Threadlocal을 이용하여 이를 구현해 봅니다. ShoppingController.java @RestController public class ShoppingController { private int melon; @RequestMapping("/") private String test() { this.addMelon(); return String.valueOf(melon); } private void addMelon() { melon++; } } 사용자별로 요청 시 카트에 멜론을 담는 기능을 구현하려고 합니다. 이 떄 카트 수량은 여러 메소드에서 사용할 수 있기 때문에 멤버변수로 선언을 합니다. 이렇게 작성 후.. 더보기
한글 byte로 자르기(깨짐 없이) 쓸때마다 새로만드는 것 같아서 저장용 UTF-8일 경우subStringBytes("블라블라블라라", 10, 3);EUC-KR일 경우subStringBytes("블라블라블라라", 10, 2); public String subStringBytes(String str, int byteLength, int sizePerLetter) { int retLength = 0; int tempSize = 0; int asc; if (str == null || "".equals(str) || "null".equals(str)) { str = ""; } int length = str.length(); for (int i = 1; i 127) { if (byteLength >= tempSize + sizePerLetter) .. 더보기
스프링 부트(spring boot)로 톰캣에서 실행하기(이클립스) 스프링 부트로 개발된 웹 어플리케이션을 톰캣에 올리는 방법입니다.이클립스에서 단독 실행 모드와 톰캣 배포 방식 두가지 다 가능하기 때문에개발할떄는 단독으로 띄워서 개발을 하고 배포할때만 톰캣을 띄워서 쉽게 배포를 하셔도 됩니다. pom.xml 4.0.0 net.donnert spring.boot.web 0.0.1-SNAPSHOT jar spring.boot.web http://maven.apache.org UTF-8 1.8 org.springframework.boot spring-boot-starter-parent 1.4.0.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter.. 더보기
스프링 부트(Spring boot)로 restful API 서버 개발하기 스프링 부트를 이용한 api서버를 만들겠습니다.서버에 요청하면 json형식으로 결과를 내려주는 서버를 만들게 됩니다. 프로젝트 생성메이븐 프로젝트를 생성해 줍니다.new-project-Maven Project해서 생성하시던지그냥 프로젝트 생성 후 confiture-convert to maven project를 해줍니다.아래와 동일한 프로젝트 구조가 생성이 됩니다.2016/09/07 - [개발/JAVA] - 스프링 부트(Spring boot)로 개발하기 라이브러리 추가pom.xml 4.0.0 net.donnert spring.boot.web 0.0.1-SNAPSHOT jar spring.boot.web http://maven.apache.org UTF-8 org.springframework.boot spr.. 더보기