728x90
반응형

IT/자바, 스프링 46

잘 안써서 몰랐지만 유용할(수도 있는) 자바 String 함수

split String s = "abc" String[] sa = String.split("", s); // sa = ["a", "b", "c"] 스플릿은 은근 자주쓰지만 한번 넣어봄 join String[] arr = ["a", "b", "C"]; String s = String.join("", arr); // s = "abc" List sl = new ArrayList(); sl.add("aa"); sl.add("bb"); String s = String.join(", ", sl); // s = "aa, bb" 스플릿의 반대로, 나눠진 문자열들을 합쳐주는 애 이거 몰라서 매번 반복문 돌리면서 콤마 붙여준거 실화? String.valueOf(char[]) char[] ca = {'a', 'b', 'c'..

Spring boot와 xml 없는 mybatis 사용하기 (어노테이션 적용)

xml 없이 어노테이션으로 마이바티스 사용하기 build.gradle dependencies { ... implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2' } Mapper.java package com.thesse.mybatis.mapper; import com.thesse.dto.testDto; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface Map..

@Valid와 BindingResult로 인풋값 검증이 안됨...

예전에 했던건데... 과거 프로젝트에서 무지성으로 복붙했더니 안먹힌다. result.hasErrors()가 무조건 false로 나옴;;; 알고보니 spring boot 3으로 올리면서 디펜던시가 변경되었다. javax.validation 에서 spring-boot-starter-validation 으로 바꿔주니 잘됨 // implementation group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final' implementation 'org.springframework.boot:spring-boot-starter-validation' 전체 코드 Controller 인풋받는 객체 앞에 @Valid 붙여주고, 검증 결과를 저장할 Bin..

Pattern과 Matcher로 문자열에서 원하는 값 뽑아내기

key1 = "value1", key2 = "value2", .... 이런 json도 아니고 요상한 형태로 날아오는 데이터를 파싱할 일이 생겼다. 처음엔 key-value 세트가 하나인줄 알고 단순히 따옴표 기준으로 substring을 했는데 알고보니 이게 콤마 기준으로 몇개나 될 지 랜덤하다고 한다. 흠.... 정규표현식이랑 별로 친하진 않지만 정규표현식을 써서 Pattern을 사용하게 되었다. (\w+)\s*=\s*"([^"]*)" 챗gpt와 regexr.com의 도움을 받아 이런 정규표현식이 나왔다. \w+ → (\w)문자가 (+)1개 이상 \s* → (\s)공백이 (*)0개 이상 = → 부등호 그 자체 " → 따옴표 그 자체 [^"]+ → (^") 따옴표 제외한 ([])문자가 (+) 1개 이상 이..

스프링 프로젝트 로그에서 특정 sdk의 로그레벨만 조정하기

프로젝트 내에서 오라클 클라우드 (OCI) jdk를 사용중인데 해당 패키지에서 찍히는 불필요한 로그가 너무 많다. 이를 제거해달라는 요구사항이 있어 찾아보았다. 코드의 수정은 필요없고 application.property 내에 추가해주면 된다. logging.level.com.oracle.bmc=warn 이러면 문제가 생겼을때의 로그만 찍히고 일반 info 레벨의 로그는 안보인다. *참고 에러로그 순서 : TRACE > DEBUG > INFO > WARN > ERROR > FATAL

JPA Hibernate 오류 : could not extract resultset

개발 디비에서 잘 돌아가던 코드 테스트 디비로 연결하고 돌리니 안된다! findById로 엔티티 하나를 가져왔는데 org.hibernate.exception.SQLGrammarException: could not extract ResultSet 이렇게 뜨면서 id 빼고 모든게 null값으로 들어온다.... 원인은 @Entity 클래스에서 추가된 컬럼들이 있었는데 이게 개발 디비에만 있고 테스트 디비에는 생성되지 않았기 때문에 코드와 실제 디비가 서로 맞지 않아서 뜨는 에러였다 application.yaml 파일이 개발버전에서는 ddl=true로 되어있어 자동으로 스키마가 변경됐지만 테스트버전에서는 false로 되어있어서 생긴 일이었다

you aren't using a compiler supported by lombok (롬복 getter 안될때)

you aren't using a compiler supported by lombok Your processor is: com.sun.proxy.$Proxy26 java: cannot find symbol method getStores ... 멀쩡하게 되던 코드가 갑자기 저런걸 띄우면서 빌드가 안됨 @Data, @Getter 어노테이션을 달아놨는데 겟메소드가 없다고 자꾸.... 컴파일러가 lombok을 못써서 그런거라고 함 몇가지 체크방법이 있는데 컴파일러 vm 옵션에 아래 옵션 넣어서 됨 -Djps.track.ap.dependencies=false 참고 https://stackoverflow.com/questions/65128763/java-you-arent-using-a-compiler-support..

스프링 부트 jar 파일 윈도우 cmd에서 특정 프로필로 실행하기

윈도우에서 jar 파일을 실행할때는 cmd창에서 그냥 java -jar 파일명.jar 하면 되는데 스프링 yaml 파일에서 나눈 특정 프로필로 돌리려면 리눅스랑 쪼끔 다르다. 바로 따옴표를 해주는 것..... java "-Dspring.profiles.active=dev" -jar myProject-0.0.1-SNAPSHOT.jar 이러면 잘 돌아간다. 그리고 리눅스 쉘과 달리 끌때는 ctrl+c 같은걸로 안되고 무조건 pid 찾아서 죽여줘야 한다. # 8081 포트로 도는 프로세스 찾기 netstat -ano | findstr 8081 # 찾은 pid 죽이기 taskkill /f /pid 123456

attempting to assign weaker access privilege (private, public)

접근 제한자가 맞지 않아서 나는 경고이다. public class MyServiceImpl implements MyService { @Override public String first(){ ... second(); } private void second(){ // 여기서 빨간줄이 뜸 : attempting to assign weaker access privilege ... } } 원래 public이었던 second()를 private으로 변경하려고 하니 인텔리제이가 빨간 줄을 띄워댄다. 하지만 나는 public 메서드에서 private 메서드를 호출하려고 하는 건데 왜 이러는걸까? 문제는 해당 클래스가 implements하고 있는 MyService에 있었다. public interface OCIServ..

서블릿으로 받은 MultipartFile에 대한 NoSuchFileException

MultipartFile의 임시적인 속성 멀티파트파일은 임시 파일로 생성되었다가 해당 메소드가 종료되면 사라진다고 한다! (이걸 몰라서 얼마나 삽질을 한 건지...) 때문에 @Async 메소드로 달아서 처리하거나 다른 pubic 메서드로 넘겨서 처리하려고 하면 파일을 찾지 못하는 경우가 발생하는 것. 1) async로 넘겨야 할 경우 물리적으로 복사해둔 후 메소드가 끝날때 지워주는 방식을 통해 영속적으로 사용할 수 있고 2) 같은 클래스 내에서 호출하여 파일을 가공하는 경우 private 메소드로 사용하면 된다. https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/Multipart..

300x250
반응형