
āĻāĻ āύāĻŋāĻŦāύā§āϧāĻāĻŋ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤāĻāĻžāĻŦā§ āĻŦā§āϝāĻžāĻā§āϝāĻž āĻāϰ⧠āϝ⧠āĻāĻŋāĻāĻžāĻŦā§ āϏā§āĻĨāĻžāĻĒāύāĻžāϝāĻŧ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻžāĻŽāĻā§āĻāϏā§āϝā§āϰ āϏāĻŽāϏā§āϝāĻžāĻā§āϞāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻĒā§āϰāϏā§āϤā§āϤāĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ āĻŽā§āϤāĻžāϝāĻŧā§āύ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§āύ āϤāĻŦā§ āĻāĻĒāύāĻžāϰ āĻāϤā§āĻĒāĻžāĻĻāύ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋāϰ āĻā§ āĻāĻāϤ⧠āĻĒāĻžāϰ⧠āϤāĻž āĻāĻŽāϰāĻž āĻāĻĒāύāĻžāĻā§ āĻŦāϞāĻŦ⧎ āϤāĻžāϰāĻĒāϰ⧠āĻāĻŽāϰāĻž āĻļā§āύā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ (āĻĒā§āϰāĻžāϝāĻŧ. āϞā§āύ: āĻāϰāĻ - āĻļā§āύā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ) āĻāĻŽāĻžāĻĻā§āϰ āĻā§āϰāĻŋāϝāĻŧāĻžāĻāϞāĻžāĻĒā§āϰ āĻĢāϞāĻžāĻĢāϞ āĻšāĻŦā§ āĻĒāĻŋāĻāύā§āϰ-āĻ āϏāĻā§āĻāϤāĻŋāĻĒā§āϰā§āĻŖ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻāĻŋ āĻĒāĻŋāĻāύā§āϰ-āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖ āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻžāĨ¤
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āύāĻŋāĻŦāύā§āϧ āĻĨā§āĻā§ āĻā§āĻĄ āĻāĻĻāĻžāĻšāϰāĻŖ āĻŦā§āĻāϤ⧠āĻāĻžāύ, āĻāĻĒāύāĻŋ āϤāĻžāĻĻā§āϰ āĻā§āĻāĻā§ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύ .
āĻā§āĻŽāĻŋāĻāĻž
āĻļā§āύā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ āϏā§āĻĨāĻžāĻĒāύāĻž
āĻāĻŋ āĻāĻāĻāĻŋ āϰāĻšāϏā§āϝāĻŽāϝāĻŧ āĻļā§āύā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ āϏā§āĻĨāĻžāĻĒāύāĻž? āĻāĻĒāύāĻŋ āĻāĻāĻŋ āĻŦāϞāϤ⧠āĻĒāĻžāϰā§āύ āϝāĻāύ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋ āĻāĻŽāύāĻāĻžāĻŦā§ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻž āĻšāϝāĻŧ āϝāĻžāϤ⧠āĻāĻĒāύāĻŋ āϏāĻĢāϞāĻāĻžāĻŦā§ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋāϰ āĻāĻāĻāĻŋ āύāϤā§āύ āϏāĻāϏā§āĻāϰāĻŖ āĻāϤā§āĻĒāĻžāĻĻāύ⧠āĻĒā§āϰāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āϝāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻŋāϰ āĻ āύā§āĻĒāϞāĻŦā§āϧāϤāĻž āϞāĻā§āώā§āϝ āĻāϰā§āύ āύāĻžāĨ¤ āĻāĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻŦāĻ āĻā§āĻŽā§āĻĒāĻžāύāĻŋāϰ āĻĻā§āώā§āĻāĻŋāĻā§āĻŖ āĻĨā§āĻā§, āĻāĻāĻŋ āϏāϰā§āĻŦā§āϤā§āϤāĻŽ āϏāĻŽā§āĻāĻžāĻŦā§āϝ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĻā§āĻļā§āϝ āĻāĻžāϰāĻŖ āĻāĻāĻŋ āύāϤā§āύ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻā§āϞāĻŋ āĻĒā§āϰāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻāĻŦāĻ āĻŦāĻžāĻāĻā§āϞāĻŋāĻā§ āĻŦāĻŋāĻā§āύ āĻāĻžāĻĄāĻŧāĻžāĻ āϏāĻāĻļā§āϧāύ āĻāϰāĻžāϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧ⧎
āĻāĻ āĻ āϰā§āĻāύ āĻāĻŋāĻāĻžāĻŦā§? āĻŦāĻŋāĻāĻŋāύā§āύ āĻāĻĒāĻžāϝāĻŧ āĻāĻā§, āĻāĻāĻžāύ⧠āϤāĻžāĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ:
- āĻāĻĒāύāĻžāϰ āĻĒāϰāĻŋāώā§āĻŦāĻžāϰ āϏāĻāϏā§āĻāϰāĻŖ āύāĻ 1 āϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āύ
- āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽāĻžāĻāĻā§āϰā§āĻļāύ āϏāĻā§āĻāĻžāϞāύ
- āϏāĻāϏā§āĻāϰāĻŖ #2 āĻāϰ āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ⧠āĻāĻĒāύāĻžāϰ āĻĒāϰāĻŋāώā§āĻŦāĻžāϰ āϏāĻāϏā§āĻāϰāĻŖ #1 āϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āύ
- āϝāϤ āϤāĻžāĻĄāĻŧāĻžāϤāĻžāĻĄāĻŧāĻŋ āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ āϝ⧠āϏāĻāϏā§āĻāϰāĻŖ āύāĻ 2 āĻāĻāĻŋāϰ āĻŽāϤ⧠āĻāĻžāĻ āĻāϰā§, āϏāĻāϏā§āĻāϰāĻŖ āύāĻ 1 āϏāϰāĻŋāϝāĻŧā§ āĻĻāĻŋāύ
- āϏāĻŽā§āĻĒāύā§āύ!
āϏāĻšāĻ, āϤāĻžāĻ āύāĻž? āĻĻā§āϰā§āĻāĻžāĻā§āϝāĻŦāĻļāϤ, āĻāĻāĻŋ āĻāϤ āϏāĻšāĻ āύāϝāĻŧ, āĻāĻŦāĻ āĻāĻŽāϰāĻž āĻĒāϰ⧠āĻāĻāĻŋ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤāĻāĻžāĻŦā§ āĻĻā§āĻāĻŦāĨ¤ āĻāĻāύ āĻāϰā§āĻāĻāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āϝāĻžāĻ - āύā§āϞ āϏāĻŦā§āĻ āϏā§āĻĨāĻžāĻĒāύāĻžāĨ¤
āĻāĻĒāύāĻŋ āĻāĻŋ āĻāĻāύāĻ āĻļā§āύā§āĻā§āύ? ? āĻā§āϞāĻžāĻāĻĄ āĻĢāĻžāĻāύā§āĻĄā§āϰāĻŋ āĻāĻāĻŋ āĻ āϤā§āϝāύā§āϤ āϏāĻšāĻ āĻāϰ⧠āϤā§āϞā§āĨ¤ āĻļā§āϧ⧠āϤāĻžāĻāĻžāύ , āϝā§āĻāĻžāύ⧠āĻāĻŽāϰāĻž āĻāϰāĻ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤāĻāĻžāĻŦā§ āĻāĻāĻŋ āĻŦāϰā§āĻŖāύāĻž āĻāϰāĻŋāĨ¤ āϏāĻāĻā§āώā§āĻĒā§ āϏāĻāĻā§āώāĻŋāĻĒā§āϤ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻāϏā§āύ āĻāĻŽāϰāĻž āĻāĻĒāύāĻžāĻā§ āĻŽāύ⧠āĻāϰāĻŋāϝāĻŧā§ āĻĻāĻŋāĻ āĻāĻŋāĻāĻžāĻŦā§ āύā§āϞ āϏāĻŦā§āĻ āϏā§āĻĨāĻžāĻĒāύāĻž āĻāϰāϤ⧠āĻšāϝāĻŧ:
- āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āϝ⧠āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āĻā§āĻĄā§āϰ āĻĻā§āĻāĻŋ āĻāĻĒāĻŋ ("āύā§āϞ" āĻāĻŦāĻ "āϏāĻŦā§āĻ") āĻāĻžāĻ āĻāϰāĻā§;
- āύā§āϞ āĻĒāϰāĻŋāĻŦā§āĻļā§ āϏāĻŽāϏā§āϤ āĻā§āϰāĻžāĻĢāĻŋāĻāĻā§ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰā§āύ, āϝā§āĻŽāύ āϝāĻžāϤ⧠āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āĻāĻāĻāϰāĻāϞ āϏā§āĻāĻžāύ⧠āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰā§;
- āĻāĻāĻāĻŋ āϏāĻŦā§āĻ āĻĒāϰāĻŋāĻŦā§āĻļā§ āϏāĻŽāϏā§āϤ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āϏā§āĻĨāĻžāĻĒāύ āĻāĻŦāĻ āĻĒāϰā§āĻā§āώāĻž āĻāϰā§āύ;
- āĻāĻāĻāϰāĻāϞāĻā§ āύā§āϞ āĻĨā§āĻā§ āϏāĻŦā§āĻ āĻĒāϰāĻŋāĻŦā§āĻļā§ āϏā§āϝā§āĻāĻ āĻāϰā§āύ
āĻŦā§āϞ⧠āĻā§āϰāĻŋāύ āĻĄāĻŋāĻĒā§āϞā§āϝāĻŧāĻŽā§āύā§āĻ āĻšāϞ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻĒāύā§āĻĨāĻž āϝāĻž āĻāĻĒāύāĻžāĻā§ āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āĻŦā§āϰā§āĻāĻŋāĻ āύāĻŋāϝāĻŧā§ āĻāĻŋāύā§āϤāĻž āύāĻž āĻāϰ⧠āϏāĻšāĻā§āĻ āύāϤā§āύ āĻĢāĻŋāĻāĻžāϰ āĻĒā§āϰāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻŋ āĻāĻ āĻāĻžāϰāĻŖā§ āϝ⧠āĻāĻŋāĻā§ āĻāĻāϞā§āĻ, āĻāĻĒāύāĻŋ āϏāĻšāĻā§ "āĻāĻāĻāĻŋ āϏā§āĻāĻ āĻĢā§āϞāĻŋāĻ āĻāϰā§" āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āĻĒāϰāĻŋāĻŦā§āĻļā§ āĻĢāĻŋāϰ⧠āϝā§āϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻĒāϰā§āϰ āϏāĻŽāϏā§āϤāĻāĻŋ āĻĒāĻĄāĻŧāĻžāϰ āĻĒāϰā§, āĻāĻĒāύāĻŋ āĻĒā§āϰāĻļā§āύ āĻāĻŋāĻā§āĻāĻžāϏāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ: āύā§āϞ āϏāĻŦā§āĻ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āϏāĻžāĻĨā§ āĻļā§āύā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽā§āϰ āĻā§ āϏāĻŽā§āĻĒāϰā§āĻ āĻāĻā§?
āĻ āĻŋāĻ āĻāĻā§, āϤāĻžāĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻ āύā§āĻ āĻŽāĻŋāϞ āϰāϝāĻŧā§āĻā§, āϝā§āĻšā§āϤ⧠āĻāĻāĻ āĻĒāϰāĻŋāĻŦā§āĻļā§āϰ āĻĻā§āĻāĻŋ āĻ āύā§āϞāĻŋāĻĒāĻŋ āĻŦāĻāĻžāϝāĻŧ āϰāĻžāĻāϤ⧠āϤāĻžāĻĻā§āϰ āĻŦāĻāĻžāϝāĻŧ āϰāĻžāĻāĻžāϰ āĻāύā§āϝ āĻĻā§āĻŦāĻŋāĻā§āĻŖ āĻĒā§āϰāĻā§āώā§āĻāĻž āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤ āĻ āĻāĻžāϰāĻŖā§ āĻāϝāĻŧā§āĻāĻāĻŋ āĻĻāϞ āĻĻāĻžāĻŦāĻŋ āĻāϰā§āĻā§ , āĻāĻ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻāĻāĻāĻŋ āĻŦā§āĻāĻŋāϤā§āϰ āĻ āύā§āϏāϰāĻŖ āĻāϰā§āύ:
āĻāϰā§āĻāĻāĻŋ āĻŦāĻŋāĻāϞā§āĻĒ āĻšāϞ āĻāĻāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž, āĻāϝāĻŧā§āĻŦ āĻāĻŦāĻ āĻĄā§āĻŽā§āύ āϏā§āϤāϰāĻā§āϞāĻŋāϰ āĻāύā§āϝ āύā§āϞ-āϏāĻŦā§āĻ āϏā§āĻāĻ āϤā§āϰāĻŋ āĻāϰāĻžāĨ¤ āĻāĻ āĻĒāĻĻā§āϧāϤāĻŋāϤā§, āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒā§āϰāĻžāϝāĻŧāĻ āĻāĻāĻāĻŋ āϏāĻŽāϏā§āϝāĻž āĻšāϤ⧠āĻĒāĻžāϰā§, āĻŦāĻŋāĻļā§āώ āĻāϰ⧠āϝāĻāύ āĻāĻĒāύāĻžāĻā§ āϏāĻĢā§āĻāĻāϝāĻŧā§āϝāĻžāϰā§āϰ āĻāĻāĻāĻŋ āύāϤā§āύ āϏāĻāϏā§āĻāϰāĻŖ āϏāĻŽāϰā§āĻĨāύ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāϰ āϏā§āĻāĻŋāĻŽāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
āĻāĻŦāĻ āĻāĻāĻžāύ⧠āĻāĻŽāϰāĻž āĻāĻ āύāĻŋāĻŦāύā§āϧ⧠āĻĒā§āϰāϧāĻžāύ āϏāĻŽāϏā§āϝāĻž āĻāϏāĻž. āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ. āĻāϏā§āύ āĻāĻ āĻŦāĻžāĻā§āϝāĻžāĻāĻļāĻāĻŋ āĻāϰā§āĻāĻŦāĻžāϰ āĻĻā§āĻā§ āύā§āĻāϝāĻŧāĻž āϝāĻžāĻāĨ¤
āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽāĻžāĻāĻā§āϰā§āĻļāύ āϏāĻā§āĻāĻžāϞāύāĨ¤
āĻāĻāύ āĻāĻĒāύāĻŋ āύāĻŋāĻā§āĻā§ āĻĒā§āϰāĻļā§āύ āĻāĻŋāĻā§āĻāĻžāϏāĻž āĻāϰāϤ⧠āĻšāĻŦā§ - āϝāĻĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻĒāĻŋāĻāĻŋāϝāĻŧā§ āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖ āύāĻž āĻšāϝāĻŧ? āĻāĻŽāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ āĻĒā§āϰāĻĨāĻŽ āϏāĻāϏā§āĻāϰāĻŖāĻāĻŋ āĻā§āĻā§ āϝāĻžāĻŦā§ āύāĻž? āĻāϏāϞā§, āĻ āĻŋāĻ āĻāĻāĻžāĻ āĻšāĻŦā§...
āϏā§āϤāϰāĻžāĻ, āĻāĻŽāύāĻāĻŋ āĻļā§āύā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ / āύā§āϞ āϏāĻŦā§āĻ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻŦāĻŋāĻļāĻžāϞ āϏā§āĻŦāĻŋāϧāĻž āĻĨāĻžāĻāĻž āϏāϤā§āϤā§āĻŦā§āĻ, āĻā§āĻŽā§āĻĒāĻžāύāĻŋāĻā§āϞāĻŋ āϤāĻžāĻĻā§āϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏā§āĻĨāĻžāĻĒāύā§āϰ āĻāύā§āϝ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āύāĻŋāϰāĻžāĻĒāĻĻ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž āĻ āύā§āϏāϰāĻŖ āĻāϰā§:
- āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋāϰ āĻāĻāĻāĻŋ āύāϤā§āύ āϏāĻāϏā§āĻāϰāĻŖ āϏāĻš āĻāĻāĻāĻŋ āĻĒā§āϝāĻžāĻā§āĻ āĻĒā§āϰāϏā§āϤā§āϤ āĻāϰā§āύ
- āĻāĻāĻāĻŋ āĻāϞāĻŽāĻžāύ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻŦāύā§āϧ āĻāϰā§āύ
- āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽāĻžāĻāĻā§āϰā§āĻ āĻāϰāϤ⧠āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻžāϞāĻžāύ
- āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋāϰ āĻāĻāĻāĻŋ āύāϤā§āύ āϏāĻāϏā§āĻāϰāĻŖ āϏā§āĻĨāĻžāĻĒāύ āĻāĻŦāĻ āĻāĻžāϞ⧠āĻāϰā§āύ
āĻāĻ āύāĻŋāĻŦāύā§āϧā§, āĻāĻŽāϰāĻž āĻļā§āύā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āϏā§āĻŦāĻŋāϧāĻž āύāĻŋāϤ⧠āĻāĻĒāύāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻĒāύāĻžāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻŦāĻ āĻā§āĻĄā§āϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϤāĻž āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻāĻžāύāĻžāĻŦāĨ¤
āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻŽāϏā§āϝāĻž
āĻāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āĻāĻāĻāĻŋ āϏā§āĻā§āĻāϞā§āϏ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĨāĻžāĻā§ āϝāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻā§āύ⧠āĻĄā§āĻāĻž āϏāĻā§āĻāϝāĻŧ āĻāϰ⧠āύāĻž, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻŋ āĻāĻāύāĻ āĻļā§āύā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ āϏā§āĻĨāĻžāĻĒāύāĻž āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻĻā§āϰā§āĻāĻžāĻā§āϝāĻŦāĻļāϤ, āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āϏāĻĢā§āĻāĻāϝāĻŧā§āϝāĻžāϰāĻā§ āĻā§āĻĨāĻžāĻ āĻĄā§āĻāĻž āϏāĻāϰāĻā§āώāĻŖ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻ āĻāĻžāϰāĻŖā§ āϏāĻžāϰā§āĻāĻŋāĻā§ āĻā§āύ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāϰ āĻāĻā§ āĻāĻĒāύāĻžāϰ āĻĻā§āĻŦāĻžāϰ āĻāĻŋāύā§āϤāĻž āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤ āĻā§āĻāĻžāĻŦā§ āϏā§āĻāĻŋāĻŽāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻšāϝāĻŧ āϤāĻžāϰ āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāϰāĻŖā§ āϝāĻžāĻāϝāĻŧāĻžāϰ āĻāĻā§ āϝāĻžāϤ⧠āύā§-āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ āϏā§āĻĨāĻžāĻĒāύāĻž āϏāĻŽā§āĻāĻŦ āĻšāϝāĻŧ, āĻāϏā§āύ āĻĒā§āϰāĻĨāĻŽā§ āϏāĻāϏā§āĻāϰāĻŖ āϏā§āĻāĻŋāĻŽāĻžāϰ āĻāĻĒāϰ āĻĢā§āĻāĻžāϏ āĻāϰāĻŋāĨ¤
āϏāĻāϏā§āĻāϰāĻŖ āϏā§āĻāĻŋāĻŽ
āĻāĻ āύāĻŋāĻŦāύā§āϧ⧠āĻāĻŽāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦ āĻāĻāĻāĻŋ āϏāĻāϏā§āĻāϰāĻŖ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻā§āϞ āĻšāĻŋāϏāĻžāĻŦā§ (āĻĒā§āϰāĻžāϝāĻŧ. āĻ
āύā§āĻŦāĻžāĻĻ: āĻāĻŽāϰāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽāĻžāĻāĻā§āϰā§āĻļāύ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻĨāĻž āĻŦāϞāĻāĻŋ) āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻāĻāĻžāĻŦā§āĻ, āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āϏā§āĻĒā§āϰāĻŋāĻ āĻŦā§āĻ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻ āϞāĻŋāĻāĻŦ āϝāĻžāϤ⧠āĻ
āύā§āϤāϰā§āύāĻŋāϰā§āĻŽāĻŋāϤ āĻĢā§āϞāĻžāĻāĻāϝāĻŧā§ āϏāĻŽāϰā§āĻĨāύ āϰāϝāĻŧā§āĻā§ āĻāĻŦāĻ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĒā§āϰāϏāĻā§āĻ āϏā§āĻ āĻāĻĒ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏā§āĻāĻŋāĻŽāĻž āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰāĻŦā§āĨ¤ āĻĢā§āϞāĻžāĻāĻāϝāĻŧā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒ āĻĢā§āϞā§āĻĄāĻžāϰ⧠āĻŽāĻžāĻāĻā§āϰā§āĻļāύ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ (āĻĄāĻŋāĻĢāϞā§āĻāϰā§āĻĒā§ 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 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āϏā§āĻĒā§āϰāĻŋāĻ āĻŦā§āĻ āĻāĻŦāĻ āĻĢā§āϞāĻžāĻāĻāϝāĻŧā§ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰāĻ āϤāĻĨā§āϝā§āϰ āĻāύā§āϝ, āĻā§āĻ āĻāĻāĻ āĻāϰā§āύ .
āϏā§āĻĒā§āϰāĻŋāĻ āĻŦā§āĻā§āϰ āϏāĻžāĻĨā§ āĻāĻāĻāĻŋ āĻā§āϏ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āĻāĻĒāύāĻŋ 2āĻāĻŋ āĻŦāĻĄāĻŧ āϏā§āĻŦāĻŋāϧāĻž āĻĒāĻžāĻŦā§āύ:
- āĻāĻĒāύāĻŋ āĻā§āĻĄ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻĨā§āĻā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻĒā§āĻĨāĻ
- āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āϰā§āϞāĻāĻāĻā§āϰ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§ āĻĄā§āĻāĻžāĻŦā§āϏ āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰ āĻāĻā§, āϝā§āĻŽāύ āĻāĻĒāύāĻžāϰ āϏā§āĻĨāĻžāĻĒāύ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž āϏāϰāϞā§āĻā§āϤ āĻšāϝāĻŧ
āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻŽāϏā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻž
āύāĻŋāĻŦāύā§āϧā§āϰ āĻĒāϰāĻŦāϰā§āϤ⧠āĻŦāĻŋāĻāĻžāĻā§, āĻāĻŽāϰāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻĻā§āĻāĻŋ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻĻāĻŋāĻā§ āύāĻāϰ āĻĻā§āĻŦāĨ¤
- āĻĒāĻļā§āĻāĻžāĻĻāĻāĻžāĻŽā§ āĻ āϏāĻā§āĻāϤāĻŋ
- āĻ āύāĻ āĻā§āϰāϏāϰ āĻāĻĒāϝā§āĻāĻŋāϤāĻž
āĻĒā§āϰāĻĨāĻŽāĻāĻŋ āĻāĻāĻāĻŋ āϏāϤāϰā§āĻāϤāĻž āĻšāĻŋāϏāĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāĻŋāϤ āĻšāĻŦā§ āϝ⧠āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻĒā§āϰāϏā§āϤā§āϤāĻŋ āĻāĻžāĻĄāĻŧāĻž āĻāĻĒāύāĻžāϰ āĻļā§āύā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ āϏā§āĻĨāĻžāĻĒāύāĻž āϏāĻā§āĻāĻžāϞāύ āĻāϰāĻž āĻāĻāĻŋāϤ āύāϝāĻŧ... āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻĒāύāĻŋ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ āĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻāĻāĻŋ āϏā§āĻĨāĻžāĻĒāύāĻž āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āĻāĻāĻ āϏāĻžāĻĨā§ āĻĒāĻļā§āĻāĻžāĻĻāĻŽā§āĻā§ āϏāĻžāĻŽāĻā§āĻāϏā§āϝ āĻŦāĻāĻžāϝāĻŧ āϰāĻžāĻāϤ⧠āĻĒāĻžāϰā§āύ āϤāĻžāϰ āĻāĻāĻāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻĒā§āϰāϏā§āϤāĻžāĻŦ āĻāϰā§ā§ˇ
āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰāĻāϞā§āĻĒā§ āĻāĻŽāϰāĻž āĻāĻžāĻ āĻāϰāĻŦ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϏā§āĻĒā§āϰāĻŋāĻ āĻŦā§āĻ āĻĢā§āϞāĻžāĻāĻāϝāĻŧā§ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϝāĻž āϰāϝāĻŧā§āĻā§ Person Ņ first_name и last_name āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠(āĻĒā§āϰāĻžāϝāĻŧ. āĻ
āύā§āĻŦāĻžāĻĻ: Person āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāϞ āĻāĻŦāĻ āĻirst_name и last_name - āĻāĻ āĻšāϞ āĻāĻāĻŋāϰ āĻā§āώā§āϤā§āϰ) āĻāĻŽāϰāĻž āύāĻžāĻŽ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻāĻžāĻ last_name в surname.
āĻ āύā§āĻŽāĻžāύ
āĻāĻŽāϰāĻž āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻāĻžāύāĻžāϰ āĻāĻā§, āĻāĻŽāĻžāĻĻā§āϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻŽāĻžāĻĻā§āϰ āĻāϝāĻŧā§āĻāĻāĻŋ āĻ āύā§āĻŽāĻžāύ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻŽā§āϞ āĻĢāϞāĻžāĻĢāϞ āϝāĻž āĻāĻŽāϰāĻž āĻ āϰā§āĻāύ āĻāϰāϤ⧠āĻāĻžāĻ āϤāĻž āĻšāĻŦā§ āĻāĻāĻāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āϏāĻšāĻ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĨ¤
āύā§āĻ. āĻŦāĻŋāĻāύā§āϏ āĻĒā§āϰā§-āĻāĻŋāĻĒāĨ¤ āϏāĻšāĻā§āĻāϰāĻŖ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĻā§āϞāĻŋ āĻāĻĒāύāĻžāĻā§ āϏāĻŽāϰā§āĻĨāύ⧠āĻĒā§āϰāĻā§āϰ āĻ āϰā§āĻĨ āϏāĻžāĻļā§āϰāϝāĻŧ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠(āĻāĻĒāύāĻžāϰ āĻā§āĻŽā§āĻĒāĻžāύāĻŋāϰ āĻāύā§āϝ āĻāĻĒāύāĻŋ āϝāϤ āĻŦā§āĻļāĻŋ āϞā§āĻ āĻāĻžāĻ āĻāϰāĻŦā§āύ, āĻāĻĒāύāĻŋ āϤāϤ āĻŦā§āĻļāĻŋ āĻ āϰā§āĻĨ āϏāĻā§āĻāϝāĻŧ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ)!
āĻĄāĻžāĻāĻžāĻŦā§āϏ āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰāĻžāϰ āĻĻāϰāĻāĻžāϰ āύā§āĻ
āĻāĻāĻŋ āϏā§āĻĨāĻžāĻĒāύāĻž āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĻā§ āϏāĻšāĻ āĻāϰ⧠(āĻāĻŋāĻā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϰā§āϞāĻŦā§āϝāĻžāĻ āĻĒā§āϰāĻžāϝāĻŧ āĻ āϏāĻŽā§āĻāĻŦ, āϝā§āĻŽāύ āĻŽā§āĻāĻž āϰā§āϞāĻŦā§āϝāĻžāĻ)āĨ¤ āĻāĻŽāϰāĻž āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϰā§āϞ āĻŦā§āϝāĻžāĻ āĻāϰāϤ⧠āĻĒāĻāύā§āĻĻ āĻāϰāĻŋāĨ¤ āĻāĻāĻāĻžāĻŦā§, āĻāĻŽāύāĻāĻŋ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻŦāĻŋāĻāĻŋāύā§āύ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĨāĻžāĻā§ (āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, SQL āĻāĻŦāĻ NoSQL), āĻāĻĒāύāĻžāϰ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ āĻāĻāĻ āĻĻā§āĻāĻžāĻŦā§āĨ¤
āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāĻžāύāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āϏāĻāϏā§āĻāϰāĻŖ āĻĢāĻŋāϰāĻŋāϝāĻŧā§ āĻāύāĻžāϰ āĻāύā§āϝ āϏāϰā§āĻŦāĻĻāĻž āϏāĻŽā§āĻāĻŦ āĻšāϤ⧠āĻšāĻŦā§ (āĻāϰ āĻāĻŋāĻā§ āύāϝāĻŧ)
āϰā§āϞāĻŦā§āϝāĻžāĻ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϞā§āĻ āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤ āϝāĻĻāĻŋ āĻŦāϰā§āϤāĻŽāĻžāύ āϏāĻāϏā§āĻāϰāĻŖā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ āĻĨāĻžāĻā§ āϝāĻž āϏāĻšāĻā§ āĻ āĻŋāĻ āĻāϰāĻž āϝāĻžāϝāĻŧ āύāĻž, āϤāĻžāĻšāϞ⧠āĻāĻŽāĻžāĻĻā§āϰ āϏāϰā§āĻŦāĻļā§āώ āĻāĻžāϰā§āϝāĻāϰ⧠āϏāĻāϏā§āĻāϰāĻŖā§ āĻĢāĻŋāϰ⧠āϝā§āϤ⧠āϏāĻā§āώāĻŽ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤāĨ¤ āĻāĻŽāϰāĻž āϧāϰ⧠āύāĻŋāĻ āϝ⧠āĻāĻ āϏāϰā§āĻŦāĻļā§āώ āĻāĻžāϰā§āϝāĻāϰ⧠āϏāĻāϏā§āĻāϰāĻŖāĻāĻŋ āĻāĻā§āϰāĻāĻŋāĨ¤ āĻāĻāĻžāϧāĻŋāĻ āϰā§āϞāĻāĻāĻā§āϰ āĻāύā§āϝ āĻā§āĻĄ āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻžāĻŽāĻā§āĻāϏā§āϝ āĻŦāĻāĻžāϝāĻŧ āϰāĻžāĻāĻž āĻ āϤā§āϝāύā§āϤ āĻāĻ āĻŋāύ āĻāĻŦāĻ āĻŦā§āϝāϝāĻŧāĻŦāĻšā§āϞ āĻšāĻŦā§āĨ¤
āύā§āĻ. āĻŦā§āĻšāϤā§āϤāϰ āĻĒāĻžāĻ āϝā§āĻā§āϝāϤāĻžāϰ āĻāύā§āϝ, āĻāĻ āύāĻŋāĻŦāύā§āϧ⧠āĻāĻŽāϰāĻž āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋāϰ āĻĒā§āϰāϧāĻžāύ āϏāĻāϏā§āĻāϰāĻŖ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻŦāĨ¤
āϧāĻžāĻĒ 1: āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻ āĻŦāϏā§āĻĨāĻž
āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻāϏā§āĻāϰāĻŖ: 1.0.0
āĻĄāĻŋāĻŦāĻŋ āϏāĻāϏā§āĻāϰāĻŖ: v1
āĻŽāύā§āϤāĻŦā§āϝ
āĻāĻāĻŋ āĻšāĻŦā§ āĻāĻŦā§āĻĻāύā§āϰ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻ āĻŦāϏā§āĻĨāĻžāĨ¤
āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ
āĻĄāĻŋāĻŦāĻŋ āϧāĻžāϰāĻŖ āĻāϰ⧠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
āĻĄāĻŋāĻŦāĻŋ āϏāĻāϏā§āĻāϰāĻŖ: v2bad
āĻŽāύā§āϤāĻŦā§āϝ
āĻŦāϰā§āϤāĻŽāĻžāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻāĻ āϏāĻŽāϝāĻŧā§ āĻĻā§āĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ (āĻĒā§āϰāĻžāύ⧠āĻāĻŦāĻ āύāϤā§āύ) āĻāĻžāϞāĻžāύā§āϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧ āύāĻžāĨ¤ āϏā§āϤāϰāĻžāĻ, āĻļā§āύā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ āϏā§āĻĨāĻžāĻĒāύāĻž āĻ āϰā§āĻāύ āĻāϰāĻž āĻāĻ āĻŋāύ āĻšāĻŦā§ (āϝāĻĻāĻŋ āĻ āύā§āĻŽāĻžāύāĻā§āϞāĻŋ āĻŦāĻŋāĻŦā§āĻāύāĻžāϝāĻŧ āύā§āĻāϝāĻŧāĻž āĻšāϝāĻŧ āϤāĻŦā§ āĻāĻāĻŋ āĻāϏāϞ⧠āĻ āϏāĻŽā§āĻāĻŦ)āĨ¤
A/B āĻĒāϰā§āĻā§āώāĻž
āĻŦāϰā§āϤāĻŽāĻžāύ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻāϏā§āĻāϰāĻŖ āϰāϝāĻŧā§āĻā§ 1.0.0, āĻā§āĻĒāĻžāĻĻāύ, āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ 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 āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻžāϰ āĻĒāϰ⧠(āĻĒā§āϰāĻžāϝāĻŧ. āĻĒā§āϰāϤāĻŋ.: āϞā§āĻāĻ āϏāĻŽā§āĻāĻŦāϤ āĻāĻāĻžāύ⧠A/B āĻĒāϰā§āĻā§āώāĻž āĻŦā§āĻāĻžāϤ⧠āĻā§āϝāĻŧā§āĻā§āύ) āĻāĻŽāϰāĻž āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύāĻŋāϝāĻŧā§āĻāĻŋ āϝ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋāĻā§ āϏāĻāϏā§āĻāϰāĻŖā§ āĻĢāĻŋāϰāĻŋāϝāĻŧā§ āĻāύāϤ⧠āĻšāĻŦā§ 1.0.0. āϧāϰāĻž āϝāĻžāĻ āĻāĻŽāϰāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰāϤ⧠āĻāĻžāĻ āύāĻžāĨ¤
āϧāĻžāĻĒ:
- āĻāĻŽāϰāĻž āϏāĻāϏā§āĻāϰāĻŖ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻĻāĻžāĻšāϰāĻŖ āĻŦāύā§āϧ
2.0.0.BAD - āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻāύāĻ āĻāĻā§
v2bad - āϏāĻāϏā§āĻāϰāĻŖ āĻĨā§āĻā§
1.0.0āĻāĻāĻž āĻāĻŋ āĻŦā§āĻāϤ⧠āĻĒāĻžāϰ⧠āύāĻžsurname, āĻāĻŽāϰāĻž āϤā§āϰā§āĻāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦ - āĻāĻžāĻšāĻžāύā§āύāĻžāĻŽ āĻā§āĻā§ āĻā§āĻā§, āĻāĻŽāϰāĻž āĻāϰ āĻĢāĻŋāϰ⧠āϝā§āϤ⧠āĻĒāĻžāϰāĻŋ āύāĻž
āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻā§āĻā§āύ, āϝāĻĻāĻŋ āĻāĻŽāϰāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻŦāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ⧠āĻ āϏāĻā§āĻāϤāĻŋāĻĒā§āϰā§āĻŖ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻŋ, āĻāĻŽāϰāĻž āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āϏāĻāϏā§āĻāϰāĻŖā§ āĻĢāĻŋāϰ⧠āϝā§āϤ⧠āĻĒāĻžāϰāĻŋ āύāĻžāĨ¤
āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύ āϞāĻ
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
āĻāϤā§āϏ āĻĢā§āϞāĻžāĻāĻāϝāĻŧā§ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ:
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. āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻā§ āĻ ā§āϝāĻžāĻĒ āϏāĻāϏā§āĻāϰāĻŖāĻ āϰāϝāĻŧā§āĻā§1.0.0,āϝāĻž āĻāĻāύ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāύāĻŋsurname.
āϧāĻžāĻĒ 2: āĻāĻĒāĻžāϧāĻŋ āϝā§āĻ āĻāϰā§āύ
āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻāϏā§āĻāϰāĻŖ: 2.0.0
āĻĄāĻŋāĻŦāĻŋ āϏāĻāϏā§āĻāϰāĻŖ: v2
āĻŽāύā§āϤāĻŦā§āϝ
āĻāĻāĻāĻŋ āύāϤā§āύ āĻāϞāĻžāĻŽ āϝā§āĻ āĻāϰ⧠āĻāĻŦāĻ āĻāϰ āĻŦāĻŋāώāϝāĻŧāĻŦāϏā§āϤ⧠āĻ āύā§āϞāĻŋāĻĒāĻŋ āĻāϰā§, āĻāĻŽāϰāĻž āĻĒāĻŋāĻāύā§āϰ āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āϤā§āϰāĻŋ āĻāϰāĻŋāĨ¤ āĻāĻāĻ āϏāĻŽāϝāĻŧā§, āϝāĻĻāĻŋ āĻāĻŽāϰāĻž JAR āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰāĻŋ āĻŦāĻž āĻāĻāĻāĻŋ āĻĒā§āϰāĻžāύ⧠JAR āĻāϞāĻŽāĻžāύ āĻĨāĻžāĻā§ āϤāĻŦā§ āĻāĻāĻŋ āĻāĻžāϰā§āϝāĻāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻā§āĻā§ āϝāĻžāĻŦā§ āύāĻžāĨ¤
āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āύāϤā§āύ āϏāĻāϏā§āĻāϰāĻŖ āϰā§āϞ āĻāĻāĻ āĻāϰāĻāĻŋ
āϧāĻžāĻĒ:
- āĻāĻāĻāĻŋ āύāϤā§āύ āĻāϞāĻžāĻŽ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰ āĻāϰā§āύ
surname. āĻāĻāύ āĻāĻĒāύāĻžāϰ āĻĄāĻŋāĻŦāĻŋ āϏāĻāϏā§āĻāϰāĻŖv2 - āĻĨā§āĻā§ āĻĄā§āĻāĻž āĻ
āύā§āϞāĻŋāĻĒāĻŋ āĻāϰā§āύ
last_nameвsurname. āĻŽāύā§āϝā§āĻ āĻĻāĻžāĻāϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āĻāĻ āĻĄā§āĻāĻž āĻ āύā§āĻ āĻĨāĻžāĻā§ āϤāĻŦā§ āĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻžāĻ āĻŽāĻžāĻāĻā§āϰā§āĻļāύ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻž āĻāĻāĻŋāϤ! - āĻā§āĻĄ āϞāĻŋāĻā§āύ āϝā§āĻāĻžāύ⧠āϤāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ āĻāĻāϝāĻŧ и ĐŊОвŅĐšāĻāĻŦāĻ āĻĒā§āϰāĻžāϤāύ āĻāϞāĻžāĻŽ āĻāĻāύ āĻāĻĒāύāĻžāϰ āĻ
ā§āϝāĻžāĻĒ āϏāĻāϏā§āĻāϰāĻŖ
2.0.0 - āĻāϞāĻžāĻŽ āĻĨā§āĻā§ āĻŽāĻžāύ āĻĒāĻĄāĻŧā§āύ
surname, āϝāĻĻāĻŋ āϤāĻž āύāĻž āĻšāϝāĻŧnull, āĻ āĻĨāĻŦāĻž l āĻĨā§āĻā§ast_nameāϝāĻĻāĻŋsurnameāĻāϞā§āϞāĻŋāĻāĻŋāϤ āύāĻž. āĻāĻĒāύāĻŋ āĻŽā§āĻā§ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āύgetLastName()āĻā§āĻĄ āĻĨā§āĻā§, āϝā§āĻšā§āϤ⧠āĻāĻāĻŋ āĻāĻāĻāĻĒā§āĻ āĻšāĻŦā§nullāĻĨā§āĻā§ āĻāĻĒāύāĻžāϰ āĻāĻŦā§āĻĻāύ āϰā§āϞ āĻŦā§āϝāĻžāĻ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ3.0.0āĻĨā§āĻā§2.0.0.
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏā§āĻĒā§āϰāĻŋāĻ āĻŦā§āĻ āĻĢā§āϞāĻžāĻāĻāϝāĻŧā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āĻāĻ āĻĻā§āĻāĻŋ āĻĒāĻĻāĻā§āώā§āĻĒ āϏāĻāϏā§āĻāϰāĻŖ āϏā§āĻāĻžāϰā§āĻāĻāĻĒā§āϰ āϏāĻŽāϝāĻŧ āϏāĻā§āĻāĻžāϞāĻŋāϤ āĻšāĻŦā§ 2.0.0 āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻāϏā§āĻāϰāĻŖ āϏāϰāĻā§āĻāĻžāĻŽāĻāĻŋ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ āĻāĻžāϞāĻžāύ āϤāĻŦā§ āĻāĻāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āĻĻā§āĻāĻŋ āĻāĻŋāύā§āύ āĻāĻŋāύāĻŋāϏ āĻāϰāϤ⧠āĻšāĻŦā§ (āĻĒā§āϰāĻĨāĻŽā§ āĻĄāĻŋāĻŦāĻŋ āϏāĻāϏā§āĻāϰāĻŖāĻāĻŋ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ āĻāĻĒāĻĄā§āĻ āĻāϰā§āύ āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ⧠āύāϤā§āύ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āύ)āĨ¤
āĻāĻāĻž āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖāĨ¤ āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ āϝ⧠āϏāĻĻā§āϝ āύāĻŋāϰā§āĻŽāĻŋāϤ āĻāϞāĻžāĻŽ āĻāĻāĻŋāϤ āύāϝāĻŧ āĻšāϤ⧠āĻšāĻŦā§ āύāĻžāϞ āύāĻž. āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻāĻāĻŋ āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰā§āύ, āĻĒā§āϰāĻžāύ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋ āύāϤā§āύ āĻāϞāĻžāĻŽ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻžāύ⧠āύāĻž āĻāĻŦāĻ āĻāĻāĻŋāϰ āϏāĻŽāϝāĻŧ āĻāĻāĻŋ āĻāύāϏā§āĻāϞ āĻāϰāĻŦā§ āύāĻž
Insert.āĻāĻŋāύā§āϤ⧠āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āϝā§āĻ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻĄāĻŋāĻŦāĻŋ āĻšāĻŦā§v2, āĻāϰ āĻāύā§āϝ āύāϤā§āύ āĻāϞāĻžāĻŽā§āϰ āĻŽāĻžāύ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āϝāĻž āĻŦāĻŋāϧāĻŋāύāĻŋāώā§āϧ āϞāĻā§āĻāύā§āϰ āĻĻāĻŋāĻā§ āύāĻŋāϝāĻŧā§ āϝāĻžāĻŦā§āĨ¤āĻāĻāĻž āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖāĨ¤ āĻāĻĒāύāĻŋ āĻĒāĻĻā§āϧāϤāĻŋ āĻ āĻĒāϏāĻžāϰāĻŖ āĻāϰāĻž āĻāĻāĻŋāϤ
getLastName(), āĻāĻžāϰāĻŖ āϏāĻāϏā§āĻāϰāĻŖā§3.0.0āĻā§āĻĄā§ āĻāĻāĻāĻŋ āĻāϞāĻžāĻŽā§āϰ āĻā§āύ āϧāĻžāϰāĻŖāĻž āύā§āĻlast_name. āĻāϰ āĻŽāĻžāύ⧠āϏā§āĻāĻžāύ⧠āύāĻžāϞ āϏā§āĻ āĻāϰāĻž āĻšāĻŦā§āĨ¤ āĻāĻĒāύāĻŋ āĻĒāĻĻā§āϧāϤāĻŋāĻāĻŋ āĻā§āĻĄāĻŧā§ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āĻāϰ āĻāύā§āϝ āĻā§āĻ āϝā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύnull, āĻāĻŋāύā§āϤ⧠āĻāĻāĻāĻŋ āĻ āύā§āĻ āĻāĻžāϞ āϏāĻŽāĻžāϧāĻžāύ āϝā§āĻā§āϤāĻŋāϤ⧠āϤāĻž āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāĻž āĻšāĻŦā§getSurname()āĻāĻĒāύāĻŋ āϏāĻ āĻŋāĻ āĻ -āĻļā§āύā§āϝ āĻŽāĻžāύ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰā§āĻā§āύāĨ¤
A/B āĻĒāϰā§āĻā§āώāĻž
āĻŦāϰā§āϤāĻŽāĻžāύ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻāϏā§āĻāϰāĻŖ āϰāϝāĻŧā§āĻā§ 1.0.0, āĻā§āĻĒāĻžāĻĻāύ⧠āύāĻŋāϝāĻŧā§āĻāĻŋāϤ, āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāϰ āĻŽāϧā§āϝ⧠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āĻāϞāĻžāĻŽ) āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āύāϤā§āύ āĻāϞāĻžāĻŽ āĻ āύā§āϏāύā§āϧāĻžāύ āĻāϰā§āύ āϤāĻŦā§ āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āĻ āϏāĻā§āĻāϤ āĻĄā§āĻāĻž āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϰā§āϞāĻŦā§āϝāĻžāĻ
āĻāĻāύ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻā§ āĻ
ā§āϝāĻžāĻĒ āϏāĻāϏā§āĻāϰāĻŖ āϰāϝāĻŧā§āĻā§ 2.0.0 āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāύ v2.
āϧāĻžāĻĒ:
- āϏāĻāϏā§āĻāϰāĻŖā§ āĻāĻĒāύāĻžāϰ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϰā§āϞ āĻŦā§āϝāĻžāĻ
1.0.0. - āϏāĻāϏā§āĻāϰāĻŖ
1.0.0āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻāĻāĻāĻŋ āĻāϞāĻžāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āύāĻžsurname, āϤāĻžāĻ āϰā§āϞāĻŦā§āϝāĻžāĻ āϏāĻĢāϞ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤ
āĻĄāĻŋāĻŦāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ
āĻĄāĻžāĻāĻžāĻŦā§āϏ āύāĻžāĻŽā§āϰ āĻāĻāĻāĻŋ āĻāϞāĻžāĻŽ āϰāϝāĻŧā§āĻā§ 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');āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϝā§āĻ āĻāϰā§āύ surname.
āĻŽāύā§āϝā§āĻ. āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ āĻāĻĒāύāĻŋ āϝ⧠āĻāϞāĻžāĻŽāĻāĻŋ āϝā§āĻ āĻāϰāĻā§āύ āϤāĻžāϤ⧠āĻā§āύ⧠NOT NULL āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āϝā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āύāĻžāĨ¤ āĻāĻĒāύāĻŋ 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: āĻā§āĻĄ āĻĨā§āĻā§ āĻļā§āώ_āύāĻžāĻŽ āϏāϰāĻžāύ⧠āĻšāĻā§āĻā§
āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻāϏā§āĻāϰāĻŖ: 3.0.0
āĻĄāĻŋāĻŦāĻŋ āϏāĻāϏā§āĻāϰāĻŖ:v3
āĻŽāύā§āϤāĻŦā§āϝ
āĻŦāĻŋāĻāĻĻā§āϰāĻ āĻĒā§āϰāϤāĻŋ.: āϏā§āĻĒāώā§āĻāϤāĻ, āĻŽā§āϞ āύāĻŋāĻŦāύā§āϧ⧠āϞā§āĻāĻ āĻā§āϞāĻŦāĻļāϤ āĻāĻ āĻŦā§āϞāĻā§āϰ āĻā§āĻā§āϏāĻāĻāĻŋ āϧāĻžāĻĒ 2 āĻĨā§āĻā§ āĻ
āύā§āϞāĻŋāĻĒāĻŋ āĻāϰā§āĻā§āύāĨ¤ āĻāĻ āϧāĻžāĻĒā§, āĻāϞāĻžāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāύ āĻāĻžāϰā§āϝāĻāĻžāϰāĻŋāϤāĻž āĻ
āĻĒāϏāĻžāϰāĻŖā§āϰ āϞāĻā§āώā§āϝ⧠āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻā§āĻĄā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤ last_name.
āĻāĻāĻāĻŋ āύāϤā§āύ āĻāϞāĻžāĻŽ āϝā§āĻ āĻāϰ⧠āĻāĻŦāĻ āĻāϰ āĻŦāĻŋāώāϝāĻŧāĻŦāϏā§āϤ⧠āĻ āύā§āϞāĻŋāĻĒāĻŋ āĻāϰā§, āĻāĻŽāϰāĻž āĻĒāĻŋāĻāύā§āϰ āĻĻāĻŋāĻā§ āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āϤā§āϰāĻŋ āĻāϰā§āĻāĻŋāĨ¤ āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āϝāĻĻāĻŋ āĻāĻŽāϰāĻž JAR āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰāĻŋ āĻŦāĻž āĻāĻāĻāĻŋ āĻĒā§āϰāĻžāύ⧠JAR āĻāϞāĻŽāĻžāύ āĻĨāĻžāĻā§ āϤāĻŦā§ āĻāĻāĻŋ āĻāĻžāϰā§āϝāĻāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻā§āĻā§ āϝāĻžāĻŦā§ āύāĻžāĨ¤
āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϰā§āϞāĻŦā§āϝāĻžāĻ
āĻŦāϰā§āϤāĻŽāĻžāύ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻā§ āĻ
ā§āϝāĻžāĻĒ āϏāĻāϏā§āĻāϰāĻŖ āϰāϝāĻŧā§āĻā§ 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
āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ
āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻā§āύ āĻāĻžāĻ āĻžāĻŽā§āĻāϤ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āύā§āĻāĨ¤ āĻĒā§āϰāĻžāύ⧠āĻĄā§āĻāĻžāϰ āĻā§āĻĄāĻŧāĻžāύā§āϤ āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰ āĻāϰāĻžāϰ āĻāύā§āϝ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĻāĻŋ āĻāĻžāϰā§āϝāĻāϰ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§:
-- 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;āĻā§āĻĄ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ
āĻŦāĻŋāĻāĻĻā§āϰāĻ āĻĒā§āϰāϤāĻŋāĨ¤: āĻāĻ āĻŦā§āϞāĻā§āϰ āĻŦāϰā§āĻŖāύāĻžāĻāĻŋāĻ āϞā§āĻāĻ āĻā§āϞāĻŦāĻļāϤ ⧍āϝāĻŧ āϧāĻžāĻĒ āĻĨā§āĻā§ āĻ
āύā§āϞāĻŋāĻĒāĻŋ āĻāϰā§āĻā§āύāĨ¤ āύāĻŋāĻŦāύā§āϧā§āϰ āϝā§āĻā§āϤāĻŋ āĻ
āύā§āϏāĻžāϰā§, āĻāĻ āϧāĻžāĻĒā§ āĻā§āĻĄā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āϞāĻā§āώā§āϝ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤ āĻāϞāĻžāĻŽā§āϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰ⧠āĻāĻŽāύ āĻāĻĒāĻžāĻĻāĻžāύāĻā§āϞāĻŋāĻā§ āϏāϰāĻŋāϝāĻŧā§ āĻĢā§āϞāĻžāĨ¤ 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
āĻĄāĻŋāĻŦāĻŋ āϏāĻāϏā§āĻāϰāĻŖ: 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"}āĻĄāĻŋāĻŦāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ
āϤā§āϞāύāĻžāĻŽā§āϞāĻāĻāĻžāĻŦā§ 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āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āĻāĻŋāĻŽāĻž (āĻāϞāĻžāĻŽā§āϰ āύāĻžāĻŽ =last_name) - āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻāϏā§āĻāϰāĻŖ āϏā§āĻĨāĻžāĻĒāύāĻž
2.0.0,āϝāĻž āϤāĻĨā§āϝ āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§last_nameиsurname. āĻāĻŦā§āĻĻāύ āĻĨā§āĻā§ āĻĒāĻĄāĻŧāĻžlast_name. āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻāϏā§āĻāϰāĻŖā§ āĻāĻā§v2āĻŽāϤ āĻāϞāĻžāĻŽ āϧāĻžāϰāĻŖāĻāĻžāϰā§last_name, āĻāĻŦāĻsurname. surnamel āĻāϰ āĻāĻāĻāĻŋ āĻ āύā§āϞāĻŋāĻĒāĻŋast_name. (āĻĻā§āϰāώā§āĻāĻŦā§āϝ: āĻāĻ āĻāϞāĻžāĻŽā§ āĻ āĻŦāĻļā§āϝāĻ āύāĻžāϞ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āĻĨāĻžāĻāĻŦā§ āύāĻž) - āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻāϏā§āĻāϰāĻŖ āϏā§āĻĨāĻžāĻĒāύāĻž
3.0.0, āϝāĻž āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĄā§āĻāĻž āϏāĻā§āĻāϝāĻŧ āĻāϰā§surnameāĻāĻŦāĻ āĻāĻĒāĻžāϧāĻŋ āĻĨā§āĻā§ āĻĒāĻĄāĻŧā§āĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻāύā§āϝ, āĻļā§āώ āĻŽāĻžāĻāĻā§āϰā§āĻļāύ āĻšāĻā§āĻā§last_nameвsurname. āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻāĻāĻŋ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āύāĻžāϞ āύāĻž āĻĨā§āĻā§ āϏāϰāĻžāύ⧠āĻšāϝāĻŧā§āĻā§last_name. āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻāύ āϏāĻāϏā§āĻāϰāĻŖā§ āĻāĻā§v3 - āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻāϏā§āĻāϰāĻŖ āϏā§āĻĨāĻžāĻĒāύāĻž
4.0.0- āĻā§āĻĄā§ āĻā§āύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž āĻšāϝāĻŧ āύāĻžāĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āĻĨāĻžāĻĒāύāĻžv4, āϝāĻž āĻ āĻĒāϏāĻžāϰāĻŖ āĻāϰā§last_name. āĻāĻāĻžāύ⧠āĻāĻĒāύāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻā§āύ⧠āĻ āύā§āĻĒāϏā§āĻĨāĻŋāϤ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āϝā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻ āĻĒāĻĻā§āϧāϤāĻŋ āĻ āύā§āϏāϰāĻŖ āĻāϰā§, āĻāĻĒāύāĻŋ āϏāĻŦāϏāĻŽāϝāĻŧ āĻĄāĻžāĻāĻžāĻŦā§āϏ/āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻžāĻŽāĻā§āĻāϏā§āϝ āύāĻž āĻā§āĻā§ āĻāĻāĻāĻŋ āϏāĻāϏā§āĻāϰāĻŖ āĻĢāĻŋāϰāĻŋāϝāĻŧā§ āĻāύāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻā§āĻĄ
āĻāĻ āύāĻŋāĻŦāύā§āϧ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āϏāĻŽāϏā§āϤ āĻā§āĻĄ āĻāĻāĻžāύ⧠āĻāĻĒāϞāĻŦā§āϧ . āύā§āĻā§ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻŦāĻŋāĻŦāϰāĻŖ āĻāĻā§.
āĻĒā§āϰāĻāϞā§āĻĒ
āϏāĻāĻā§āϰāĻšāϏā§āĻĨāϞ āĻā§āϞā§āύ āĻāϰāĻžāϰ āĻĒāϰā§, āĻāĻĒāύāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĢā§āϞā§āĻĄāĻžāϰ āĻāĻžāĻ āĻžāĻŽā§ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύāĨ¤
âââ 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 Sample Flyway.
āĻāĻĒāύāĻŋ āĻāĻāĻŦāĻžāϰ āĻĻā§āĻā§ āύāĻŋāϤ⧠āĻĒāĻžāϰā§āύ http://localhost:8080/flyway, āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻāĻāĻŋ āϤāĻžāϞāĻŋāĻāĻž āĻāĻā§.
āĻāĻ āĻāĻĻāĻžāĻšāϰāĻŖā§ H2 āĻāύāϏā§āϞāĻ āĻ
āύā§āϤāϰā§āĻā§āĻā§āϤ āϰāϝāĻŧā§āĻā§ (āĻ http://localhost:8080/h2-console) āϝāĻžāϤ⧠āĻāĻĒāύāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏā§āĻĨāĻŋāϤāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāϰā§āύ (āĻĄāĻŋāĻĢāϞā§āĻ jdbc URL āĻšāϞ jdbc:h2:mem:testdb).
āĻ āϤāĻŋāϰāĻŋāĻā§āϤ
āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻŽāĻžāĻĻā§āϰ āĻŦā§āϞāĻā§ āĻ āύā§āϝāĻžāύā§āϝ āύāĻŋāĻŦāύā§āϧ āĻĒāĻĄāĻŧā§āύ:
āĻāϤā§āϏ: www.habr.com
