Backend/개발
[Spring boot] 인턴 프로젝트 기록 - 개발 참고사항
지수쓰
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 어쩌고 체크