āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻāĻŦāĻ‚ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚āĻ•ā§‡ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡

āĻ¸āĻŦāĻžāĻ‡āĻ•ā§‡ āĻšā§āĻ¯āĻžāĻ˛ā§‹, āĻāĻ–āĻžāĻ¨ā§‡ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻ¸āĻŋāĻ°āĻŋāĻœā§‡āĻ° āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĒā§‹āĻ¸ā§āĻŸ!

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻāĻŦāĻ‚ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚āĻ•ā§‡ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡

āĻœāĻžāĻ­āĻž āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻŦāĻŋāĻ•āĻžāĻļ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ—ā§āĻ°āĻšāĻ¨ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ и āĻŦāĻ¸āĻ¨ā§āĻ¤ āĻŦā§āĻŸ āĻĒā§ƒāĻĨāĻ• āĻāĻŦāĻ‚ āĻ¸ā§āĻŦāĻžāĻ§ā§€āĻ¨ APIāĨ¤ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸāĻ°ā§‚āĻĒā§‡, āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻžāĻ°āĻ°āĻž āĻāĻŽāĻ¨ API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻ—ā§āĻ˛āĻŋ āĻ¤āĻžāĻ°āĻž āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻ…āĻ­ā§āĻ¯āĻ¸ā§āĻ¤, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ¨āĻ¤ā§āĻ¨ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻāĻŦāĻ‚ āĻ°āĻžāĻ¨āĻŸāĻžāĻ‡āĻŽ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻļāĻŋāĻ–āĻ¤ā§‡ āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻ—ā§‡āĨ¤ āĻ†āĻœ āĻ†āĻŽāĻ°āĻž āĻ•āĻŋāĻ›ā§ āĻœāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻ¸āĻšāĻœ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŦ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ API āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻ•āĻ‡ āĻ¸āĻžāĻĨā§‡ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ API āĻāĻŦāĻ‚ āĻ¨āĻ¤ā§āĻ¨ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧā§ˇ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸.

āĻāĻ•āĻŸā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻ­āĻžāĻŦā§‡, āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻ¤āĻžāĻĻā§‡āĻ° āĻĻā§ˆāĻ¨āĻ¨ā§āĻĻāĻŋāĻ¨ āĻ•āĻžāĻœā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻāĻĒāĻŋāĻ†āĻ‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻ¤āĻž āĻĻā§‡āĻ–āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻāĻĒāĻŋāĻ†āĻ‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻāĻĒāĻŋāĻ†āĻ‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ āĻ¤āĻžāĻ° āĻĒāĻ°āĻŋāĻ§āĻŋ āĻāĻŦāĻ‚ āĻŦāĻŋāĻļāĻĻ āĻĻā§‡āĻ–āĻŦāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ APIāĻ—ā§āĻ˛āĻŋ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻŦ, āĻ¯āĻž āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ¯ā§‹āĻ—ā§€āĨ¤

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻ•ā§‡āĻ¨? āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻŸāĻŋ āĻšāĻ˛ āĻ˛āĻžāĻ‡āĻ­ āĻ•ā§‹āĻĄāĻŋāĻ‚, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻāĻĒāĻŋāĻ†āĻ‡, āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻāĻĒāĻŋāĻ†āĻ‡ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻœāĻžāĻ­āĻž āĻāĻĒāĻŋāĻ†āĻ‡-āĻāĻ° āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ°āĻŋāĻ˛ā§‹āĻĄāĻŋāĻ‚, āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ: mvn quarkus:devāĨ¤ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻ¤, āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž (āĻ¯āĻž āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚, āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛, āĻāĻŦāĻ‚ JPA API āĻĨā§‡āĻ•ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ GraalVM āĻ‡āĻŽā§‡āĻœ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋāĻ¤ā§‡ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻ•āĻ°ā§‡) āĻŽāĻžāĻ¤ā§āĻ° 0.055 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ RESTful āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 90 MB RAM (RSS) āĻ¨ā§‡āĻ¯āĻŧāĨ¤ āĻ…āĻ§āĻŋāĻ•āĻ¨ā§āĻ¤ā§, āĻāĻ° āĻ¸āĻ‚āĻ•āĻ˛āĻ¨ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ: mvn package -PnativeāĨ¤

āĻ†āĻŽāĻ°āĻž āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ†āĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°āĻŦ āĻ¨āĻž, āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻŦā§āĻāĻ¤ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯ā§‡ āĻ¤āĻžāĻ°āĻž āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻāĻĒāĻŋāĻ†āĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ API āĻāĻ° āĻ¸āĻžāĻĨā§‡āĨ¤

