2017-11-29 27 views
1

나는 스프링 부트 + hibernate 응용 프로그램을 가지고 있으며 이제는 debezium을 사용하여 날짜 변경을 캡처하려고합니다. 내가 Article 개체를 새로 만들 경우, 지금삭제 된 기록을 누가 언제 기록하는지 보여주는 debezium 솔루션은 무엇입니까?

@Entity 
@Table(name = "app_user") 
public class User { 
    @Id @GeneratedValue 
    @Column(name = "id") 
    private long id; 

    @Column(name = "first_name") 
    private String firstName; 

    @Column(name = "last_name") 
    private String firstName; 

    // getters and setters are omitted for brevity 
} 

@Entity 
@Table(name = "app_article") 
public class Article { 
    @Id @GeneratedValue 
    @Column(name = "id") 
    private long id; 

    @Column(name = "title") 
    private String title; 

    @Column(name = "category") 
    private String category; 

    @ManyToOne 
    @JoinColumn(name = "created_by") 
    private User createdBy; 

    @ManyToOne 
    @JoinColumn(name = "updated_by") 
    private User updatedBy; 

    @Column(name = "created_date") 
    private Date createdDate; 

    @Column(name = "updated_date") 
    private Date updatedDate; 

    // getters and setters are omitted for brevity 
} 

및 코드 같은 것을 그것을 계속 :

Article article = new Article(); 

article.setId(1); 
article.setTitle("Introduction to Debezium"); 
article.setCategory("auditing"); 
article.setCreatedBy(Utils.getCurrentUser()); 
article.setUpdatedBy(Utils.getCurrentUser()); 
article.setCreatedDate(new Date()); 
article.setUpdatedDate(new Date()); 

entityManager.persist(article); 

그런 다음 다시로드 변화 이 클래스 내 POJO 엔티티 클래스 중 하나 있다고 가정

Article art = entityManager.load(Article.class, 1); 

art.setTitle("Introduction to Debezium for beginners"); 
art.setCategory("auditing and cdc"); 
art.setCreatedBy(Utils.getCurrentUser()); 
art.setUpdatedBy(Utils.getCurrentUser()); 
art.setCreatedDate(new Date()); 
art.setUpdatedDate(new Date()); 

entityManager.persist(art); 

을 다음 삭제 : 일부 필드와 그것을 지속

,
entityManager.delete(Article.class, 1); 

나는 각 단계에서 이와 같은 로그를 볼 수 있습니다 : 위에서 볼 수 있듯이

// create 
{ 
    "payload" : { 
     "before" : null, 
     "after" : { 
      "id" : 1, 
      "title" : "Introduction to Debezium", 
      "category" : "auditing", 
      "created_by" : 1, 
      "updated_by" : 1, 
      "created_date" : "11/29/2017", 
      "updated_date" : "11/29/2017" 
     }, 
     "source" : { 
      "name" : "dbserver1", 
      "server_id" : 223344, 
      "ts_sec" : 1500369632, 
      "gtid" : null, 
      "file" : "mysql-bin.000003", 
      "pos" : 364, 
      "row" : 0, 
      "snapshot" : null, 
      "thread" : 13, 
      "db" : "app", 
      "table" : "app_article" 
     }, 
     "op" : "c", 
     "ts_ms" : 1500369632095 
    } 
} 

// update 
{ 
    "payload" : { 
     "before" : { 
      "id" : 1, 
      "title" : "Introduction to Debezium", 
      "category" : "auditing", 
      "created_by" : 1, 
      "updated_by" : 1, 
      "created_date" : "11/29/2017", 
      "updated_date" : "11/29/2017" 
     } 
     "after" : { 
      "id" : 1, 
      "title" : "Introduction to Debezium for beginners", 
      "category" : "auditing and cdc", 
      "created_by" : 1, 
      "updated_by" : 1, 
      "created_date" : "11/29/2017", 
      "updated_date" : "11/29/2017" 
     }, 
     "source" : { 
      "name" : "dbserver1", 
      "server_id" : 223344, 
      "ts_sec" : 1500369632, 
      "gtid" : null, 
      "file" : "mysql-bin.000003", 
      "pos" : 364, 
      "row" : 0, 
      "snapshot" : null, 
      "thread" : 13, 
      "db" : "app", 
      "table" : "app_article" 
     }, 
     "op" : "u", 
     "ts_ms" : 1500369632095 
    } 
} 

// delete 
{ 
    "payload" : { 
     "before" : { 
      "id" : 1, 
      "title" : "Introduction to Debezium for beginners", 
      "category" : "auditing and cdc", 
      "created_by" : 1, 
      "updated_by" : 1, 
      "created_date" : "11/29/2017", 
      "updated_date" : "11/29/2017" 
     }, 
     "after": null, 
     "source" : { 
      "name" : "dbserver1", 
      "server_id" : 223344, 
      "ts_sec" : 1500369632, 
      "gtid" : null, 
      "file" : "mysql-bin.000003", 
      "pos" : 364, 
      "row" : 0, 
      "snapshot" : null, 
      "thread" : 13, 
      "db" : "app", 
      "table" : "app_article" 
     }, 
     "op" : "d", 
     "ts_ms" : 1500369632095 
    } 
} 

, 난 데이터베이스에서 레코드를 삭제하는 방법을 검색 할 수 없습니다. 이 문제를 어떻게 해결할 수 있습니까? 나는 이것을 최대 절전 모드 Enver 와 같이 사용해야합니까?

답변

1

논리적 인 삭제 작업은 테이블에서 실제로 Article 레코드를 제거하지 않고 deleted 플래그 만 설정하면됩니다. 그렇게하면 사용자는 전송 된 업데이트 이벤트의 일부가됩니다.

그런 다음 물리적으로 레코드를 제거하는 일종의 (비동기식으로 실행되는) 정리 작업을 구현할 수 있습니다. 이 삭제를 수행하는 (기술) 사용자는 결과 삭제 이벤트에 별 관심이 없습니다.