728x90
반응형

IT/자바, 스프링 46

servlet으로 받은 multipartfile의 위치 지정

public File convert(MultipartFile file) throws IOException { File convFile = new File(URLDecoder.decode(file.getOriginalFilename(), "UTF-8")); convFile.createNewFile(); FileOutputStream fos = new FileOutputStream(convFile); fos.write(file.getBytes()); fos.close(); return convFile; } MultipartFile을 File로 변환하는 함수이다. 이때 fos.write(file.getBytes()) 에서 익셉션이 발생할 때가 있다. java.nio.file.NoSuchFileException..

413 Request Entity Too Large - 큰 용량의 파일을 전송하기

멀티파트로 파일을 넘겨받아서 스토리지에 업로드하려는데 작은 사이즈의 파일로는 테스트가 잘 되던 것이 용량이 큰 파일을 업로드하려고 하자 안된다. 413 Request Entity Too Large nginx에서 터진 것이다. 서버의 nginx 컨프 파일을 확인하자. nginx.conf server { # set client body size to 16M # client_max_body_size 1G; ... } 위와 같이 client_max_body_size를 1기가로 늘려줬다. 그리고 재시도를 하니 org.springframework.web.multipart.MaxUploadSizeExceededException : Maximum upload size exceeded; nested exception i..

Cannot load driver class: org.mariadb.jdbc.Driver 에러

어제까지 멀쩡하게 잘 돌아가던 스프링이 갑자기 안돌아간다. 바뀐거라곤 String 변수 하나인데.... 얘가 문제는 아닐거같고 에러 로그를 보니 Cannot load driver class: org.mariadb.jdbc.Driver 라고 나온다. application.yaml을 보니 드라이버 클래스 네임이 org. 뒤로 붉은색으로 경고를 띄우고 있다. spring: datasource: ... driver-class-name: org.mariadb.jdbc.Driver # 여기가 빨간색으로 되어있음 뭐가 문제야... 하고 gradle 리빌드를 했더니 붉은 색도 사라지고 서버도 잘 돌아갔다... 뭐가 원인이었을까?

자바에서 데이터 비교할때 .equeal()과 == 차이

기본적인 차이 ==는 기본 자료형에서 쓸 수 있는 비교연산자이고 .equals()는 클래스 자료형에서 사용되는 함수이다. 즉 int, char 등에서는 .equals()를 사용할 수 없다. String, Integer와 같은 클래스 자료형은 .equals() 함수를 호출해서 사용할 수 있다. 비교방식의 차이 ==는 대상 객체 자체를 비교한다. 즉 보기에 같은 값을 가지고 있어도 주소값을 비교해서 다르면 false로 나옴 .equals는 객체가 가지고 있는 데이터의 내용을 비교한다. 그래서 String을 비교할 때는 == 이 아닌 .equals()를 쓰는 것이다. String은 클래스 자료형이고, 동일한 변수끼리 비교하는게 아니라면 같은 문자열이어도 다른 주소값을 가지므로 항상 false가 나오기 때문이다..

jpa query method로 날짜 비교하기

db에 있는 datetime 데이터를 지금 시점과 비교해서 날짜가 지난 데이터를 가져와야 하는 상황 List findAllByValidTimeIsBefore(LocalDateTime now); 이렇게 하면 validTime 값이 지금 시간보다 이전인 (과거인) 티켓들만 가져온다. validTime이 미래인 티켓들을 가져오려면 After사용 또한 Before 대신 less를, After 대신 Greater을 써도 같은 결과가 나온다. sql로는 아래와 같음 SELECT * FROM movie.ticket t where valid_time

jpa pageRequest로 데이터 가져왔을때 Index out of bounds for length 에러

다음과 같은 jpa 함수를 만들고 Page findAll(Pageable pageable); 이렇게 불렀음 Page userPage = userRepository.findAll(PageRequest.of(page, size)); 그런데 이상하게 size에는 뭘 넣어도 상관없지만 page에 0을 넣으면 Index 4 out of bounds for length 4 라고 익셉션이 나는 것이다.... 원인은 자바 코드가 아니라 db에 있었는데 원래 UserRole이 5개였는데 롤 하나가 삭제돼서 이제 4개까지밖에 없음 그런데 db상에는 5번째 롤을 간직하고 있는 레코드가 하나 있어서 걔가 0번째 페이지에서 호출될 때마다 파싱이 안돼서 나는 문제였다.... 코드가 안될 때 원인은 약간 다른 곳에 있을수도!

maria db timezone 한국시간으로 맞추기

application.yml spring: datasource: url: jdbc:mariadb://(ip):(port)/(dbname)?serverTimezone=Asia/Seoul&useLegacyDatetimeCode=false ... db url 뒤에 ?serverTimezone=UCT로 하면 기본시간대로 지정된다. 한국 시간대로 지정하고 싶으면 KST가 아닌 Asila/Seoul을 지정하면 된다. 이렇게 했을 때 문제는 jvm 시간이 UTC로 지정되어있으면 db값에서 자체적으로 -9시간을 해서 보여준다. 즉 db에 17일 00시로 되어있는 데이터를 스프링에서 불러올때 16일 15시로 가져오는 것이다;; 따라서 jvm 타임존을 설정해주는 게 가장 안전한 것으로 보인다. @SpringBootAppl..

Access-Control-Allow-Origin 여러 도메인을 허가해 줄 수 없을까?

@Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "https://thesse.com"); response.addHeader("Access-Control-Allow-Origin", "http://localhost:3000"); ... } ..

자바 for문 돌리는 중 ConcurrentModificationException 에러

for(Stroe store : user.getStoreList()){ ... store.setActive(true); storeRepository.save(store); } 위와 같은 반복문을 돌리고 있는데 처음 한 번은 잘 돌더니 두번째에서 ConcurrentModificationException 에러가 발생했다. java.util.ConcurrentModificationException: null at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1043) ~[na:na] at java.base/java.util.ArrayList$Itr.next(ArrayList.java:997) ~[na:na] at org.hib..

300x250
반응형