āĻ§āĻžāĻ°āĻ• āĻāĻŦāĻ‚ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸

āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋāĻ•ā§‡ āĻ¸āĻšāĻœ āĻ°āĻžāĻ–āĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž āĻāĻ–āĻžāĻ¨ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ‰āĻšā§āĻš-āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻžāĻ° āĻĻāĻŋāĻ•āĻ—ā§āĻ˛āĻŋ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻŦā§ˇ KubernetesāĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻž āĻŦā§‹āĻāĻž āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ Quarkus āĻ•ā§‡ Kubernetes-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻœāĻžāĻ­āĻž āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻāĻŸāĻŋ āĻœāĻžāĻ­āĻž āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻŽā§‡āĻŽāĻ°āĻŋ āĻ–āĻ°āĻš āĻāĻŦāĻ‚ āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸāĻ†āĻĒā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ•āĻŽāĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻāĻŦāĻ‚ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻšā§‹āĻ¸ā§āĻŸā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ˜āĻ¨āĻ¤ā§āĻŦ āĻŦāĻžāĻĄāĻŧāĻžāĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻžāĻŽāĻ—ā§āĻ°āĻŋāĻ• āĻ–āĻ°āĻš āĻ•āĻŽāĻžāĻ¤ā§‡āĨ¤

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸āĻ“ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻĒā§āĻ°āĻœāĻ¨ā§āĻŽ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ Kubernetes āĻ¸āĻŽā§āĻĒāĻĻ āĻāĻŦāĻ‚ āĻ…āĻĢāĻžāĻ° āĻ—āĻžāĻ‡āĻĄ Kubernetes āĻāĻŦāĻ‚ Red Hat OpenShift āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻ‰āĻĒāĻ°āĻ¨ā§āĻ¤ā§, Quarkus āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ Dockerfile.jvm (JVM āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŋāĻ‚) āĻāĻŦāĻ‚ Dockerfile.native (āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŋāĻ‚) āĻĢāĻžāĻ‡āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻ•āĻ¨āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ¤ā§ˆāĻ°āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤

āĻ…āĻŦāĻļā§‡āĻˇā§‡, āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ Kubernetes-āĻ āĻĢā§‹āĻ•āĻžāĻ¸ āĻ•āĻ°ā§‡, Quarkus āĻœāĻžāĻ­āĻž āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¨āĻž āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽā§‡āĻ° āĻ¸ā§āĻ¤āĻ°ā§‡āĻ‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¸āĻžāĻ°āĻŖāĻŋ 1 āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻāĻŦāĻ‚ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻœāĻžāĻ­āĻž āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻšāĻŋāĻ āĻŋāĻĒāĻ¤ā§āĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¨āĻšāĻŋāĻ¤ā§āĻ° āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°ā§‡āĨ¤

āĻ¸āĻžāĻ°āĻŖā§€ 1. āĻœāĻžāĻ­āĻž āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻāĻŦāĻ‚ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻšāĻŋāĻ āĻŋāĻĒāĻ¤ā§āĻ°ā§‡āĻ° āĻŽāĻžāĻ¨āĻšāĻŋāĻ¤ā§āĻ°āĨ¤

āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŽā§‚āĻ˛āĻ•
āĻāĻ¤āĻŋāĻšā§āĻ¯āĻŦāĻžāĻšā§€ āĻŦāĻ¸āĻ¨ā§āĻ¤ āĻŦā§āĻŸ
Kubernetes

āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ†āĻŦāĻŋāĻˇā§āĻ•āĻžāĻ°
āĻ‡āĻ‰āĻ°ā§‡āĻ•āĻž
āĻĄāĻŋāĻāĻ¨āĻāĻ¸

āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨
āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨
āĻŽāĻžāĻ¨āĻšāĻŋāĻ¤ā§āĻ°/āĻ¸āĻŋāĻ•ā§āĻ°ā§‡āĻŸ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°ā§āĻ¨

āĻ­āĻžāĻ°āĻ¸āĻžāĻŽā§āĻ¯ āĻ˛ā§‹āĻĄ āĻ•āĻ°ā§āĻ¨
āĻĢāĻŋāĻ¤āĻž (āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻžāĻ‡āĻĄ)
āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸, āĻ°ā§‡āĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ° (āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ¸āĻžāĻ‡āĻĄ)

āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĨā§‡āĻ•ā§‡ āĻ•ā§‹āĻĄ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻāĻŦāĻ‚ āĻ°āĻžāĻ¨ āĻ•āĻ°āĻž

āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻ†āĻŽāĻ°āĻž āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°āĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ API āĻāĻŦāĻ‚ āĻāĻŽāĻ¨āĻ•āĻŋ āĻāĻ•āĻ‡ āĻœāĻžāĻ­āĻž āĻ•ā§āĻ˛āĻžāĻ¸ āĻāĻ•āĻ¸āĻžāĻĨā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻāĻŦāĻ‚ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻœāĻžāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ README.md āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻĻā§‡āĻ–ā§āĻ¨āĨ¤

āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• API

āĻ‡āĻ¨āĻœā§‡āĻ•āĻļāĻ¨ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž

āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻ¸ā§€āĻŽāĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ āĻĒā§āĻ°āĻ¸āĻ™ā§āĻ— āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻ‡āĻ¨āĻœā§‡āĻ•āĻļāĻ¨ (CDI) APIs āĻāĻŦāĻ‚ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄāĻŋāĻĒā§‡āĻ¨āĻĄā§‡āĻ¨ā§āĻ¸āĻŋ āĻ‡āĻ¨āĻœā§‡āĻ•āĻļāĻ¨ (āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄāĻŋāĻ†āĻ‡) āĻāĻĒāĻŋāĻ†āĻ‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĻ¨, āĻœāĻžāĻ­āĻž āĻ‡āĻ‡ āĻāĻŦāĻ‚ āĻœāĻžāĻ•āĻžāĻ°ā§āĻ¤āĻž āĻ‡āĻ‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ CDI āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ–ā§āĻŦ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤āĨ¤ āĻ…āĻ¨ā§āĻ¯āĻĻāĻŋāĻ•ā§‡, āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻ°āĻž āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄāĻŋāĻ†āĻ‡-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ DI API-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ DI API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛āĻŋ āĻ¸āĻžāĻ°āĻŖāĻŋ 2 āĻ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

В āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¸āĻŋāĻĄāĻŋāĻ†āĻ‡ āĻāĻŦāĻ‚ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄāĻŋāĻĒā§‡āĻ¨āĻĄā§‡āĻ¨ā§āĻ¸āĻŋ āĻ‡āĻ¨āĻœā§‡āĻ•āĻļāĻ¨ āĻ‰āĻ­āĻ¯āĻŧāĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻāĻ‡ āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ†āĻ°āĻ“ āĻ¤āĻĨā§āĻ¯ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻ—āĻžāĻ‡āĻĄ āĻĻā§‡āĻ–ā§āĻ¨ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄāĻŋāĻ†āĻ‡ āĻ—āĻžāĻ‡āĻĄ.

āĻ¸āĻžāĻ°āĻŖāĻŋ 2. āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ DI API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤

āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ DI āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯
āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

āĻ•āĻ¨āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸāĻ° āĻ‡āĻ¨āĻœā§‡āĻ•āĻļāĻ¨

public PersonSpringController(
   PersonSpringRepository personRepository,  // injected      
   PersonSpringMPService personService) {    // injected
      this.personRepository = personRepository;
      this.personService = personService;
}

āĻĢāĻŋāĻ˛ā§āĻĄ āĻ‡āĻ¨āĻœā§‡āĻ•āĻļāĻ¨
āĻ…āĻŸā§‹āĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ°āĻĄ
āĻŽā§‚āĻ˛ā§āĻ¯

@Autowired
@RestClient
SalutationRestClient salutationRestClient;

@Value("${fallbackSalutation}")
String fallbackSalutation;

āĻļāĻŋāĻŽ
@āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨

@Configuration
public class AppConfiguration {
   @Bean(name = "capitalizeFunction")
   public StringFunction capitalizer() {
      return String::toUpperCase;
   }
}

āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨

@Component("noopFunction")
public class NoOpSingleStringFunction implements StringFunction {
   @Override
   public String apply(String s) {
      return s;
   }
}

āĻ¸ā§‡āĻŦāĻž

@Service
public class MessageProducer {
   @Value("${greeting.message}")
   String message;

   public String getPrefix() {
      return message;
   }
}

āĻ“āĻ¯āĻŧā§‡āĻŦ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•

āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ°āĻž āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻ“āĻ¯āĻŧā§‡āĻŦ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻŽāĻĄā§‡āĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ JAX-RS, āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻ°ā§‡āĻ¸ā§āĻŸ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ, JSON-P, āĻāĻŦāĻ‚ JSON-B āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻ°āĻž āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻ“āĻ¯āĻŧā§‡āĻŦ API, āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻ°ā§‡ REST āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ā§‡āĻ° āĻ¸āĻžāĻŽā§āĻĒā§āĻ°āĻ¤āĻŋāĻ• āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ā§‡ āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻŸ āĻšāĻŦā§‡āĨ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄāĻŋāĻ†āĻ‡-āĻāĻ° āĻŽāĻ¤ā§‹, āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻ“āĻ¯āĻŧā§‡āĻŦ API āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ā§‡āĻ° āĻŽā§‚āĻ˛ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻšāĻ˛ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ API-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻ¤ā§āĻ°ā§‡ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻ“āĻ¯āĻŧā§‡āĻŦ API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻžāĨ¤ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻāĻĒāĻŋāĻ†āĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻ¤āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¸āĻžāĻ°āĻŖāĻŋ 3-āĻ¤ā§‡ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻ‡ āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ†āĻ°āĻ“ āĻ¤āĻĨā§āĻ¯ āĻ“ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻŸāĻŋāĻ‰āĻŸā§‹āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛-āĻ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡ āĻŦāĻ¸āĻ¨ā§āĻ¤ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ—āĻžāĻ‡āĻĄ.

āĻ¸āĻžāĻ°āĻŖāĻŋ 3. āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻ“āĻ¯āĻŧā§‡āĻŦ API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤

āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯
āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

@āĻ°ā§‡āĻ¸ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°
@RequestMapping

@RestController
@RequestMapping("/person")
public class PersonSpringController {
   ...
   ...
   ...
}

@āĻ—ā§‡āĻŸāĻŽā§āĻ¯āĻžāĻĒāĻŋāĻ‚
@āĻĒā§‹āĻ¸ā§āĻŸāĻŽā§āĻ¯āĻžāĻĒāĻŋāĻ‚
@āĻĒā§āĻŸāĻŽā§āĻ¯āĻžāĻĒāĻŋāĻ‚
@āĻĄāĻŋāĻ˛āĻŋāĻŸāĻŽā§āĻ¯āĻžāĻĒāĻŋāĻ‚
@āĻĒā§āĻ¯āĻžāĻšāĻŽā§āĻ¯āĻžāĻĒāĻŋāĻ‚
@RequestParam
@RequestHeader
@MatrixVariable
@āĻĒāĻžāĻĨāĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛
@āĻ•ā§āĻ•āĻŋāĻ­ā§āĻ¯āĻžāĻ˛ā§
@RequestBody
@ āĻ°ā§‡āĻ¸āĻĒāĻ¨ā§āĻ¸ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻžāĻ¸
@ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ°
@RestControllerAdvice (āĻ†āĻ‚āĻļāĻŋāĻ•)

@GetMapping(path = "/greet/{id}",
   produces = "text/plain")
   public String greetPerson(
   @PathVariable(name = "id") long id) {
   ...
   ...
   ...
}

āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻŸāĻž JPA

āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ°āĻžāĻ“ āĻĒā§āĻ°āĻļāĻ‚āĻ¸āĻž āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻšāĻžāĻ‡āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸ ORM āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ JPA āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĻ“ āĻ¸ā§āĻ¸āĻ‚āĻŦāĻžāĻĻ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻŸāĻž JPA āĻŸā§€āĻ•āĻž āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ•āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ā§ˇ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻŸāĻž JPA API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¸āĻžāĻ°āĻŖāĻŋ 4 āĻ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤
В āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻŸāĻž JPA API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ Quarkus āĻŸāĻŋāĻ‰āĻŸā§‹āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻžāĻŽāĻ• āĻ†āĻ°āĻ“ āĻ¤āĻĨā§āĻ¯ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻŸāĻž JPA āĻ—āĻžāĻ‡āĻĄ.

āĻ¸āĻžāĻ°āĻŖāĻŋ 4. āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻŸāĻž JPA API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤

āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻŸāĻž JPA āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯
āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

CrudRepository

public interface PersonRepository
         extends JpaRepository,
                 PersonFragment {
   ...
}

āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ—
JpaRepository
āĻĒā§‡āĻœāĻŋāĻ‚āĻāĻ¨ā§āĻĄ āĻ¸āĻ°ā§āĻŸāĻŋāĻ‚ āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ

