Bạn nói đúng rằng chiến lược chung là tạo một lớp mới triển khai SnapshotGenerator, nhưng bạn cũng cần thực hiện một số bước khác. Quy trình chụp nhanh chung là:
- Liquibase tìm kiếm các ứng dụng của SnapshotGenerator và gọi các hàm AddTo () cho mỗi đối tượng mà nó tìm thấy trong cơ sở dữ liệu. Đối với các kiểu của bạn, bạn có thể muốn có một lược đồ đối tượng nhanh "nếu được truyền đối tượng instanceof Schema" vì chúng là các kiểu là một phần của lược đồ.
- Bạn sẽ cần tạo các đối tượng Package, StoredProcedure, v.v. mới để triển khai DatabaseObject. Chúng sẽ là lớp lik ehte liquibase. Structure.core.Table và nắm bắt trạng thái của đối tượng. Chúng được tạo trong phương thức SnapshotGenerator.addsTo () của bạn đến mức có thể nhận dạng được (tên, lược đồ, v.v.)
- Tất cả các đối tượng được thêm bởi phương thức AddTo () sau đó sẽ được chạy qua phương thức SnapshotGenerator.snapshotObject () của bạn, phương thức này sẽ kéo bất kỳ siêu dữ liệu bổ sung nào mà bạn không nhận được ban đầu, chẳng hạn như văn bản thủ tục được lưu trữ, v.v.
- Khi liquibase có một ảnh chụp nhanh chứa các đối tượng của bạn, nó sẽ so sánh ảnh chụp nhanh này với một ảnh chụp nhanh khác (trong trường hợp createChangeLog là ảnh chụp nhanh trống) để xác định những đối tượng nào bị thiếu, không mong muốn và đã thay đổi trong ảnh chụp nhanh thứ hai. Sau đó, nó tìm kiếm các triển khai của MissingObjectChangeGenerator, bất ngờObjectChangeGenerator và ChangedObjectChangeGenerator. Đối với createChangeLog sẽ chỉ có các đối tượng "bị thiếu" vì vậy bạn sẽ triển khai MissingTriggerChangeGenerator, MissingPackagedChangeGenerator, v.v. Công việc của họ là tạo các phiên bản Change để tạo các đối tượng bị thiếu
- Các lớp Msising * ChangeGenerator có thể trả về các phiên bản RawSqlChange hoặc bạn có thể tạo các triển khai mới của Change, chẳng hạn như CreateTriggerChange.