@Entity Class의 property에서

다른 @Entity Class를 참조하며

 

@ManyToOne(fetch = FetchType.LAZY) 를 주었다면

 

해당 property로 접근하려고 할 때는...?

뭐 다른 일이 일어날게 없다...  ㅡㅡ;;;

 

뭐 흔하게 계~~~속 잘~~~ 써 왔던 경우인데...

 

어느 날 갑자기, 뜬금없이, 아무리 생각해도 이해를 하지 못할...

아래처럼 LazyInitializationException 이 나왔다면...

 

org.hibernate.LazyInitializationException: could not initialize proxy [common.model.entity.P#2915] - no Session
        at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:155)
        at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:268)
        at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:73)

        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
        at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)

        at sun.reflect.GeneratedMethodAccessor180.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
        at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

 

 

혹시... 해당 Class에서

@Scheduled 를 사용하고 있지 않은가?

 

 

그렇다면

@Scheduled 를 사용하는 Class와

Entity를 처리하는 Class를 분리해야 한다.

 

org.springframework.boot 2.0.8

spring-context 5.0.12

이 환경에서는 분리하니...

언제 그랬냐는 듯이...

잘 돌아간다...;;;

 

 

이런 경우는...

정말 만나고 싶지 않아...

 

 

'plming > Java-Spring Boot' 카테고리의 다른 글

파일 Upload 크기 제한 설정  (0) 2019.06.16

- 기본은 1MB

- multipart/form-data 로 받을 수 있는 것은 10MB

 

https://docs.spring.io/spring-boot/docs/2.0.x/api/org/springframework/boot/autoconfigure/web/servlet/MultipartProperties.html

 

MultipartProperties (Spring Boot Docs 2.0.10.BUILD-SNAPSHOT API)

Properties to be used in configuring a MultipartConfigElement. location specifies the directory where uploaded files will be stored. When not specified, a temporary directory will be used. max-file-size specifies the maximum size permitted for uploaded fil

docs.spring.io

 

- src/main/resources/application.properties 에 아래 설정들로 조정할 수 있다.

- 기본

 spring.servlet.multipart.max-file-size=128KB
 spring.servlet.multipart.max-request-size=128KB

- multipart/form-data 로 받는

 spring.http.multipart.max-file-size=128KB
 spring.http.multipart.max-request-size=128KB

https://spring.io/guides/gs/uploading-files/

#Tuning file upload limits

 

하지만, Rest API로 만들고

Swagger로 Test하려할 때 multipart/form-data가 제대로 안되는 것 같을 때

기본 설정을 추가해주면 Swagger에서도 Test가 잘 된다.

 

 

+ Swagger Tip 하나 더

@RequestBody가 아닌

@RequestPart xxxDto 로 정의한 경우

Swagger에서는 1개의 InputBox로만 표시되는데...

 

xxxDto의 모든 항목을 입력해야 할 때는

아래처럼 여러개의 값을 갖는 json 형태로 입력하면 Test할 수 있다.

 { "aaa": "111", "bbb": "222" }

 

 

'plming > Java-Spring Boot' 카테고리의 다른 글

원인모를 LazyInitializationException - no Session  (2) 2020.05.25

+ Recent posts