ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring boot] 인턴 프로젝트 기록 - 개발 참고사항
    Backend/개발 2020. 4. 6. 21:43
    반응형

    ManyToMany 관계 tostring 무한으로되는거 방지 => @JsonIgnore 사용

    -> 이때는 좀 단순 해결을 위해서 이 방법을 썼는데 이런 어노테이션 외에 Dto를 생성하거나,, 좀 다른 방식으로 해결하는게 좋을 것 같다! 21.08.23 

    ex) store.java - menu.java

    store 마다 menu 여러개 갖고있는 상태

    // store.java 일부 
        @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
        @JsonIgnore
        @JoinTable(name = "store_menu",
                joinColumns = @JoinColumn(name = "store_id"),
                inverseJoinColumns = @JoinColumn(name = "menu_id"))
        private List<Menu> menus = new ArrayList<>();  // 메뉴
    //menu.java 일부
    
    @ToString(exclude = "stores") 
    //toString()시에 store는 제외해서 읽어옴 
    //이렇게 안하면 menu 부를때마다 계속 store 불러서 쿼리가 엄청 많아짐 
    @Entity
    @Table(name = "menu")
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) 
    //no serializer found뭐이런거 오류나는거 예방 
    public class Menu {
    //...
        @ManyToMany(mappedBy = "menus")
        @JsonBackReference // menu json으로 불러올때 stores는 제외 
        private List<Store> stores = new ArrayList<Store>();
    //...
    }

    ENUM String 으로

    @Enumerated(EnumType.STRING) private ImageType type;
    • enum 타입 만들때 EnumType.STRING 해줘야 디비에서 이걸 0,1,2,3, 으로 인식 안하고 문자 그대로 들어감

    fetch (LAZY,EAGER)

    //entity의 정보를 요청할 때 읽어옴
        @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    //entity의 정보를 미리 읽어옴
        @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    내용을 입력하세요.

    s3 timeout wating for connect 오류

    2020-03-23 15:07:06.266 ERROR 8846 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.amazonaws.SdkClientException: Unable to execute HTTP request: Timeout waiting for connection from pool] with root cause
    
    org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:314) ~[httpclient-4.5.10.jar!/:4.5.10]
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:280) ~[httpclient-4.5.10.jar!/:4.5.10]
        at sun.reflect.GeneratedMethodAccessor211.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java

    getObject 하는곳에서 close를 안해줘서 connection pool 이 꽉차는거같아서

    try{obejct = getobject(bucket,"");}
    catch{}
    finally{
    object!=null? object.close();}

    대략적으로 이렇게 객체를 close해주었다. 외부 라이브러리 쓸 때 커넥션,객체 생성시 해제하는 것에 유의해줘야겠다. 

    spring mvc view에서 thymleaf 권한 쓸때

    <html lang="en" xmlns:th="http://www.thymeleaf.org"  xmlns:sec="http://www.w3.org/1999/xhtml">

    xmlns:sec="http://www.w3.org/1999/xhtml" 이거 넣어줘야함.
    xmlns:th="http://www.thymeleaf.org" 이거는 th 쓸때

    spring devtool 정적파일 reload

    //build.gradle
        compile("org.springframework.boot:spring-boot-devtools")
    //yml
    
      devtools:
        livereload:
          enabled: true
      freemarker:
        cache: false
      thymeleaf:
        cache: false

    registry 검색 automake.when.app.running 뭐 이런거 체크

    prefrence compiler build auto 어쩌고 체크

    댓글

Designed by Tistory.