public class PersonRepository extends 

    Repository {

    Person save(Person entity);

    Optional findById(Person entity);
}

āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻ–āĻŖā§āĻĄ

public interface PersonRepository
         extends JpaRepository,
                 PersonFragment {
   ...
}

āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ•ā§āĻ¯ā§‹āĻ¯āĻŧāĻžāĻ°ā§€ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ

public interface PersonRepository extends CrudRepository {

    List findByName(String name);
    
    Person findByNameBySsn(String ssn);
    
    Optional 
       findByNameBySsnIgnoreCase(String ssn);

    Boolean existsBookByYearOfBirthBetween(
            Integer start, Integer end);
}

āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€-āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻĒā§āĻ°āĻļā§āĻ¨

public interface MovieRepository
         extends CrudRepository {

    Movie findFirstByOrderByDurationDesc();

    @Query("select m from Movie m where m.rating = ?1")
    Iterator findByRating(String rating);

    @Query("from Movie where title = ?1")
    Movie findByTitle(String title);
}

āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ API

āĻĻā§‹āĻˇ āĻ¸āĻšāĻ¨āĻļā§€āĻ˛āĻ¤āĻž

āĻ•ā§āĻ¯āĻžāĻ¸āĻ•ā§‡āĻĄāĻŋāĻ‚ āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻž āĻ°ā§‹āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¯ā§‹āĻ—ā§āĻ¯ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ° āĻ¤ā§ˆāĻ°āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻĢāĻ˛ā§āĻŸ āĻŸāĻ˛āĻžāĻ°ā§‡āĻ¨ā§āĻ¸ āĻ•āĻ¨āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ–ā§āĻŦāĻ‡ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻ°āĻž āĻŦāĻšā§ āĻŦāĻ›āĻ° āĻ§āĻ°ā§‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¸āĻšāĻ¨āĻļā§€āĻ˛āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ°ā§āĻ•āĻŋāĻŸ-āĻŦā§āĻ°ā§‡āĻ•āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›ā§‡āĻ¨āĨ¤ āĻšāĻŋāĻ¸ā§āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸. āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻšāĻžāĻ‡āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĻā§€āĻ°ā§āĻ˜āĻĻāĻŋāĻ¨ āĻ§āĻ°ā§‡ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ, āĻ¤āĻŦā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻĢāĻ˛ā§āĻŸ āĻŸāĻ˛āĻžāĻ°ā§‡āĻ¨ā§āĻ¸ āĻāĻ–āĻ¨ āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻ•āĻžāĻļ āĻ•āĻ°āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻ° āĻĒāĻŋāĻ›āĻ¨ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ• āĻŦāĻ›āĻ°ā§‡āĻ° āĻ‰ā§ŽāĻĒāĻžāĻĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ…āĻ¤āĻāĻŦ, āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻž āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻĢāĻ˛ā§āĻŸ āĻŸāĻ˛āĻžāĻ°ā§‡āĻ¨ā§āĻ¸ API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻšā§āĻ›ā§‡, āĻ¯āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¸āĻžāĻ°āĻŖā§€ 5 āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ‡ āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ†āĻ°āĻ“ āĻ¤āĻĨā§āĻ¯ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻĻā§‡āĻ–ā§āĻ¨ āĻĢāĻ˛ā§āĻŸ āĻŸāĻ˛āĻžāĻ°ā§‡āĻ¨ā§āĻ¸ āĻ—āĻžāĻ‡āĻĄ.

āĻ¸āĻžāĻ°āĻŖāĻŋ 5. āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻĢāĻ˛ā§āĻŸ āĻŸāĻ˛āĻžāĻ°ā§‡āĻ¨ā§āĻ¸ API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤

āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻĢāĻ˛ā§āĻŸ āĻŸāĻ˛āĻžāĻ°ā§‡āĻ¨ā§āĻ¸ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯
āĻŦāĻŋāĻŦāĻ°āĻŖ
āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

@āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ¨āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸

āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻĨā§āĻ°ā§‡āĻĄā§‡ āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻš āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

@Asynchronous
@Retry
public Future<String> getSalutation() {
   ...
   return future;
}

@āĻŦāĻžāĻ˛ā§āĻ•āĻšā§‡āĻĄ

āĻāĻ•āĻ¯ā§‹āĻ—ā§‡ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ¸ā§€āĻŽāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨

