เบเบปเบโเบเบงเบฒเบกโเบเบตเปโเบญเบฐโเบเบดโเบเบฒเบโเปเบโเบฅเบฐโเบญเบฝเบโเบงเบดโเบเบตโเปเบเปโเปเบโเบเบฑเบโเบซเบฒโเบเบงเบฒเบกโเปเบเบปเปเบฒโเบเบฑเบโเปเบเปโเบเบญเบโเบเบฒเบโเบเปเปโเบกเบนเบโเปเบโเบเบฒเบโเบเปเบฒโเปเบเปโ. เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบญเบเบเปเบฒเบเบงเปเบฒเบชเบดเปเบเบเบตเปเบชเบฒเบกเบฒเบเปเบเบตเบเบเบถเปเบเบเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฒเบเบเบฐเบฅเบดเบเบเบญเบเบเปเบฒเบเบเปเบฒเบซเบฒเบเบงเปเบฒเบเปเบฒเบเบเบฐเบเบฒเบเบฒเบกเบเบตเปเบเบฐเบเปเบฒเปเบเปเปเบเบเบเปเปเบกเบตเบเบฒเบเบเบฐเบเบฝเบกเปเบเบทเปเบญเบเบเบปเปเบ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบฒเบเบเบฑเปเบเบเบญเบเบงเบปเบเบเบญเบเบเบตเบงเบดเบเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเบเปเบญเบเบเปเปเบกเบตเปเบงเบฅเบฒเบขเบธเบเปเบฎเบฑเบเบงเบฝเบ (เบเบฐเบกเบฒเบ lane: เปเบเบตเปเบกเปเบเบตเบก - เบเปเปเบกเบตเปเบงเบฅเบฒเบขเบธเบ). เบเบปเบเปเบเปเบฎเบฑเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบกเปเบเบเบฐเบเปเบฒเปเบเปเบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเบเปเปเปเบเบปเปเบฒเบเบฑเบเปเบเปเปเบเปเบเบเบเบตเปเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบผเบฑเบ.
เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเบปเปเบฒเปเบเบเบปเบงเบขเปเบฒเบเบฅเบฐเบซเบฑเบเบเบฒเบเบเบปเบเบเบงเบฒเบก, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบญเบเบซเบฒเบเบงเบเปเบเบปเบฒเปเบเปเบเบตเป
เบเบฒเบเบเปเบฒเบชเบฐเปเบซเบเบต
เบเบฒเบเบเบณเปเบเปเบชเบนเบเบเบฒเบเบขเบธเบเปเบฎเบฑเบเบงเบฝเบ
เบญเบฑเบเปเบเปเบเบฑเบเบเบงเบฒเบกเบฅเบถเบเบฅเบฑเบ เบเบฒเบเบเบณเปเบเปเบชเบนเบเบเบฒเบเบขเบธเบเปเบฎเบฑเบเบงเบฝเบ? เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบงเบปเปเบฒเปเบเปเบงเปเบฒเบเบตเปเปเบกเปเบเปเบงเบฅเบฒเบเบตเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบญเบเบเปเบฒเบเบเบทเบเบเปเบฒเปเบเปเบเปเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบตเปเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเปเบเบฐเบเปเบฒเปเบงเบตเบเบฑเบเปเบซเบกเปเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเบเบฒเบเบเบฐเบฅเบดเบเปเบเปเบขเปเบฒเบเบชเปเบฒเปเบฅเบฑเบเบเบปเบ, เปเบเบเบฐเบเบฐเบเบตเปเบเบนเปเปเบเปเบเปเปเปเบเปเบชเบฑเบเปเบเบเปเบซเบฑเบเบเบงเบฒเบกเบเปเปเบกเบตเบเบญเบเบกเบฑเบ. เบเบฒเบเบเบฑเบเบชเบฐเบเบฐเบเบญเบเบเบนเปเปเบเปเปเบฅเบฐเบเปเบฅเบดเบชเบฑเบ, เบเบตเปเปเบกเปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบฒเบเบเปเบฒเปเบเปเบเบตเปเบเบตเบเบตเปเบชเบธเบเบเบตเปเปเบเบฑเบเปเบเปเบเปเปเบเบฒเบฐเบงเปเบฒเบกเบฑเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบธเบเบเบฐเบชเบปเบกเบเบฑเบเปเบซเบกเปเปเบเปเบฎเบฑเบเบเบฒเบเบเปเบฒเบชเบฐเปเบซเบเบตเปเบฅเบฐเบเปเปเบเบปเบเบเปเบญเบเบเบตเปเบเบฐเปเบเปเปเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบฅเบปเบเบเบงเบ.
เบงเบดเบเบตเบเบฒเบเบเบฑเบเบฅเบธเบเบตเป? เบกเบตเบซเบผเบฒเบเบงเบดเบเบต, เบเบตเปเปเบกเปเบ เปเบถเปเบ เปเบเบเบฑเปเบ:
- เบเบณเปเบเปเบชเบฐเบเบฑเบเปเบฅเบเบเบต 1 เบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบญเบเบเปเบฒเบ
- เบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบฒเบเบเปเปเบกเบนเบ
- เบเบณเปเบเปเปเบงเบตเบเบฑเปเบ #2 เบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบญเบเปเบเบปเปเบฒเบเบฐเปเบฒเบเบเบฑเบเปเบงเบตเบเบฑเบ #1
- เบเบฑเบเบเบตเบเบตเปเบเปเบฒเบเปเบซเบฑเบเบงเปเบฒเบชเบฐเบเบฑเบเปเบฅเบเบเบต 2 เปเบฎเบฑเบเบงเบฝเบเบเบฒเบกเบเบตเปเบกเบฑเบเบเบงเบเบเบฐเปเบเบฑเบ, เปเบญเบปเบฒเบชเบฐเบเบฑเบเปเบฅเบเบเบต 1
- เบชเบณ เปเบฅเบฑเบเปเบฅเปเบง!
เบเปเบฒเบ, เบเปเปเปเบกเปเบเบเป? เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบกเบฑเบเบเปเปเปเบกเปเบเปเบฅเบทเปเบญเบเบเปเบฒเบเบเบฒเบ, เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบดเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบเบฒเบเบซเบผเบฑเบ. เบเบญเบเบเบตเปเปเบซเปเบเบงเบเปเบเบดเปเบเบเบฐเบเบงเบเบเบฒเบเบเบณเปเบเปเบเบปเปเบงเปเบเบญเบตเบเบญเบฑเบเปเบถเปเบ - blue green deployment .
เปเบเบปเปเบฒเปเบเบตเบเปเบเปเบเบดเบ
- เปเบซเปเปเบเปเปเบเบงเปเบฒเบชเบญเบเบชเปเบฒเปเบเบปเบฒเบเบญเบเบฅเบฐเบซเบฑเบเบเบฒเบเบเบฐเบฅเบดเบเบเบญเบเบเปเบฒเบ ("เบชเบตเบเปเบฒ" เปเบฅเบฐ "เบชเบตเบเบฝเบง") เปเบฎเบฑเบเบงเบฝเบ;
- เบเบตเปเบเปเบฒเบเบฒเบเบเบฐเบฅเบฒเบเบญเบเบเบฑเบเบซเบกเบปเบเปเบเบชเบนเปเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบชเบตเบเปเบฒ, i.e. เบเบฑเปเบเบเบฑเปเบ URLs เบเบฒเบเบเบฐเบฅเบดเบเบเบตเปเปเบซเปเปเบซเบฑเบ;
- เบเบณเปเบเป เปเบฅเบฐเบเบปเบเบชเบญเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบฑเบเปเบปเบเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบชเบตเบเบฝเบง;
- เบเปเบฝเบ urls เบเบฒเบเบชเบตเบเปเบฒเปเบเบฑเบเบชเบตเบเบฝเบงเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก
เบเบฒเบเบเบณเปเบเปเบชเบตเบเบฝเบงเบชเบตเบเปเบฒเปเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบตเปเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบฐเบเบณเบเบธเบเบชเบปเบกเบเบฑเบเปเปเปเปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบเปเบเบเบเปเปเบเปเบญเบเบเบฑเบเบงเบปเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบเปเบเบเบเบญเบเบเบฒเบเบเบฐเบฅเบดเบ. เบเบตเปเปเบกเปเบเปเบเบทเปเบญเบเบกเบฒเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบตเบเบเบถเปเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบเบทเบเบชเบนเปเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเปเบเปเบฒเบเบกเบฒเปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบเปเบเบเบเบฝเบเปเบเป "flicking เบชเบฐเบซเบผเบฑเบ."
เบซเบผเบฑเบเบเบฒเบเบญเปเบฒเบเบเบฑเบเบซเบกเบปเบเบเปเบฒเบเปเบเบดเบ, เปเบเบปเปเบฒเบญเบฒเบเบเบฐเบเบฒเบกเบเปเบฒเบเบฒเบก: เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบตเปเบเปเปเบกเบตเบเบฒเบเบขเบธเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ Blue Green เปเบกเปเบเบซเบเบฑเบ?
เบเบต, เบเบงเบเบกเบฑเบเบกเบตเบเบงเบฒเบกเบเปเบฒเบเบเบทเบเบฑเบเบซเบผเบฒเบ, เปเบเบฒเบฐเบงเปเบฒเบเบฒเบเบฎเบฑเบเบชเบฒเบชเบญเบเบชเปเบฒเปเบเบปเบฒเบเบญเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฝเบงเบเบฑเบเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเบชเบญเบเปเบเบปเปเบฒเปเบเบทเปเบญเบฎเบฑเบเบชเบฒเบเบงเบเบกเบฑเบ. เบเบตเปเปเบกเปเบเปเบซเบเบเบปเบเบเบตเปเบเบตเบกเบเบฒเบเบเบฒเบเบเบปเบเบญเปเบฒเบ
เบเบฒเบเปเบฅเบทเบญเบเบญเบทเปเบเปเบกเปเบเบเบฒเบเบเปเบฒเปเบเปเบเบฒเบเบเปเปเบกเบนเบเบเบฝเบงเบเบฑเบ, เบเบฒเบเบชเปเบฒเบเบชเบฐเบซเบผเบฑเบเบชเบตเบเปเบฒเบชเบตเบเบฝเบงเบชเปเบฒเบฅเบฑเบเบเบฑเปเบเปเบงเบฑเบเปเบฅเบฐเปเบเปเบกเบ. เปเบเบงเบดเบเบตเบเบฒเบเบเบตเป, เบเบฒเบเบเปเปเบกเบนเบเบกเบฑเบเบเบฐเปเบเบฑเบเบเบฑเบเบซเบฒ, เปเบเบเบชเบฐเปเบเบฒเบฐเปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเปเบฝเบเปเบเบ schema เบเบญเบเบเบปเบเปเบเบทเปเบญเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบชเบฐเบเบฑเบเปเบซเบกเปเบเบญเบเบเบญเบเปเบง.
เปเบฅเบฐเปเบเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบกเบฒเบฎเบญเบเบเบฑเบเบซเบฒเบเบปเปเบเบเปเปเบเบเบปเบเบเบงเบฒเบกเบเบตเป. เบเบฒเบเบเปเปเบกเบนเบ. เบฅเบญเบเบเบดเบเบฒเบฅเบฐเบเบฒเปเบเบดเปเบเบเบฐเปเบซเบเบเบเบตเปเบญเบตเบ.
เบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบฒเบเบเปเปเบกเบนเบ.
เบเบญเบเบเบตเปเปเบเบปเปเบฒเบเปเบญเบเบเบฒเบกเบเบปเบงเปเบญเบเบงเปเบฒ - เบเบฐเปเบฎเบฑเบเปเบเบงเปเบเบเปเบฒเบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบเบเปเปเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบฅเบฑเบ? เปเบญเบฑเบเปเบงเบตเบเบฑเปเบเบเบณเบญเบดเบเบเบญเบเบเปเบญเบเบเบฐเบเปเปเบขเบธเบเบเป? เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เบเบตเปเปเบกเปเบเบชเบดเปเบเบเบตเปเบเบฐเปเบเบตเบเบเบถเปเบ ...
เบเบฑเปเบเบเบฑเปเบ, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฐเบกเบตเบเบปเบเบเบฐเปเบซเบเบเบญเบฑเบเปเบซเบเปเบซเบผเบงเบเบเบญเบเบเบฒเบเปเบเปเบชเบนเบเบเบฒเบเบขเบธเบเปเบฎเบฑเบเบงเบฝเบ / เบชเบตเบเบฝเบงเบชเบตเบเปเบฒ, เบเปเบฅเบดเบชเบฑเบเบกเบตเปเบเบงเปเบเปเบกเบเบตเปเบเบฐเบเบฐเบเบดเบเบฑเบเบเบฒเบกเบเบฐเบเบงเบเบเบฒเบเบเบตเปเบเบญเบเปเบเบเบงเปเบฒเบเปเปเปเบเบเบตเปเปเบเบทเปเบญเบเปเบฒเปเบเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบญเบเบเบงเบเปเบเบปเบฒ:
- เบเบฐเบเบฝเบกเบเบธเบเบเบตเปเบกเบตเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบชเบฐเบเบฑเบเปเบซเบกเป
- เบเบดเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเป
- เปเบฅเปเบเบชเบฐเบเบฃเบดเบเปเบเบทเปเบญเบเปเบฒเบเบเบฒเบเบเปเปเบกเบนเบ
- เบเบณเปเบเป เปเบฅเบฐเปเบเบตเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบงเบตเบเบฑเบเปเปเป
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเบญเบฐเบเบดเบเบฒเบเบงเบดเบเบตเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบ เปเบฅเบฐเบฅเบฐเบซเบฑเบเบเบญเบเบเปเบฒเบเปเบเบทเปเบญเปเบเปเบเบฐเปเบซเบเบเบเบฒเบเบเบฒเบเบเบณเปเบเปเบชเบนเบเบเบฒเบเบขเบธเบเปเบฎเบฑเบเบงเบฝเบ.
เบเบฑเบเบซเบฒเบเบฒเบเบเปเปเบกเบนเบ
เบเปเบฒเบเปเบฒเบเบกเบตเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเบเปเปเบกเบตเบฅเบฑเบเบเบตเปเบเปเปเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเปเบเปเปเบเบเบฒเบเบเปเปเบกเบนเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบชเบนเบเบเบฒเบเบขเบธเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบต. เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบเบญเบเปเบงเบชเปเบงเบเปเบซเบเปเบเปเบญเบเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเบขเบนเปเบเปเบญเบเปเบเบซเบเบถเปเบ. เบเบตเปเปเบกเปเบเปเบซเบเบเบปเบเบเบตเปเบเปเบฒเบเบเบงเบเบเบดเบเบชเบญเบเบเบฑเปเบเบเปเบญเบเบเบตเปเบเบฐเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบเปเบเปเปเบงเบปเบเบเบญเบ. เบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบญเบเบงเบดเบเบตเบเบฒเบเบเปเบฝเบ schema เปเบเบทเปเบญเบเปเปเปเบซเปเบกเบตเบเบฒเบเบขเบธเบเปเบงเบฅเบฒเปเบฎเบฑเบเบงเบฝเบ, เบเปเบฒเบญเบดเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเปเบเปเบชเปเบเบฑเบ schema เบชเบฐเบเบฑเบ.
เปเบเบโเบเบฒเบโเบชเบฐโเบเบฑเบโ
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเป classpath:db/migration
). เบเบตเปเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเปเบเบฅเปเบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบฑเปเบเบเปเบฒเบง
โโโ db
โโโ migration
โโโ V1__init.sql
โโโ V2__Add_surname.sql
โโโ V3__Final_migration.sql
โโโ V4__Remove_lastname.sql
เปเบเบเบปเบงเบขเปเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบซเบฑเบ 4 เบชเบฐเบเบดเบเบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบตเป, เบเปเบฒเบเปเปเบเบทเบเบเบฐเบเบดเบเบฑเบเบเปเบญเบเบซเบเปเบฒเบเบตเป, เบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเบซเบเบถเปเบเบซเบผเบฑเบเบเบฒเบเบญเบทเปเบเปเบกเบทเปเบญเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบฅเบตเปเบกเบเบปเปเบ. เบเปโเปเบซเปโเปเบเบดเปเบโเบซเบเบถเปเบโเปเบโเปเบเบฅโเป (V1__init.sql
) เปเบเบฑเบเบเบปเบงเบขเปเบฒเบ.
CREATE TABLE PERSON (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
first_name varchar(255) not null,
last_name varchar(255) not null
);
insert into PERSON (first_name, last_name) values ('Dave', 'Syer');
เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเปเบงเบเบเบปเบเปเบญเบเบขเปเบฒเบเบชเบปเบกเบเบนเบ: เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเป SQL เปเบเบทเปเบญเบเปเบฒเบเบปเบเบงเบดเบเบตเบเบฒเบเบเบฒเบเบเปเปเบกเบนเบเบเบญเบเบเปเบฒเบเบเบงเบเบเบทเบเบเบฑเบเปเบเป. เบชเปเบฒเบฅเบฑเบเบเปเปเบกเบนเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบ Spring Boot เปเบฅเบฐ Flyway, เบเบงเบเปเบเบดเปเบ
เปเบเบเบเบฒเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเบกเบทเบเบงเบเบเบธเบกเปเบซเบผเปเบเบเบฑเบ Spring Boot, เบเปเบฒเบเปเบเปเบฎเบฑเบเบเบปเบเบเบฐเปเบซเบเบเบญเบฑเบเปเบซเบเปเบซเบผเบงเบ 2:
- เบเปเบฒเบเปเบเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบเบเบฒเบเบเบฒเบเบเปเบฝเบเปเบเบเบฅเบฐเบซเบฑเบ
- เบเบฒเบโเปเบเบทเปเบญเบโเบเปเบฒเบโเบเบฒเบโเบเปเปโเบกเบนเบโเปเบเบตเบโเบเบถเปเบโเบเปเบญเบกโเบเบฑเบโเบเบฒเบโเปเบเบตเบโเบเบปเบงโเบเบญเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบเบญเบโเบเปเบฒเบโ, i.e. เบเบฐโเบเบงเบโเบเบฒเบโเบเปเบฒโเปเบเปโเบเบญเบโเบเปเบฒเบโเปเบกเปเบโเบเปเบฒเบโเบเบฒเบโ
เปเบเปเปเบเบเบฑเบเบซเบฒเบเบฒเบเบเปเปเบกเบนเบ
เปเบเบเบฒเบเบเปเปเปเบเบเบญเบเบเบปเบเบเบงเบฒเบก, เบเบงเบเปเบฎเบปเบฒเบเบฐเบชเบธเบกเปเบชเปเบเบฒเบเปเบเบดเปเบเบชเบญเบเบงเบดเบเบตเบเบฒเบเปเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบ.
- เบเบงเบฒเบกเบเปเปเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบผเบฑเบ
- เบเบงเบฒเบกเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบผเบฑเบ
เบญเบฑเบเบเปเบฒเบญเบดเบเบเบฐเบเบทเบเบเบดเบเบฒเบฅเบฐเบเบฒเปเบเบฑเบเบเปเบฒเปเบเบทเบญเบเบงเปเบฒเบเปเบฒเบเบเปเปเบเบงเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบงเบฒเบเปเบงเบฅเบฒ downtime เปเบเบเบเปเปเบกเบตเบเบฒเบเบเบฐเบเบฝเบกเปเบเบทเปเบญเบเบเบปเปเบ ... เบญเบฑเบเบเบตเบชเบญเบเบชเบฐเปเบซเบเบตเบงเบดเบเบตเปเบเปเปเบเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบ deployment เปเบเบเบเปเปเบกเบตเบเบฒเบ downtime เปเบฅเบฐเปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบเบฎเบฑเบเบชเบฒเบเบงเบฒเบกเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบเบทเบเปเบเบเปเบญเบ.
เปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบฎเบฑเบเบงเบฝเบเบเบฐเปเบเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ Spring Boot Flyway เบเปเบฒเบเบเบฒเบเบเบตเปเบกเบต Person
ั first_name
ะธ last_name
เปเบโเบเบฒเบโเบเปเปโเบกเบนเบ (เบเบฐเบกเบฒเบ เบเบฒเบเปเบ: Person
เปเบกเปเบเบเบฒเบเบฐเบฅเบฒเบเปเบฅเบฐ first_name
ะธ last_name
- เปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบเบปเปเบเบเบฒเปเบเบกเบฑเบ). เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเปเบฝเบเบเบทเป last_name
ะฒ surname
.
เบชเบปเบกเบกเบธเบเบเบดเบเบฒเบ
เบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ, เบกเบตเบชเบญเบเบชเบปเบกเบกเบธเบเบเบดเบเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเปเบฎเบฑเบเบเปเบฝเบงเบเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบเบปเบเปเบเปเบฎเบฑเบเบเบปเปเบเบเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเบเบฑเบเบฅเบธเบเบฐเปเบเบฑเบเบเบฐเบเบงเบเบเบฒเบเบเปเบฒเบเบเบฒเบเบเบปเบเบเบปเปเบงเปเบ.
เบเบฑเบเบเบถเบ. เบเบธเบฅเบฐเบเบดเบ PRO-TIP. เบเบฐเบเบงเบเบเบฒเบเบเบตเปเบฅเบฝเบเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฐเบซเบเบฑเบเปเบเบดเบเปเบซเปเบเปเบฒเบเปเบเปเบซเบผเบฒเบเปเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ (เบซเบผเบฒเบเบเบปเบเบเบตเปเบเปเบฒเบเปเบฎเบฑเบเบงเบฝเบเบชเปเบฒเบฅเบฑเบเบเปเบฅเบดเบชเบฑเบเบเบญเบเบเปเบฒเบ, เปเบเบดเบเบซเบผเบฒเบเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฐเบซเบเบฑเบเปเบเป)!
เบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบ rollback เบเบฒเบเบเปเปเบกเบนเบ
เบญเบฑเบเบเบตเปเปเบฎเบฑเบเปเบซเปเบเบฐเบเบงเบเบเบฒเบเบเบณเปเบเปเบเปเบฒเบ (เบเบฒเบ rollback เบเบฒเบเบเปเปเบกเบนเบเปเบเบทเบญเบเปเบเบฑเบเปเบเบเปเปเปเบเป, เปเบเบฑเปเบ: เบเบฒเบเบฅเบถเบ rollback). เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบฑเบเบเบทเบเบเบฝเบเปเบเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ. เบงเบดเบเบตเบเบตเป, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเปเบฒเบเบกเบตเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ (เบเบปเบงเบขเปเบฒเบ, SQL เปเบฅเบฐ NoSQL), เบเปเปเบเบฒเบเบเปเบฒเปเบเปเบเปเบเบญเบเบเปเบฒเบเบเบฐเบกเบตเบฅเบฑเบเบชเบฐเบเบฐเบเบฝเบงเบเบฑเบ.
เบกเบฑเบโเบเปเบญเบโเปเบเบฑเบโเปเบโเปเบเปโเบชเบฐโเปเบซเบกเบตโเบเบตเปโเบเบฐโเบเบฑเบโเบเบทเบโเปเบโเบเปเบญเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบซเบเบถเปเบโเบชเบฐโเบเบฑเบโเบเบฑเบโเบเบทเบโเปเบโเบเปเบญเบ (เบเปเปโเบกเบตโเบเปเปโเปเบโ)
Rollback เบเบงเบเปเบฎเบฑเบเปเบกเบทเปเบญเบกเบตเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบเปเบเบปเปเบฒเบเบฑเปเบ. เบเปเบฒเบกเบต bug เปเบเบชเบฐเบเบฑเบเบเบฐเบเบธเบเบฑเบเบเบตเปเบเปเปเปเบเปเบฎเบฑเบเบเบฒเบเปเบเปเปเบเปเบเปเบเปเบฒเบ, เบเบงเบเปเบฎเบปเบฒเบเบงเบเบเบฐเบชเบฒเบกเบฒเบเบเบฑเบเบเบทเบเปเบเบชเบฐเบเบฑเบเบซเบฅเปเบฒเบชเบธเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเปเบเป. เบเบงเบโเปเบฎเบปเบฒโเบชเบปเบกโเบกเบธเบโเบงเปเบฒโเบชเบฐโเบเบฑเบโเบเบตเปโเปเบฎเบฑเบโเบงเบฝเบโเบซเบฅเปเบฒโเบชเบธเบโเบเบตเปโเปเบกเปเบโเบเบฒเบโเบเบตเปโเบเปเบฒเบโเบกเบฒโ. เบเบฒเบเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบเปเบฅเบฐเบเบงเบฒเบกเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบญเบเบเบฒเบเบเปเปเบกเบนเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบตเบเบเบปเบงเบซเบผเบฒเบเบเบงเปเบฒเบซเบเบถเปเบเบเบฑเปเบเบเบฐเปเบเบฑเบเบเบฒเบเบเบฒเบเบเบตเปเบชเบธเบเปเบฅเบฐเบกเบตเบฅเบฒเบเบฒเปเบเบ.
เบเบฑเบเบเบถเบ. เปเบเบทเปเบญเปเบซเปเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเปเบซเบผเบฒเบเบเบงเปเบฒเปเบเบปเปเบฒ, เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบฝเบเปเบงเบตเบเบฑเบเบเบตเปเบชเปเบฒเบเบฑเบเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ.
เบเบฑเปเบเบเบญเบเบเบต 1: เบชเบฐเบเบฒเบเบฐเปเบเบทเปเบญเบเบเบปเปเบ
เบฅเบธเปเบเปเบญเบฑเบ: 1.0.0
เบฅเบธเปเบ DB: v1
เบเบงเบฒเบกเบเบดเบเปเบซเบฑเบ
เบเบตเปเบเบฐเปเบเบฑเบเบชเบฐเบเบฒเบเบฐเปเบเบทเปเบญเบเบเบปเปเบเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ.
เบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบ
DB เบเบฐเบเบญเบเบเปเบงเบ last_name.
CREATE TABLE PERSON (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
first_name varchar(255) not null,
last_name varchar(255) not null
);
insert into PERSON (first_name, last_name) values ('Dave', 'Syer');
เบเบฒเบเบเปเบฝเบเปเบเบเบฅเบฐเบซเบฑเบ
เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเบฑเบเบเปเปเบกเบนเบเบเบธเบเบเบปเบเปเบ last_name
:
/*
* Copyright 2012-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package sample.flyway;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastname) {
this.lastName = lastname;
}
@Override
public String toString() {
return "Person [firstName=" + this.firstName + ", lastName=" + this.lastName
+ "]";
}
}
เบเบฒเบเบเปเบฝเบเบเบทเปเบเบฑเบเบเบฑเบเบซเบผเบฑเบเบเบตเปเบเปเปเปเบเบปเปเบฒเบเบฑเบเปเบเป
เปเบซเปเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบงเบดเบเบตเบเบฒเบเบเปเบฝเบเบเบทเปเบเบฑเบ:
เปเบญเบปเบฒเปเบเปเบชเป. เบเบปเบงเบขเปเบฒเบเบเปเปเปเบเบเบตเปเบเบฐเบเปเบฒเบฅเบฒเบเบชเบดเปเบเบเปเบฒเบเปเปเบเบเปเบเบเบเบฐเบเบฒ. เบเบงเบเปเบฎเบปเบฒเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเบตเปเปเบเบทเปเบญเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเบฑเบเบซเบฒเบเบญเบเบเบงเบฒเบกเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบญเบเบเบฒเบเบเปเปเบกเบนเบ.
เบฅเบธเปเบเปเบญเบฑเบ: 2.0.0.BAD
เบฅเบธเปเบ DB: v2bad
เบเบงเบฒเบกเบเบดเบเปเบซเบฑเบ
เบเบฒเบเบเปเบฝเบเปเบเบเปเบเบเบฐเบเบธเบเบฑเบเบเปเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบตเบเบเบฒเบเบชเบญเบเบเบปเบงเบขเปเบฒเบ (เปเบเบปเปเบฒเปเบฅเบฐเปเบซเบกเป) เปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ. เบเบฑเปเบเบเบฑเปเบ, เบเบฒเบเบเบณเปเบเปเบชเบนเบเบเบฒเบเบขเบธเบเปเบฎเบฑเบเบงเบฝเบเบเบฐเบเบฒเบเบเบตเปเบเบฐเบเบฑเบเบฅเบธเปเบเป (เบเปเบฒเบชเบปเบกเบกเบธเบเบเบดเบเบฒเบเบเบทเบเบเบดเบเบฒเบฅเบฐเบเบฒ, เบเบปเบงเบเบดเบเปเบฅเปเบงเปเบเบฑเบเปเบเบเปเปเปเบเป).
เบเบฒเบเบเบปเบเบชเบญเบ A/B
เบชเบฐเบเบฒเบเบฐเบเบฒเบเปเบเบเบฐเบเบธเบเบฑเบเปเบกเปเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบกเบตเบชเบฐเบเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ 1.0.0,
deployed เปเบโเบเบฒเบโเบเบฐโเบฅเบดเบโ, เปเบฅเบฐโเบเบฒเบโเบเปเปโเบกเบนเบโ v1
. เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเปเบฒเปเบเปเบเบปเบงเบขเปเบฒเบเบเบตเบชเบญเบเบเบญเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ, เบชเบฐเบเบฑเบ 2.0.0.BAD
, เปเบฅเบฐเบเบฑเบเบเบธเบเบเบฒเบเบเปเปเบกเบนเบเปเบเบฑเบ v2bad
.
เบเบฑเปเบเบเบญเบ:
- เบเบปเบงเบขเปเบฒเบเปเปเปเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบงเบตเบเบฑเบเบเบทเบเบเบณเปเบเป
2.0.0.BAD
เปเบเบดเปเบเบเบฑเบเบเบธเบเบเบฒเบเบเปเปเบกเบนเบเปเบเบฑเบv2bad
- เปเบเบเบฒเบเบเปเปเบกเบนเบ
v2bad
เบเบฑเบlast_name
เบเปเปเบกเบตเปเบฅเปเบง - เบกเบฑเบเปเบเปเบเบทเบเบเปเบฝเบเปเบเบฑเบsurname
- เบเบฒเบเบญเบฑเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบ เปเบฅเบฐเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบชเบณเปเบฅเบฑเบเบเบปเบ เปเบฅเบฐเบเบฒเบเบเปเบฅเบฐเบเบตเบเบณเบฅเบฑเบเปเบฎเบฑเบเบงเบฝเบเบขเบนเป
1.0.0
, เบญเบทเปเบเป - เปเบ2.0.0.BAD
. เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบv2bad
- เบเบปเบงเบขเปเบฒเบเบเบฑเบเบซเบกเบปเบเบเบญเบเบชเบฐเบเบฑเบ
1.0.0
เบเบฐเปเบฅเบตเปเบกเบเบดเปเบกเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเบฒเบฐเบงเปเบฒเบเบงเบเปเบเบปเบฒเบเบฐเบเบฐเบเบฒเบเบฒเบกเปเบชเปเบเปเปเบกเบนเบเปเบเบปเปเบฒเปเบเปเบเบเบฑเบlast_name
เบเบนเปเบเบตเปเบเปเปเบกเบตเบขเบนเปเปเบฅเปเบง - เบเบปเบงเบขเปเบฒเบเบเบฑเบเบซเบกเบปเบเบเบญเบเบชเบฐเบเบฑเบ
2.0.0.BAD
เบเบฐเปเบฎเบฑเบเบงเบฝเบเปเบเบเบเปเปเบกเบตเบเบฑเบเบซเบฒ
เบเบฑเปเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเปเบซเบฑเบเปเบเป, เบเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบตเปเบเปเปเปเบเบปเปเบฒเบเบฑเบเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบเปเบฅเบฐเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เบเบฒเบเบเบปเบเบชเบญเบ A / B เปเบกเปเบเปเบเบฑเบเปเบเบเปเปเปเบเป.
เบเบฒเบโเปเบฅเบทเปเบญเบโเบเบทเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโ
เปเบซเปเบชเบปเบกเบกเบธเบเบงเปเบฒเบซเบผเบฑเบเบเบฒเบเบเบฐเบเบฒเบเบฒเบกเปเบเป A/B (เบเบฐเบกเบฒเบ per.: เบเบนเปเบเบฝเบเบญเบฒเบเบเบฐเบซเบกเบฒเบเปเบเบดเบเบเบฒเบเบเบปเบเบชเบญเบ A/B เบขเบนเปเบเบตเปเบเบตเป) เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบชเบดเบเปเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบฑเบเบเบทเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบฑเบเบชเบฐเบเบฑเบ 1.0.0.
เปเบซเปเปเบงเบปเปเบฒเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเบญเบเบเบฒเบ rollback เบเบฒเบเบเปเปเบกเบนเบ.
เบเบฑเปเบเบเบญเบ:
- เบเบงเบโเปเบฎเบปเบฒโเบขเบธเบโเปเบเบปเบฒโเบเบฒเบโเบเบปเบงโเบขเปเบฒเบโเบเบญเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบชเบฐโเบเบฑเบโ
2.0.0.BAD
- เบเบฒเบเบเปเปเบกเบนเบเปเบกเปเบเบเบฑเบ
v2bad
- เบเบฑเบโเบเบฑเปเบโเปเบเปโเบชเบฐโเบเบฑเบโ
1.0.0
เบเปเปเปเบเบปเปเบฒเปเบเบงเปเบฒเบกเบฑเบเปเบกเปเบเบซเบเบฑเบsurname
, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบซเบฑเบเบเบงเบฒเบกเบเบดเบเบเบฒเบ - hell เปเบเปเปเบเบเบซเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเบชเบฒเบกเบฒเบเบเบฑเบเบเบทเบเปเบเป
เบเบฑเปเบเบเบตเปเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเป, เบเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบตเปเบเปเปเปเบเบปเปเบฒเบเบฑเบเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบเปเบฅเบฐเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเบชเบฒเบกเบฒเบเบเบฑเบเบเบทเบเปเบเบซเบฒเบชเบฐเบเบฑเบเบเปเบญเบเบซเบเปเบฒ.
เบเบฑเบเบเบถเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบชเบฐเบเบฃเบดเบ
Backward incompatible scenario:
01) Run 1.0.0
02) Wait for the app (1.0.0) to boot
03) Generate a person by calling POST localhost:9991/person to version 1.0.0
04) Run 2.0.0.BAD
05) Wait for the app (2.0.0.BAD) to boot
06) Generate a person by calling POST localhost:9991/person to version 1.0.0 <-- this should fail
07) Generate a person by calling POST localhost:9992/person to version 2.0.0.BAD <-- this should pass
Starting app in version 1.0.0
Generate a person in version 1.0.0
Sending a post to 127.0.0.1:9991/person. This is the response:
{"firstName":"b73f639f-e176-4463-bf26-1135aace2f57","lastName":"b73f639f-e176-4463-bf26-1135aace2f57"}
Starting app in version 2.0.0.BAD
Generate a person in version 1.0.0
Sending a post to 127.0.0.1:9991/person. This is the response:
curl: (22) The requested URL returned error: 500 Internal Server Error
Generate a person in version 2.0.0.BAD
Sending a post to 127.0.0.1:9995/person. This is the response:
{"firstName":"e156be2e-06b6-4730-9c43-6e14cfcda125","surname":"e156be2e-06b6-4730-9c43-6e14cfcda125"}
เบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบ
เบชเบฐเบเบฃเบดเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบตเปเบเปเบฝเบเบเบทเป last_name
ะฒ surname
เบเบตเปเบกเบฒ script Flyway:
CREATE TABLE PERSON (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
first_name varchar(255) not null,
last_name varchar(255) not null
);
insert into PERSON (first_name, last_name) values ('Dave', 'Syer');
เบชเบฐเบเบฃเบดเบเบเบตเปเบเปเบฝเบเบเบทเป last_name
.
-- This change is backward incompatible - you can't do A/B testing
ALTER TABLE PERSON CHANGE last_name surname VARCHAR;
เบเบฒเบเบเปเบฝเบเปเบเบเบฅเบฐเบซเบฑเบ
เบเบงเบเปเบฎเบปเบฒเปเบเปเบเปเบฝเบเบเบทเปเบเบฒเบเบชเบฐเบซเบเบฒเบก lastName
เบชเบธเบ surname
.
เบเบฒเบเบเปเบฝเบเบเบทเปเบเบฑเบเปเบเปเบเบเบเบตเปเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบผเบฑเบ
เบเบตเปเปเบกเปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบปเปเบงเปเบเบเบตเปเบชเบธเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบญเบฒเบเบเบฐเบเบปเบ. เบเบงเบโเปเบฎเบปเบฒโเบเปเบฒโเปเบเบฑเบโเบเปเบญเบโเปเบเปโเปเบฎเบฑเบโเปเบซเปโเบเบฒเบโเบเปเบฝเบโเปเบเบโเบเบตเปโเบเปเปโเปเบเบปเปเบฒโเบเบฑเบโเบเบฑเบโเบซเบผเบฑเบโ. เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบดเบชเบนเบเปเบฅเปเบงเบงเปเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบดเบเบเบฑเปเบเปเบงเบฅเบฒเบชเบนเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเบเบงเบเบเบฝเบเปเบเปเบเปเบฒเปเบเปเบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบฒเบเบเปเปเบกเบนเบเปเบเบเบเปเปเบกเบตเบเบฑเปเบเบเบญเบเปเบเบตเปเบกเปเบเบตเบก. เปเบเบเบฒเบเบเบตเปเบเบญเบเบเบปเบเบเบงเบฒเบก, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฐเบเบดเบเบฑเบ 3 เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเปเบญเบกเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบฒเบเบเปเปเบกเบนเบเปเบเบทเปเบญเบเบฑเบเบฅเบธเบเบปเบเปเบเปเบฎเบฑเบเบเบตเปเบเปเบญเบเบเบฒเบเปเบเบเบฐเบเบฐเบเบตเปเบฎเบฑเบเบชเบฒเบเบงเบฒเบกเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบฅเบฑเบ.
เบเบฑเบเบเบถเบ. เบเบทเปเปเบงเปเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบกเบตเบเบฒเบเบเปเปเบกเบนเบเบชเบฐเบเบฑเบ
v1
. เบกเบฑเบเบเบฐเบเบญเบเบเปเบงเบเบเบฑเบfirst_name
ะธlast_name
. เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเปเบฝเบเปเบเบlast_name
เบชเบธเบsurname
. เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบกเบตเบชเบฐเบเบฑเบ app1.0.0,
เปเบเบดเปเบเบเบฑเบเบเปเปเบเบฑเบเปเบเปเบเบณเปเบเปเปเบเบทเปเบญsurname
.
เบเบฑเปเบเบเบญเบเบเบต 2: เปเบเบตเปเบกเบเบฒเบกเบชเบฐเบเบธเบ
เบฅเบธเปเบเปเบญเบฑเบ: 2.0.0
เบฅเบธเปเบ DB: v2
เบเบงเบฒเบกเบเบดเบเปเบซเบฑเบ
เปเบเบเบเบฒเบเปเบเบตเปเบกเบเบฑเบเปเปเป เปเบฅเบฐเบชเบณเปเบเบปเบฒเปเบเบทเปเบญเบซเบฒเบเบญเบเบกเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบผเบฑเบ. เปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ, เบเปเบฒเบเบงเบเปเบฎเบปเบฒ rollback JAR เบซเบผเบทเบกเบต JAR เปเบเบปเปเบฒเปเบฅเปเบ, เบกเบฑเบเบเบฐเบเปเปเปเบเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ.
เบเบงเบเปเบฎเบปเบฒเบเบณเบฅเบฑเบเปเบเบตเบเบเบปเบงเปเบงเบตเบเบฑเบเปเปเป
เบเบฑเปเบเบเบญเบ:
- เบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบฒเบเบเปเปเบกเบนเบเปเบเบทเปเบญเบชเปเบฒเบเบเบฑเบเปเบซเบกเป
surname
. เปเบเบเบฑเบเบเบธเบเบฑเบเบชเบฐเบเบฑเบ DB เบเบญเบเบเปเบฒเบv2
- เบชเบณเปเบเบปเบฒเบเปเปเบกเบนเบเบเบฒเบ
last_name
ะฒsurname
. เบเปเบฒเบเปเบญเบปเบฒเปเบเปเบชเปเบงเปเบฒเบเปเบฒเบเปเบฒเบเบกเบตเบเปเปเบกเบนเบเบเบตเปเบซเบผเบฒเบ, เบเปเบฒเบเบเบงเบเบเบดเบเบฒเบฅเบฐเบเบฒเบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบ batch! - เบเบฝเบเบฅเบฐเบซเบฑเบเบเปเบญเบเบเบตเปเบเบงเบเปเบเบปเบฒเบเบทเบเบเปเบฒเปเบเป เบเบฑเบเบชเบญเบ ะธ เปเบซเบกเปเปเบฅเบฐ เบญเบฒเบเบธ เบเบฑเบ. เปเบเบเบฑเบเบเบธเบเบฑเบเบชเบฐเบเบฑเบ app เบเบญเบเบเปเบฒเบ
2.0.0
- เบญเปเบฒเบเบเปเบฒเบเบฒเบเบเบฑเบ
surname
, เบเปเบฒเบกเบฑเบเบเปเปเปเบกเปเบnull
, เบซเบผเบทเบเบฒเบ last_name
, เบเปเบฒเปเบเบฑเบsurname
เบเปเปเปเบเปเบฅเบฐเบเบธ. เบเปเบฒเบเบชเบฒเบกเบฒเบเบฅเบถเบgetLastName()
เบเบฒเบเบฅเบฐเบซเบฑเบ, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบฑเบเบเบฐเบญเบญเบnull
เปเบโเปเบงโเบฅเบฒโเบเบตเป rolling เบเบฑเบโเบเบทเบโเปเบโเบเปเบญเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบเบญเบโเบเปเบฒเบโเบเบฒเบโ3.0.0
เบเบฒเบ2.0.0
.
เบเปเบฒเบเปเบฒเบเบเปเบฒเบฅเบฑเบเปเบเป Spring Boot Flyway, เบชเบญเบเบเบฑเปเบเบเบญเบเบเบตเปเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบฎเบธเปเบ 2.0.0
เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ. เบเปเบฒเบเปเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเบทเปเบญเบเบกเบทเบเบฒเบเบชเปเบฒเบเบชเบฐเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบเบเปเบงเบเบเบปเบเปเบญเบ, เบเปเบฒเบเบเบฐเบเปเบญเบเปเบฎเบฑเบเบชเบญเบเบชเบดเปเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป (เบเปเบฒเบญเบดเบเบเบฑเบเบเบธเบเบชเบฐเบเบฑเบ db เบเปเบงเบเบเบปเบเปเบญเบเปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบซเบกเป).
เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบ. เบเบทเปเปเบงเปเบงเปเบฒเบเบฑเบเบเบตเปเบชเปเบฒเบเบเบถเปเบเปเบซเบกเป เบเปเปโเบเบงเบ เบเบฐ เบเปเป NULL. เบเปเบฒเบเปเบฒเบเปเบฎเบฑเบ rollback, เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเบปเปเบฒเบเปเปเบฎเบนเปเบเปเบฝเบงเบเบฑเบเบเปเบฅเปเบฒเปเบซเบกเปเปเบฅเบฐเบเบฐเบเปเปเบเบดเบเบเบฑเปเบเบกเบฑเบเปเบเบฅเบฐเบซเบงเปเบฒเบ
Insert.
เปเบเปเบเปเบฒเบเปเบฒเบเปเบเบตเปเบกเบเปเปเบเปเบฒเบเบฑเบเบเบตเปเปเบฅเบฐ db เบเบญเบเบเปเบฒเบเบเบฐเปเบเบฑเบv2
, เบเบตเปเบเบฐเบเปเบญเบเบเปเบฒเบเบปเบเบเปเบฒเบเบญเบเบเบฑเบเปเบซเบกเป. เปเบเบดเปเบเบเบฐเบเปเบฒเปเบเบชเบนเปเบเบฒเบเบฅเบฐเปเบกเบตเบเบเปเปเบเปเบฒเบเบฑเบ.เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบ. เบเปเบฒเบเบเบงเบเปเบญเบปเบฒเบงเบดเบเบตเบเบฒเบเบญเบญเบ
getLastName()
, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบขเบนเปเปเบเบชเบฐเบเบฑเบ3.0.0
เบเปเปเบกเบตเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบเบเบฑเบเบขเบนเปเปเบเบฅเบฐเบซเบฑเบlast_name
. เบเบตเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒ null เบเบฐเบเบทเบเบเบฑเปเบเบขเบนเปเบเบตเปเบเบฑเปเบ. เบเปเบฒเบเบชเบฒเบกเบฒเบเบญเบญเบเบเบฒเบเบงเบดเบเบตเบเบฒเบเปเบฅเบฐเปเบเบตเปเบกเบเบฒเบเบเบงเบเบชเบญเบเบชเปเบฒเบฅเบฑเบnull
, เปเบเปเบเบฒเบเปเบเปเปเบเบเบตเปเบเบตเบเบงเปเบฒเบซเบผเบฒเบเปเบกเปเบเปเบเบทเปเบญเปเบฎเบฑเบเปเบซเปเปเบเปเปเบเบงเปเบฒเปเบเปเบซเบเบเบปเบgetSurname()
เบเปเบฒเบเปเบฅเบทเบญเบเบเปเบฒเบเบตเปเบเปเปเปเบกเปเบเบชเบนเบเบเบตเปเบเบทเบเบเปเบญเบ.
เบเบฒเบเบเบปเบเบชเบญเบ A/B
เบชเบฐเบเบฒเบเบฐเบเบฒเบเปเบเบเบฐเบเบธเบเบฑเบเปเบกเปเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบกเบตเบชเบฐเบเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ 1.0.0
, deployed เบชเบธเบเบเบฒเบเบเบฐเบฅเบดเบ, เปเบฅเบฐเบเบฒเบเบเปเปเบกเบนเบเปเบ v1
. เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเปเบฒเปเบเปเบเบปเบงเบขเปเบฒเบเบเบตเบชเบญเบเบเบญเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบชเบฐเบเบฑเบ 2.0.0
เปเบเบดเปเบเบเบฐเบเบฑเบเบเบธเบเบเบฒเบเบเปเปเบกเบนเบเปเบเบฑเบ v2
.
เบเบฑเปเบเบเบญเบ:
- เบเบปเบงเบขเปเบฒเบเปเปเปเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบงเบตเบเบฑเบเบเบทเบเบเบณเปเบเป
2.0.0
เปเบเบดเปเบเบเบฑเบเบเบธเบเบเบฒเบเบเปเปเบกเบนเบเปเบเบฑเบv2
- เปเบโเบเบฐโเบเบฐโเบเบฝเบงโเบเบฑเบโเบเบฒเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเปเบเบโเบเบปเบงโเบขเปเบฒเบโเบชเบฐโเบเบฑเบโ
1.0.0
- เบเบฒเบโเบเบฑเบโเบเบธเบโเบชเบปเบโเบเบปเบโเบชเปเบฒโเปเบฅเบฑเบโเปเบฅเบฐโเบเปเบฒเบโเบกเบตโเบเบปเบงโเบขเปเบฒเบโเบเบตเปโเปเบฅเปเบโเบซเบผเบฒเบโเบเบญเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบชเบฐโเบเบฑเบโ
1.0.0
เปเบฅเบฐเบชเบฐเบเบฑเบเบญเบทเปเบเป2.0.0.
เบเบธเบเบเบปเบเบเบดเบเบเปเปเบชเบทเปเบชเบฒเบเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบเปเบv2
- เบฎเบธเปเบ
1.0.0
เบเปเปเปเบเปเปเบเปเบเบฑเบเบเบฒเบกเบชเบฐเบเบธเบเปเบเบเบฒเบเบเปเปเบกเบนเบ, เปเบเปเบชเบฐเบเบฑเบ2.0.0
เปเบเป. เบเบงเบเปเบเบปเบฒเบเปเปเปเบเบเปเบเบเบเบฑเบเปเบฅเบฐเบเบฑเบ, เปเบฅเบฐเบเปเปเบเบงเบเบกเบตเบเปเปเบเบดเบเบเบฒเบ. - เบฎเบธเปเบ
2.0.0
เปเบเบฑเบเบเปเปเบกเบนเบเบเบฑเบเปเบเบเบฑเบเปเบเบปเปเบฒ เปเบฅเบฐ เปเปเป, เบฎเบฑเบเบเบฐเบเบฑเบเบเบงเบฒเบกเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบผเบฑเบ
เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบ. เบเปเบฒเบเปเบฒเบเบกเบตเบเปเบฒเบเบฒเบกเปเบเปเบเบตเปเบเบฑเบเบฅเบฒเบเบเบฒเบเปเบเบเบญเบตเบเปเบชเปเบเปเบฒเบเบฒเบเบเปเบฅเปเบฒเปเบเบปเปเบฒ / เปเบซเบกเป, เบเปเบฒเบเบเบงเบเบเบทเปเปเบงเปเบงเปเบฒเบเบญเบเบเบตเปเบเปเบฒเบเบกเบตเบเปเบฒเบเบตเปเบเปเปเบฒเบเบฑเบ (เบชเปเบงเบเบซเบผเบฒเบเปเบกเปเบเบเบงเบเปเบเบปเบฒเบเบฑเบเปเบเบทเปเบญเบเบเปเบฒเบ). เบเบปเบงเบขเปเบฒเบ: เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบฑเบเบเปเบฒเบเบงเบเบเบนเปเปเบเปเบเบตเปเบกเบตเบเบฒเบกเบชเบฐเบเบธเบ (เบญเบฑเบเปเบเบเปเปเบเบฒเบกเบเบตเปเบเบฑเบเบเบทเบเปเบญเบตเปเบเบงเปเบฒ) เปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบเบเบปเบงเบญเบฑเบเบชเบญเบ.
A
, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบปเบเบเปเบงเบฒเบเบฒเบเปเบญเบเบเปเปเบกเบนเบเบชเปเบฒเปเบฅเบฑเบ (old
โnew
เบเบฑเบ) เบเปเบฒเบเบญเบฒเบเบเบฐเบกเบตเบเปเปเบกเบนเบเบเปเปเบชเบญเบเบเปเบญเบเบซเบฒเบเบเปเบฒเบเบชเบญเบเบเบฒเบกเบเบฑเบเปเปเป.
เบเบฒเบโเปเบฅเบทเปเบญเบโเบเบทเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโ
เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบกเบต app เบชเบฐเบเบฑเบ 2.0.0
เปเบฅเบฐเบเบฒเบเบเปเปเบกเบนเบเปเบ v2
.
เบเบฑเปเบเบเบญเบ:
- เบเบฑเบเบเบทเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบญเบเบเปเบฒเบเปเบซเปเปเบเบฑเบเปเบงเบตเบเบฑเบ
1.0.0
. - เบฎเบธเปเบ
1.0.0
เบเปเปเปเบเปเปเบเปเบเบฑเบเปเบเบเบฒเบเบเปเปเบกเบนเบsurname
, เบเบฑเปเบเบเบฑเปเบ rollback เบเบงเบเบเบฐเบเบฐเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบ
DB เบเบฒเบเบเปเบฝเบเปเบเบ
เบเบฒเบเบเปเปเบกเบนเบเบกเบตเบเบฑเบเบเบทเป last_name
.
script เปเบซเบผเปเบ Flyway:
CREATE TABLE PERSON (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
first_name varchar(255) not null,
last_name varchar(255) not null
);
insert into PERSON (first_name, last_name) values ('Dave', 'Syer');
เปเบเบตเปเบกเบชเบฐเบเบฃเบดเบ surname
.
เปเบญเบปเบฒเปเบเปเบชเป. เบเบทเปเปเบงเปเบงเปเบฒเบเปเบฒเบเบเปเปเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเปเปเบเปเบฒเบเบฑเบ NOLL เปเบเปเปเบชเปเบเบฑเบเบเบตเปเบเปเบฒเบเบเปเบฒเบฅเบฑเบเปเบเบตเปเบก. เบเปเบฒเบเปเบฒเบ rollback JAR, เบฎเบธเปเบเปเบเบปเปเบฒเบเบฐเบเปเปเบเบดเบเบเปเบฝเบงเบเบฑเบเบเบฑเบเบเบตเปเปเบเบตเปเบกเปเบฅเบฐเบเบฐเบเบฑเปเบเบกเบฑเบเปเบเบฑเบ NULL เปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ. เบเปเบฒเบกเบตเบเปเปเบเปเบฒเบเบฑเบเบเบฑเปเบเบเปเบฒเบง, เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบปเปเบฒเบเบฐเปเบเบเปเบเบ.
-- NOTE: This field can't have the NOT NULL constraint cause if you rollback, the old version won't know about this field
-- and will always set it to NULL
ALTER TABLE PERSON ADD surname varchar(255);
-- WE'RE ASSUMING THAT IT'S A FAST MIGRATION - OTHERWISE WE WOULD HAVE TO MIGRATE IN BATCHES
UPDATE PERSON SET PERSON.surname = PERSON.last_name
เบเบฒเบเบเปเบฝเบเปเบเบเบฅเบฐเบซเบฑเบ
เบเบงเบเปเบฎเบปเบฒเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเปเบเบฑเบ last_name
, เปเบฅเบฐเปเบ surname
. เปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบญเปเบฒเบเบเบฒเบ last_name
, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเปเบฅเปเบฒเบเบตเปเปเบกเปเบเบกเบตเบเบงเบฒเบกเบเปเบฝเบงเบเปเบญเบเบเบตเปเบชเบธเบ. เปเบโเบฅเบฐโเบซเบงเปเบฒเบโเบเบฐโเบเบงเบโเบเบฒเบโเบเบฒเบโเบเปเบฒโเปเบเปโ, เบเบฒเบโเบเปเบฒโเบฎเปเบญเบโเบเปโเบญเบฒเบโเบเบฐโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเปเบเบโเบเบปเบงโเบขเปเบฒเบโเบเบญเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบเบตเปโเบเบฑเบโเบเปเปโเบเบฑเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบฑเบโเบเบธเบโ.
/*
* Copyright 2012-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package sample.flyway;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
private String surname;
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
/**
* Reading from the new column if it's set. If not the from the old one.
*
* When migrating from version 1.0.0 -> 2.0.0 this can lead to a possibility that some data in
* the surname column is not up to date (during the migration process lastName could have been updated).
* In this case one can run yet another migration script after all applications have been deployed in the
* new version to ensure that the surname field is updated.
*
* However it makes sense since when looking at the migration from 2.0.0 -> 3.0.0. In 3.0.0 we no longer
* have a notion of lastName at all - so we don't update that column. If we rollback from 3.0.0 -> 2.0.0 if we
* would be reading from lastName, then we would have very old data (since not a single datum was inserted
* to lastName in version 3.0.0).
*/
public String getSurname() {
return this.surname != null ? this.surname : this.lastName;
}
/**
* Storing both FIRST_NAME and SURNAME entries
*/
public void setSurname(String surname) {
this.lastName = surname;
this.surname = surname;
}
@Override
public String toString() {
return "Person [firstName=" + this.firstName + ", lastName=" + this.lastName + ", surname=" + this.surname
+ "]";
}
}
เบเบฑเปเบโเบเบญเบโเบเบต 3โ: เบเบฒเบโเบฅเบปเบ Last_name เบเบฒเบโเบฅเบฐโเบซเบฑเบโ
เบฅเบธเปเบเปเบญเบฑเบ: 3.0.0
เบฅเบธเปเบ DB:v3
เบเบงเบฒเบกเบเบดเบเปเบซเบฑเบ
เบซเบกเบฒเบโเปเบซเบโ per.: เบเบฒเบเบปเบเบเบทเปเบ, เปเบเบเบปเบเบเบงเบฒเบกเบเบปเปเบเบชเบฐเบเบฑเบเบเบนเปเบเบฝเบเบเบดเบเบเบฒเบเปเบเปเบเบฑเบเบฅเบญเบเบเปเปเบเบงเบฒเบกเบเบญเบเบเบฅเบฑเบญเบเบเบตเปเบเบฒเบเบเบฑเปเบเบเบญเบ 2. เปเบเบเบฑเปเบเบเบญเบเบเบตเป, เบเบงเบเบเบฐเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเปเบเบฅเบฐเบซเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเบกเบตเบเบธเบเบเบฐเบชเบปเบเปเบเบทเปเบญเปเบญเบปเบฒเบซเบเปเบฒเบเบตเปเปเบเปเบเปเบฅเปเบฒ. last_name
.
เปเบเบเบเบฒเบเปเบเบตเปเบกเบเบฑเบเปเปเป เปเบฅเบฐเบชเบณเปเบเบปเบฒเปเบเบทเปเบญเบซเบฒเบเบญเบเบกเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบผเบฑเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบงเบเปเบฎเบปเบฒ rollback JAR เบซเบผเบทเบกเบต JAR เปเบเบปเปเบฒเปเบฅเปเบ, เบกเบฑเบเบเบฐเบเปเปเปเบเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ.
เบเบฒเบโเปเบฅเบทเปเบญเบโเบเบทเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโ
เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบกเบต app เบชเบฐเบเบฑเบ 3.0.0
เปเบฅเบฐเบเบฒเบเบเปเปเบกเบนเบ v3
. เบฎเบธเปเบ 3.0.0
เบเปเปเปเบเปเบเบฑเบเบเบถเบเบเปเปเบกเบนเบเปเบชเป last_name
. เบเบตเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเปเบ surname
เบเปเปโเบกเบนเบโเบเบตเปโเบเบฑเบโเบชเบฐโเปเบซเบกโเบเบตเปโเบชเบธเบโเปเบกเปเบโเปเบเบฑเบโเบฎเบฑเบโเบชเบฒโเปเบงเปโ.
เบเบฑเปเบเบเบญเบ:
- เบเบฑเบเบเบทเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบญเบเบเปเบฒเบเปเบซเปเปเบเบฑเบเปเบงเบตเบเบฑเบ
2.0.0
. - เบฎเบธเปเบ
2.0.0
เปเบเป เปเบฅเบฐlast_name
ะธsurname
. - เบฎเบธเปเบ
2.0.0
เบเบฐเปเบเปเปเบงเบฅเบฒsurname
เบเปเบฒโเบซเบฒเบโเบงเปเบฒโเบกเบฑเบโเบเปเปโเปเบกเปเบโเบชเบนเบโ, เบเปเบฒโเบเปเปโเบเบฑเปเบโเบเบฑเปเบ -last_name
เบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบ
เบเปเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเปเบเบเบชเปเบฒเบเปเบเบเบฒเบเบเปเปเบกเบนเบ. script เบเปเปเปเบเบเบตเปเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเบชเบธเบเบเปเบฒเบเบเบญเบเบเปเปเบกเบนเบเปเบเบปเปเบฒ:
-- WE'RE ASSUMING THAT IT'S A FAST MIGRATION - OTHERWISE WE WOULD HAVE TO MIGRATE IN BATCHES
-- ALSO WE'RE NOT CHECKING IF WE'RE NOT OVERRIDING EXISTING ENTRIES. WE WOULD HAVE TO COMPARE
-- ENTRY VERSIONS TO ENSURE THAT IF THERE IS ALREADY AN ENTRY WITH A HIGHER VERSION NUMBER
-- WE WILL NOT OVERRIDE IT.
UPDATE PERSON SET PERSON.surname = PERSON.last_name;
-- DROPPING THE NOT NULL CONSTRAINT; OTHERWISE YOU WILL TRY TO INSERT NULL VALUE OF THE LAST_NAME
-- WITH A NOT_NULL CONSTRAINT.
ALTER TABLE PERSON MODIFY COLUMN last_name varchar(255) NULL DEFAULT NULL;
เบเบฒเบเบเปเบฝเบเปเบเบเบฅเบฐเบซเบฑเบ
เบซเบกเบฒเบโเปเบซเบโ per.: เบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเบญเบเบเบฅเบฑเบญเบเบเบตเปเบเบฑเบเบเบทเบเบเบฑเบเบฅเบญเบเบเบดเบเบเบฒเบเปเบเบเบเบนเปเบเบฝเบเบเบฒเบเบเบฑเปเบเบเบญเบ 2. เบญเบตเบเบเบฒเบกเปเบซเบเบเบปเบเบเบญเบเบเบปเบเบเบงเบฒเบก, เบเบฒเบเบเปเบฝเบเปเบเบเบฅเบฐเบซเบฑเบเปเบเบเบฑเปเบเบเบญเบเบเบตเปเบเบงเบเบเบฐเบกเบตเบเบธเบเบเบฐเบชเบปเบเบเบตเปเบเบฐเปเบญเบปเบฒเบญเบญเบเบเบฒเบเบญเบปเบเบเบฐเบเบญเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเปเบฅเปเบฒ. last_name
.
เบเบงเบเปเบฎเบปเบฒเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเปเบเบฑเบ last_name
, เปเบฅเบฐเปเบ surname.
เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบญเปเบฒเบเบเบฒเบเบเปเบฅเปเบฒ last_name
, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบฑเบเบกเบตเบเบงเบฒเบกเบเปเบฝเบงเบเปเบญเบเบเบตเปเบชเบธเบ. เปเบโเบฅเบฐโเบซเบงเปเบฒเบโเบเบฐโเบเบงเบโเบเบฒเบโเบเบฒเบโเบเปเบฒโเปเบเปโ, เบเบฒเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบญเบฒเบโเบเบฐโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเปเบเบโเบเบปเบงโเบขเปเบฒเบโเบเบตเปโเบเบฑเบโเบเปเปโเบเบฑเบโเปเบเปโเบเบปเบโเบฅเบฐโเบเบฑเบโ.
/*
* Copyright 2012-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package sample.flyway;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String surname;
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getSurname() {
return this.surname;
}
public void setSurname(String lastname) {
this.surname = lastname;
}
@Override
public String toString() {
return "Person [firstName=" + this.firstName + ", surname=" + this.surname
+ "]";
}
}
เบเบฑเปเบเบเบญเบเบเบต 4: เบเบฒเบเบเบญเบเบเบทเปเบชเบธเบเบเปเบฒเบเบญเบญเบเบเบฒเบเบเบฒเบเบเปเปเบกเบนเบ
เบฅเบธเปเบเปเบญเบฑเบ: 4.0.0
เบฅเบธเปเบ DB: v4
เบเบงเบฒเบกเบเบดเบเปเบซเบฑเบ
เปเบเบทเปเบญเบเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบฅเบฐเบซเบฑเบเบชเบฐเบเบฑเบ 3.0.0
เบเปเปเปเบเปเปเบเปเบเบฑเบ last_name
, เบเปเปเบกเบตเบซเบเบฑเบเบเบตเปเบเปเปเบเบตเบเบฐเปเบเบตเบเบเบทเปเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบทเบเปเบเบซเบฒ 3.0.0
เบซเบผเบฑเบเบเบฒเบเบเบญเบเบเบฑเบเบญเบญเบเบเบฒเบเบเบฒเบเบเปเปเบกเบนเบ.
เบเบฑเบเบเบถเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบชเบฐเบเบฃเบดเบ
We will do it in the following way:
01) Run 1.0.0
02) Wait for the app (1.0.0) to boot
03) Generate a person by calling POST localhost:9991/person to version 1.0.0
04) Run 2.0.0
05) Wait for the app (2.0.0) to boot
06) Generate a person by calling POST localhost:9991/person to version 1.0.0
07) Generate a person by calling POST localhost:9992/person to version 2.0.0
08) Kill app (1.0.0)
09) Run 3.0.0
10) Wait for the app (3.0.0) to boot
11) Generate a person by calling POST localhost:9992/person to version 2.0.0
12) Generate a person by calling POST localhost:9993/person to version 3.0.0
13) Kill app (3.0.0)
14) Run 4.0.0
15) Wait for the app (4.0.0) to boot
16) Generate a person by calling POST localhost:9993/person to version 3.0.0
17) Generate a person by calling POST localhost:9994/person to version 4.0.0
Starting app in version 1.0.0
Generate a person in version 1.0.0
Sending a post to 127.0.0.1:9991/person. This is the response:
{"firstName":"52b6e125-4a5c-429b-a47a-ef18bbc639d2","lastName":"52b6e125-4a5c-429b-a47a-ef18bbc639d2"}
Starting app in version 2.0.0
Generate a person in version 1.0.0
Sending a post to 127.0.0.1:9991/person. This is the response:
{"firstName":"e41ee756-4fa7-4737-b832-e28827a00deb","lastName":"e41ee756-4fa7-4737-b832-e28827a00deb"}
Generate a person in version 2.0.0
Sending a post to 127.0.0.1:9992/person. This is the response:
{"firstName":"0c1240f5-649a-4bc5-8aa9-cff855f3927f","lastName":"0c1240f5-649a-4bc5-8aa9-cff855f3927f","surname":"0c1240f5-649a-4bc5-8aa9-cff855f3927f"}
Killing app 1.0.0
Starting app in version 3.0.0
Generate a person in version 2.0.0
Sending a post to 127.0.0.1:9992/person. This is the response:
{"firstName":"74d84a9e-5f44-43b8-907c-148c6d26a71b","lastName":"74d84a9e-5f44-43b8-907c-148c6d26a71b","surname":"74d84a9e-5f44-43b8-907c-148c6d26a71b"}
Generate a person in version 3.0.0
Sending a post to 127.0.0.1:9993/person. This is the response:
{"firstName":"c6564dbe-9ab5-40ae-9077-8ae6668d5862","surname":"c6564dbe-9ab5-40ae-9077-8ae6668d5862"}
Killing app 2.0.0
Starting app in version 4.0.0
Generate a person in version 3.0.0
Sending a post to 127.0.0.1:9993/person. This is the response:
{"firstName":"cbe942fc-832e-45e9-a838-0fae25c10a51","surname":"cbe942fc-832e-45e9-a838-0fae25c10a51"}
Generate a person in version 4.0.0
Sending a post to 127.0.0.1:9994/person. This is the response:
{"firstName":"ff6857ce-9c41-413a-863e-358e2719bf88","surname":"ff6857ce-9c41-413a-863e-358e2719bf88"}
DB เบเบฒเบเบเปเบฝเบเปเบเบ
เบเปเบญเบเบเปเบฒเบ v3
เบเบงเบเปเบฎเบปเบฒเบเบฝเบเปเบเปเปเบญเบปเบฒเบเปเบฅเปเบฒ last_name
เปเบฅเบฐเปเบเบตเปเบกเบเปเปเบเปเบฒเบเบฑเบเบเบตเปเบเบฒเบเบซเบฒเบเปเบ.
-- REMOVE THE COLUMN
ALTER TABLE PERSON DROP last_name;
-- ADD CONSTRAINTS
UPDATE PERSON SET surname='' WHERE surname IS NULL;
ALTER TABLE PERSON ALTER COLUMN surname VARCHAR NOT NULL;
เบเบฒเบเบเปเบฝเบเปเบเบเบฅเบฐเบซเบฑเบ
เบเปเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเบฅเบฐเบซเบฑเบ.
เบชเบฐเบซเบฅเบธเบ
เบเบงเบโเปเบฎเบปเบฒโเปเบเปโเบเปเบฒโเปเบเปโเบชเบปเบโเบเบปเบโเบชเปเบฒโเปเบฅเบฑเบโเบเบฒเบโเบเปเบฝเบโเปเบเบโเบเบทเปโเบเบฑเบโเบเบฑเบโเบเบทเบโเปเบโเบเปเบญเบโเบเบตเปโเบเปเปโเปเบเบปเปเบฒโเบเบฑเบโเปเบเปโเปเบเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเบเบฒเบโเบเปเบฒโเปเบเปโเบเบตเปโเปเบเบปเปเบฒโเบเบฑเบโเปเบเปโเบเบฑเบโเบซเบผเบฑเบโเบซเบผเบฒเบโ. เบเปเบฒเบเบฅเบธเปเบกเบเบตเปเปเบกเปเบเบเบปเบเบชเบฐเบซเบผเบธเบเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเปเบเปเบเบฐเบเบดเบเบฑเบ:
- เบเบฒเบเบเบณเปเบเปเปเบงเบตเบเบฑเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ
1.0.0
ัv1
schema เบเบฒเบเบเปเปเบกเบนเบ (เบเบทเปเบเบฑเบ =last_name
) - เบเบฒเบเบเบณเปเบเปเปเบงเบตเบเบฑเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ
2.0.0,
เบเบตเปเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเบขเบนเปเปเบlast_name
ะธsurname
. เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบญเปเบฒเบเบเบฒเบlast_name
. เบเบฒเบเบเปเปเบกเบนเบเปเบกเปเบเบขเบนเปเปเบเบชเบฐเบเบฑเบv2
เบเบฐเบเบญเบเบกเบตเบเบฑเบเปเบเบฑเปเบlast_name
, เปเบฅเบฐsurname. surname
เปเบกเปเบเบชเปเบฒเปเบเบปเบฒเบเบญเบ last_name
. (เปเบฒเบเปเบซเบ: เบเบฑเบเบเบตเปเบเปเบญเบเบเปเปเบกเบตเบเปเปเบเบณเบเบฑเบเบเบตเปเบเปเปเปเบกเปเบ null) - เบเบฒเบเบเบณเปเบเปเปเบงเบตเบเบฑเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ
3.0.0
, เปเบเบดเปเบเบเบฝเบเปเบเปเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเปเบsurname
เปเบฅเบฐเบญเปเบฒเบเบเบฒเบเบเบฒเบกเบชเบฐเบเบธเบ. เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเปเบกเบนเบ, เบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเบชเบธเบเบเปเบฒเบเปเบกเปเบเปเบเบตเบเบเบถเปเบlast_name
ะฒsurname
. เบเบฑเบเปเบเบฑเบเบเปเปเบเปเบฒเบเบฑเบ เบเปเป NULL เปเบญเบปเบฒโเบญเบญเบโเบเบฒเบlast_name
. เบเบฒเบเบเปเปเบกเบนเบเบเบฐเบเบธเบเบฑเบเบขเบนเปเปเบเบชเบฐเบเบฑเบv3
- เบเบฒเบเบเบณเปเบเปเปเบงเบตเบเบฑเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ
4.0.0
- เบเปเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเบฅเบฐเบซเบฑเบ. เบเบฒเบเบเบณเปเบเปเบเบฒเบเบเปเปเบกเบนเบv4
, เบเบตเปเปเบญเบปเบฒเบญเบญเบlast_name
. เปเบเบเบตเปเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเปเปเบเปเบฒเบเบฑเบเปเบเปเบเบตเปเบเบฒเบเบซเบฒเบเปเบเปเบเบเบฒเบเบเปเปเบกเบนเบ.
เปเบเบเบเบฐเบเบดเบเบฑเบเบเบฒเบกเบงเบดเบเบตเบเบฒเบเบเบตเป, เบเปเบฒเบเบชเบฐเปเบซเบกเบตเบชเบฒเบกเบฒเบเบเบฑเบเบเบทเบเบซเบเบถเปเบเบชเบฐเบเบฑเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบเปเบฒเบฅเบฒเบเบเบฒเบเบเปเปเบกเบนเบ / เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบปเปเบฒเบเบฑเบเปเบเป.
เบฅเบฐโเบซเบฑเบ
เบฅเบฐเบซเบฑเบเบเบฑเบเปเบปเบเบเบตเปเปเบเปเปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเปเบกเปเบเบกเบตเบขเบนเป
เปเบเบเบเบฒเบ
เบซเบผเบฑเบเบเบฒเบ cloning repository, เบเปเบฒเบเบเบฐเปเบซเบฑเบเปเบเบเบชเปเบฒเบเปเบเบเปเบเบตเบเปเปเปเบเบเบตเป.
โโโ boot-flyway-v1 - 1.0.0 version of the app with v1 of the schema
โโโ boot-flyway-v2 - 2.0.0 version of the app with v2 of the schema (backward-compatible - app can be rolled back)
โโโ boot-flyway-v2-bad - 2.0.0.BAD version of the app with v2bad of the schema (backward-incompatible - app cannot be rolled back)
โโโ boot-flyway-v3 - 3.0.0 version of the app with v3 of the schema (app can be rolled back)
โโโ boot-flyway-v4 - 4.0.0 version of the app with v4 of the schema (app can be rolled back)
เบญเบฑเบเบชเบญเบ
เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบญเบตเปเบเปเบเปเบชเบฐเบเบฃเบดเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเปเบงเปเปเบเบชเบฐเบเบฃเบดเบเบฅเบธเปเบกเบเบตเป, เปเบเบดเปเบเบเบฐเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบตเปเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบผเบฑเบ เปเบฅเบฐเปเบเบปเปเบฒเบเบฑเบเบเปเปเปเบเปเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบ.
เปเบเบทเปเบญโเปเบเบดเปเบ เบเปเบฅเบฐเบเบตเบเบตเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเบเบตเปเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบผเบฑเบ, เปเบฅเปเบ:
./scripts/scenario_backward_compatible.sh
เปเบฅเบฐเปเบเบทเปเบญเปเบเบดเปเบ เบเปโเบฅเบฐโเบเบตโเบเบตเปโเบกเบตโเบเบฒเบโเบเปเบฝเบโเปเบเบโเบเบตเปโเบเปเปโเปเบเบปเปเบฒโเบเบฑเบโเบเบฑเบโเบซเบผเบฑเบโ, เปเบฅเปเบ:
./scripts/scenario_backward_incompatible.sh
Spring Boot เบเบปเบงเบขเปเบฒเบ Flyway
เบเบปเบงเบขเปเบฒเบเบเบฑเบเบซเบกเบปเบเปเบกเปเบเปเบญเบปเบฒเบกเบฒเบเบฒเบ Spring Boot Sample Flyway.
เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเปเบงเบฅเบฒเปเบเบดเปเบ http://localhost:8080/flyway
, เบกเบตเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเบชเบฐเบเบดเบ.
เบเบปเบงเบขเปเบฒเบเบเบตเปเบเบฑเบเบเบฐเบเบญเบเบกเบต H2 console (at http://localhost:8080/h2-console
) เบเบฑเปเบเบเบฑเปเบเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบฒเบเบเปเปเบกเบนเบ ( URL jdbc เปเบฅเบตเปเบกเบเบปเปเบเปเบกเปเบ jdbc:h2:mem:testdb
).
เบเบญเบเบเบฒเบเบเบฑเปเบ
เบฎเบนเบเปเบเบเบเบฒเบเบเบฐเบเบดเบชเบฑเบเบเบญเบเบเบฒเบเบเปเปเบกเบนเบ เบเบฒเบเบเบฑเบเบชเบปเปเบเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบ
เบญเปเบฒเบเบเบปเบเบเบงเบฒเบกเบญเบทเปเบเปเปเบ blog เบเบญเบเบเบงเบเปเบฎเบปเบฒ:
Kubernetes: เปเบเบฑเบเบซเบเบฑเบเบกเบฑเบเบเบถเปเบเบชเบณเบเบฑเบเบซเบผเบฒเบเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเบฑเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบญเบเบฅเบฐเบเบปเบ? เบเปเป Tekton - Kubernetes-native pipelines เบเบฒเบเบเปเปเบชเปเบฒเบเปเบกเบเบนเบเปเบเบเปเบเบทเปเบญเบเปเบซเบงเบชเปเบฒเบฅเบฑเบ Nginx เบเบฒเบเปเบเบฐเบเปเบฒเบเบฒเบเบญเบฐเบเบธเบเบฒเบ Kubernetes เบเบญเบเบเบปเบเบชเบธเบ Hashicorp เบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบฒเบ ClickHouse เปเบเบเบเปเปเบกเบตเบเบฒเบเบญเบฐเบเบธเบเบฒเบเปเบเบซเบฒ ClickHouse เบเปเบงเบเบเบฒเบเบญเบฐเบเบธเบเบฒเบเบเปเบฒเปเบเบชเบนเปเบซเบเบฑเบ? เบเบฒเบเบเบณเปเบเปเบชเบตเบเปเบฒ-เบชเบตเบเบฝเบงเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบฒเบเบฎเบฝเบ spring เบเบฑเบเปเบเบตเบเปเบงเบตเปเบงเบฑเบ Nginx
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com