Edit configurations..
- 왼쪽 상단
+
Maven
선택command line
에clean package -Dmaven.test.skip=true
입력Apply
&OK
- 방금 만든 설정을 선택 후
Run
(Alt
+Shift
+f10
) war
파일을 찾은 후 ec2의/var/lib/tomcat8/webapps/
디렉터리 밑에 전송filezilla
등 ftp 클라이언트 이용
- 배포 완료. 테스트 ㄱㄱ
War파일을 packaging 후 배포하여도 에러가 나면서 정상적으로 실행되지 않던 현상
pom.xml
에spring-boot-starter-tomcat
의 dependency를 추가해준 후xxxApplication
class에SpringBootServletInitializer
를 상속시켜주었더니 해결
public class SticketApplication {
//...
}
TO
public class SticketApplication extends SpringBootServletInitializer {
//...
}
user_sticon_purchase
, user_asset_purchase
, user_quest
와 같은 매핑테이블들은
각각 다른 테이블들의 id를 외래키로 참조하고, 그 두 개를 묶어 기본키로 사용한다.
- (user_id, sticon_id)
- (user_id, asset_id)
- (user_id, quest_id)
- 여기서 문제는 JPA Entity에서는 @Id 값이 없으면 에러가 난다.
org.hibernate.AnnotationException: No identifier specified for entity: com.ec.sticket.models.mapping.UserAssetPurchase
public class UserAssetPurchase {
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToOne
@JoinColumn(name = "asset_id")
private Asset asset;
//...
}
- 그래서 찾아보니 각 참조하는 키마다
@Id
를 붙여줘야한다.
public class UserAssetPurchase {
@Id
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@Id
@ManyToOne
@JoinColumn(name = "asset_id")
private Asset asset;
//...
}
하지만 이번엔 다음과 같이 매핑 에러가 난다.
org.hibernate.MappingException: Composite-id class must implement Serializable: com.ec.sticket.models.mapping.UserAssetPurchase
- 더 찾아보니 이런 multi-pk의 경우엔 id를 묶어주는 class가 따로 있어야한다고 한다.
- implements Serializable를 해야한다.
- 필드로는 @Id를 붙여준 class들을 갖는다.
- 이렇게 해도 실제 DB엔 int값으로 외부키를 가지게 되니 안심하자.
public class UserAssetPurchaseKey implements Serializable {
private User user;
private Asset asset;
}
@IdClass(value= UserSticonPurchaseKey.class)
public class UserAssetPurchase {
@Id
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@Id
@ManyToOne
@JoinColumn(name = "asset_id")
private Asset asset;
//...
}
- 해결!
-
스프링 실행 후 브라우저 주소창에 다음 url 입력 http://localhost:8080/h2-console
-
스프링 부트에서 기본설정된 h2 console 정보를 입력
- Driver class: org.h2.Driver
- JDBC URL: jdbc:h2:mem:testdb
- User Name : sa
- Password :
- (패스워드 공백)
- 접속!
이거 때문에 몇 시간 삽질한거지....
character-set-client-handshake
: 1character_set_client
: utf8character_set_connection
: utf8character_set_database
: utf8character_set_filesystem
: utf8character_set_results
: utf8character_set_server
: utf8skip-character-set-client-handshake
: 0collation_connection
: utf8_general_cicollation_server
: utf8_general_ci
특히 이거 꼭 해줘야함;; 이거 안하면 위에서 설정해줘봤자 안 바뀜
character-set-client-handshake
: 1skip-character-set-client-handshake
: 0