@Bulkhead(5)
public void fiveConcurrent() {
   makeRemoteCall(); //...
}

@āĻ¸āĻžāĻ°ā§āĻ•āĻŋāĻŸ āĻŦā§āĻ°ā§‡āĻ•āĻžāĻ°

āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻž āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻž āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ°

@CircuitBreaker(delay=500   // milliseconds
   failureRatio = .75,
   requestVolumeThreshold = 20,
   successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

@āĻĒāĻŋāĻ›ā§ āĻšāĻŸ

āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻžāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ•āĻ˛ āĻ•āĻ°āĻž

@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

public String fallback() {
   return "hello";
}

āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻž

āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻ˛ā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§āĻ¨

@Retry(maxRetries=3)
public String getSalutation() {
   makeRemoteCall(); //...
}

āĻ¸āĻŽāĻ¯āĻŧ āĻļā§‡āĻˇ

āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§€āĻŽāĻž

@Timeout(value = 500 )   // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

āĻšā§‡āĻ•āĻŋāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ (āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯)

Kubernetes āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽāĻ—ā§āĻ˛āĻŋ āĻŦāĻŋāĻļā§‡āĻˇ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯ āĻĒāĻ°ā§āĻ¯āĻŦā§‡āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡āĨ¤ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻšāĻŋāĻ¤ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽāĻŸāĻŋāĻ•ā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§€āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻšā§‡āĻ˛āĻĨ āĻ‡āĻ¨ā§āĻĄāĻŋāĻ•ā§‡āĻŸāĻ° āĻāĻŦāĻ‚ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻŦā§āĻŸ āĻ…ā§āĻ¯āĻžāĻ•āĻšā§āĻ¯āĻŧā§‡āĻŸāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ā§‡, āĻāĻŸāĻŋ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻšā§‡āĻ˛āĻĨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¯āĻž āĻĄāĻŋāĻĢāĻ˛ā§āĻŸāĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻœā§€āĻŦāĻ¨ā§āĻ¤āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻ‡ āĻ¸āĻžāĻĨā§‡ āĻ¸āĻœā§€āĻŦāĻ¤āĻž āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻšā§‡āĻ˛āĻĨ āĻāĻĒāĻŋāĻ†āĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¤āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¸āĻžāĻ°āĻŖāĻŋ 6-āĻ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ā§‡ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ¤āĻĨā§āĻ¯ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯ āĻ—āĻžāĻ‡āĻĄ.

āĻ¸āĻžāĻ°āĻŖāĻŋ 6: āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻšā§‡āĻ˛āĻĨ API-āĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤

āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯
āĻŦāĻŋāĻŦāĻ°āĻŖ
āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

@āĻ˛āĻžāĻ‡āĻ­āĻ¨ā§‡āĻ¸

āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻ°āĻŋāĻŦā§āĻŸ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°āĻžāĻ‡āĻœāĻĄ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨
āĻļā§‡āĻˇāĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤:
āĻšā§‹āĻ¸ā§āĻŸ: 8080/āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯/āĻ˛āĻžāĻ‡āĻ­

@Liveness
public class MyHC implements HealthCheck {
  public HealthCheckResponse call() {

   ...
   return HealthCheckResponse
     .named("myHCProbe")
     .status(ready ? true:false)
     .withData("mydata", data)
     .build();  
}

@āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĻŋ

āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽāĻŸāĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ¨āĻž āĻšāĻ˛ā§‡ āĻ•āĻ¨āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°āĻžāĻ‡āĻœāĻĄ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻŸā§āĻ°ā§āĻ¯āĻžāĻĢāĻŋāĻ• āĻĒāĻžāĻ āĻžāĻŦā§‡ āĻ¨āĻž
āĻļā§‡āĻˇāĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤:
āĻšā§‹āĻ¸ā§āĻŸ:8080/āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯/āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤

@Readiness
public class MyHC implements HealthCheck {
  public HealthCheckResponse call() {

   ...
   return HealthCheckResponse
     .named("myHCProbe")
     .status(live ? true:false)
     .withData("mydata", data)
     .build();  
}

āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸

āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻšāĻ¯āĻŧ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻžāĻ˛ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ (āĻĒāĻžāĻ°āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻāĻ¸āĻāĻ˛āĻāĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§€āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯) āĻŦāĻž āĻ…-āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻžāĻ˛ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ (āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ• āĻāĻ¸āĻāĻ˛āĻ) āĻœāĻ¨ā§āĻ¯ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻ°āĻž āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻŦā§āĻŸ āĻ…ā§āĻ¯āĻžāĻ•āĻšā§āĻ¯āĻŧā§‡āĻŸāĻ° āĻāĻŦāĻ‚ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻŽāĻŋāĻŸāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻŦā§‡āĻ¸āĻ˛āĻžāĻ‡āĻ¨ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ (āĻœā§‡āĻ­āĻŋāĻāĻŽ āĻāĻŦāĻ‚ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ), āĻ­ā§‡āĻ¨ā§āĻĄāĻ° āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ (āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸) āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¯ā§‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ JSON āĻāĻŦāĻ‚ OpenMetrics (Prometheus) āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻŸāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ā§ˇ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻāĻĒāĻŋāĻ†āĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¸āĻžāĻ°āĻŖāĻŋ 7 āĻ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

В āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ. āĻ†āĻ°āĻ“ āĻ¤āĻĨā§āĻ¯ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻĻā§‡āĻ–ā§āĻ¨ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ—āĻžāĻ‡āĻĄ.

āĻ¸āĻžāĻ°āĻŖā§€ 7. āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤

āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯
āĻŦāĻŋāĻŦāĻ°āĻŖ
āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

@āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡

āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻžāĻ° āĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻŸā§€āĻ•āĻžāĻ•ā§ƒāĻ¤ āĻŦāĻ¸ā§āĻ¤ā§āĻ•ā§‡ āĻ•āĻ¤āĻŦāĻžāĻ° āĻ•āĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡

@Counted(name = "fallbackCounter", 
  displayName = "Fallback Counter", 
  description = "Fallback Counter")
public String salutationFallback() {
   return fallbackSalutation;
}

@ConcurrentGauge

āĻāĻ•āĻŸāĻŋ āĻ—ā§‡āĻœ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻŸā§€āĻ•āĻžāĻ¯ā§āĻ•ā§āĻ¤ āĻŦāĻ¸ā§āĻ¤ā§āĻ¤ā§‡ āĻ¸āĻŽāĻ¸āĻžāĻŽāĻ¯āĻŧāĻŋāĻ• āĻ•āĻ˛ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡

@ConcurrentGuage(
  name = "fallbackConcurrentGauge", 
  displayName="Fallback Concurrent", 
  description="Fallback Concurrent")
public String salutationFallback() {
   return fallbackSalutation;
}

@ āĻ—ā§‡āĻœ

āĻāĻ•āĻŸāĻŋ āĻ—ā§‡āĻœ āĻ¸ā§‡āĻ¨ā§āĻ¸āĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻŸā§€āĻ•āĻžāĻ¯ā§āĻ•ā§āĻ¤ āĻŦāĻ¸ā§āĻ¤ā§āĻ° āĻŽāĻžāĻ¨ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻ•āĻ°ā§‡

@Metered(name = "FallbackGauge",
   displayName="Fallback Gauge",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

@āĻŽāĻŋāĻŸāĻžāĻ°ā§‡āĻĄ

āĻāĻ•āĻŸāĻŋ āĻŽāĻŋāĻŸāĻžāĻ° āĻ¸ā§‡āĻ¨ā§āĻ¸āĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻŸā§€āĻ•āĻžāĻ¯ā§āĻ•ā§āĻ¤ āĻŦāĻ¸ā§āĻ¤ā§āĻ° āĻ•āĻ˛ āĻĢā§āĻ°āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¨ā§āĻ¸āĻŋ āĻ¨āĻŋāĻ°ā§€āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡

@Metered(name = "MeteredFallback",
   displayName="Metered Fallback",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

āĻ›āĻ¨ā§āĻĻā§‹āĻŽāĻ¯āĻŧ

āĻāĻ•āĻŸāĻŋ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ• āĻĒā§āĻ°āĻŦā§‡āĻļ āĻŦāĻž āĻ‰āĻ¤ā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻšāĻ˛ā§‡ āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¤āĻĨā§āĻ¯ āĻ§āĻžāĻ°āĻŖāĻ•āĻžāĻ°ā§€ āĻāĻ•āĻŸāĻŋ āĻŸā§€āĻ•āĻžā§ˇ

@Metric
@Metered(name = "MeteredFallback",
   displayName="Metered Fallback",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€

āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ‡āĻŽāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻŸā§€āĻ•āĻžāĻ¯ā§āĻ•ā§āĻ¤ āĻŦāĻ¸ā§āĻ¤ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧāĻ•āĻžāĻ˛ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ• āĻ•āĻ°ā§‡

@Timed(name = "TimedFallback",
   displayName="Timed Fallback",
   description="Fallback delay")
public String salutationFallback() {
   return fallbackSalutation;
}

āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ

āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻšā§‹āĻ¸ā§āĻŸ:8080/āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸/āĻ†āĻŦā§‡āĻĻāĻ¨
āĻŦā§‡āĻ¸āĻŋāĻ• āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻšā§‹āĻ¸ā§āĻŸ:8080/āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸/āĻŦā§‡āĻ¸
āĻŦāĻŋāĻ•ā§āĻ°ā§‡āĻ¤āĻž āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻšā§‹āĻ¸ā§āĻŸ:8080/āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸/āĻŦāĻŋāĻ•ā§āĻ°ā§‡āĻ¤āĻž
āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻšā§‹āĻ¸ā§āĻŸ:8080/āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸

āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻ°ā§‡āĻ¸ā§āĻŸ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ

āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ‡ RESTful āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ APIāĻ—ā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧā§ˇ RESTful āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡, āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻ°āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ RestTemplate āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻ°ā§‡āĻ¸ā§āĻŸ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻāĻĒāĻŋāĻ†āĻ‡ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¸āĻžāĻ°āĻŖāĻŋ 8 āĻ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻ†āĻ›ā§‡āĨ¤

В āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ RESTful āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻ°ā§‡āĻ¸ā§āĻŸ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ†āĻ°āĻ“ āĻ¤āĻĨā§āĻ¯ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡ āĻŦāĻŋāĻļā§āĻ°āĻžāĻŽ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ—āĻžāĻ‡āĻĄ.

āĻ¸āĻžāĻ°āĻŖā§€ 8. āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻ°ā§‡āĻ¸ā§āĻŸ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤

āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ āĻŦāĻŋāĻļā§āĻ°āĻžāĻŽ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯
āĻŦāĻŋāĻŦāĻ°āĻŖ
āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

@āĻ°ā§‡āĻœāĻŋāĻ¸ā§āĻŸāĻžāĻ°āĻ°ā§‡āĻ¸ā§āĻŸāĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ

REST āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ‡āĻĒ āĻ•āĻ°āĻž āĻœāĻžāĻ­āĻž āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻ•āĻ°ā§‡

@RegisterRestClient
@Path("/")
public interface MyRestClient {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getSalutation();
}

@āĻ°ā§‡āĻ¸ā§āĻŸ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ

āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ‡āĻĒ āĻ•āĻ°āĻž REST āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻšāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻ•āĻ°ā§‡

@Autowired // or @Inject
@RestClient
MyRestClient restClient;

āĻ†āĻŦāĻžāĻšāĻ¨

āĻāĻ•āĻŸāĻŋ REST āĻļā§‡āĻˇ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ•āĻ˛

System.out.println(
   restClient.getSalutation());

mp-rest/url

REST āĻļā§‡āĻˇ āĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡

application.properties:
org.example.MyRestClient/mp-rest/url=
   http://localhost:8081/myendpoint

āĻĢāĻ˛āĻžāĻĢāĻ˛

āĻāĻ‡ āĻŦā§āĻ˛āĻ—ā§‡, āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻœāĻžāĻ­āĻž āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡āĻ¸ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒ āĻ•āĻ°āĻ¤ā§‡ Quarkus-āĻāĻ° āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ API-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ API-āĻ—ā§āĻ˛āĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ•ā§‹āĻĄā§‡ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻ•āĻ°āĻŦ āĻ¯āĻž āĻļāĻ¤ āĻļāĻ¤ āĻŽā§‡āĻ—āĻžāĻŦāĻžāĻ‡āĻŸ āĻ°â€Œā§āĻ¯āĻžāĻŽ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ˛āĻžā§āĻš āĻ•āĻ°ā§‡āĨ¤ āĻŽāĻŋāĻ˛āĻŋāĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡āĻ° āĻŦā§āĻ¯āĻžāĻĒāĻžāĻ°āĨ¤

āĻ†āĻĒāĻ¨āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻŦā§āĻāĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›ā§‡āĻ¨, āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ API-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻ°āĻ“ āĻ¤āĻĨā§āĻ¯, āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§‡āĻ• āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻ¤āĻĨā§āĻ¯ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ¸ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