рд╕рдмреИрд▓рд╛рдИ рдирдорд╕реНрдХрд╛рд░, рд░ рдХреНрд╡рд╛рд░реНрдХрд╕ рд╢реГрдЩреНрдЦрд▓рд╛рдХреЛ рддреЗрд╕реНрд░реЛ рдкреЛрд╕реНрдЯрдорд╛ рд╕реНрд╡рд╛рдЧрдд рдЫ!

рдЬрд╛рднрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрдЬрд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджрд╛, рдкреНрд░рд╛рдпрдГ рдпреЛ рдорд╛рдирд┐рдиреНрдЫ рдХрд┐ ╨╕ тАУ рдЫреБрдЯреНрдЯрд╛рдЫреБрдЯреНрдЯреИ рд░ рд╕реНрд╡рддрдиреНрддреНрд░ API рд╣рд░реВ рд╣реБрдиреНред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрднреНрдпрд╕реНрдд API рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЧрд░реНрдЫрдиреН, рдХрд┐рдирдХрд┐ рдирдпрд╛рдБ рдлреНрд░реЗрдорд╡рд░реНрдХ рд░ рд░рдирдЯрд╛рдЗрдо рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рд╕рд┐рдХреНрди рдзреЗрд░реИ рд╕рдордп рд▓рд╛рдЧреНрдЫред рдЖрдЬ рд╣рд╛рдореА рдХреЗрд╣реА рд▓реЛрдХрдкреНрд░рд┐рдпрд╣рд░реВрдХреЛ рд╕рд┐рдХрд╛рдЗрд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВред рд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИ рд░ рдирдпрд╛рдБ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдПрдХреИ рд╕рдордпрдорд╛ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реНред .
рдЕрд▓рд┐ рдмрдвреА рд╡рд┐рд╡рд░рдгрдорд╛, рд╣рд╛рдореА рдкрд╣рд┐рд▓реЗ рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИрд╣рд░реВрд▓рд╛рдИ рдХрд╕рд░реА рд╕рдорд░реНрдерди рдЧрд░реНрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛рдХреЛ рджрд╛рдпрд░рд╛ рд░ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рд╕рдореЗрдЯреНрдиреЗрдЫреМрдВ рддрд╛рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдЙрдиреАрд╣рд░реВрдХреЛ рджреИрдирд┐рдХ рдХрд╛рдордорд╛ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рджреЗрдЦрд╛рдЗрдпреЛрд╕реНред рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд╛рд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрд╛ рдЙрдкрдпреЛрдЧреА рдкрд╛рдЙрдиреЗ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИрд╣рд░реВ рд╕рдореЗрдЯреНрдиреЗрдЫреМрдВред
рдХрд┐рди рдХреНрд╡рд╛рд░реНрдХрд╕? рдкрд╣рд┐рд▓реЛ, рдпреЛ рд▓рд╛рдЗрдн рдХреЛрдбрд┐рдЩ рд╣реЛ, рдЕрд░реНрдерд╛рддреН рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ, рд╕реНрдкреНрд░рд┐рдЩ рдПрдкреАрдЖрдИ рд░ рдЕрдиреНрдп рдЬрд╛рднрд╛ рдПрдкреАрдЖрдИрд╣рд░реВрдорд╛ рдХреБрдиреИ рдкрдирд┐ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреБрди: рд▓реЛрдбрд┐рдЩ, рдЬреБрди рдХреЗрд╡рд▓ рдПрдЙрдЯрд╛ рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдЧрд░рд┐рдиреНрдЫ: mvn рдХреНрд╡рд╛рд░реНрдХрд╕:devред рджреЛрд╕реНрд░реЛ, рд╡реНрдпрдХреНрддрд┐ рд╕реЗрд╡рд╛ (рд╕реНрдкреНрд░рд┐рдВрдЧ, рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓, рд░ JPA API рд╣рд░реВрдмрд╛рдЯ рдиреЗрдЯрд┐рдн GraalVM рдЫрд╡рд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдмрд╛рдЗрдирд░реАрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ) рдХреЗрд╡рд▓ реж.режрелрел рд╕реЗрдХреЗрдиреНрдбрдорд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫ рд░ RESTful рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдиреНрддреНрдп рдмрд┐рдиреНрджреБрдорд╛ рд▓рдЧрднрдЧ репреж MB рдореЗрдореЛрд░реА (RSS) рд▓рд┐рдиреНрдЫред рд░ рдпрд╕рдХреЛ рд╕рдВрдХрд▓рди рдЖрдлреИрдВрдорд╛ рдХреЗрд╡рд▓ рдПрдЙрдЯрд╛ рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдЧрд░рд┐рдиреНрдЫ: mvn рдкреНрдпрд╛рдХреЗрдЬ -Pnativeред
рд╣рд╛рдореА рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓рдХреЛ рд╡рд┐рд╡рд░рдгрдорд╛ рдЬрд╛рдиреЗ рдЫреИрдиреМрдВ, рддрд░ рд╣рд╛рдореА рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдХреНрд╡рд╛рд░реНрдХрд╕рдорд╛ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИрд╣рд░реВрд╕рдБрдЧ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИрд╣рд░реВ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреЗрд░ рдмреБрдЭреНрди рдорджреНрджрдд рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВред
рдХрдиреНрдЯреЗрдирд░ рд░ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕
рдпрд╕ рд▓реЗрдЦрдорд╛ рдзреЗрд░реИ рднрд╛рд░ рдирдкрд░реЛрд╕реН рднрдиреЗрд░, рд╣рд╛рдореА рдпрд╣рд╛рдБ рд╕рдорд░реНрдердирдХрд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкрдХреНрд╖рд╣рд░реВрд▓рд╛рдИ рдорд╛рддреНрд░ рд╕рдореЗрдЯреНрдиреЗрдЫреМрдВред , рдХрд┐рдирднрдиреЗ рдпреЛ рдмреБрдЭреНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред рдХреНрд╡рд╛рд░реНрдХрд╕рд▓рд╛рдИ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЬрд╛рднрд╛ рд╕реНрдЯреНрдпрд╛рдХрдХреЛ рд░реВрдкрдорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдЫ, рдпреЛ рдЬрд╛рднрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд░ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рдореЗрдореЛрд░реА рдЦрдкрдд рд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордпрд▓рд╛рдИ рдХрдо рдЧрд░реНрди рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рд╣реЛ, рд░ рдлрд▓рд╕реНрд╡рд░реВрдк, рд╣реЛрд╕реНрдЯрдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдШрдирддреНрд╡ рдмрдврд╛рдЙрди рд░ рд╕рдордЧреНрд░ рд▓рд╛рдЧрдд рдШрдЯрд╛рдЙрдиред
рдХреНрд╡рд╛рд░реНрдХрд╕ рдкрдирд┐ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╕реНрд░реЛрддрд╣рд░реВ рд░ рдкреНрд░рд╕реНрддрд╛рд╡рд╣рд░реВ Kubernetes рд░ Red Hat OpenShift рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдорд╛ рддреИрдирд╛рддреАрдХрд╛ рд▓рд╛рдЧрд┐ред рдпрд╕рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, Quarkus рд▓реЗ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗ Dockerfile.jvm (JVM рдкреНрдпрд╛рдХреЗрдЬрд┐рдЩ) рд░ Dockerfile.native (рдиреЗрдЯрд┐рдн рдмрд╛рдЗрдирд░реА рдкреНрдпрд╛рдХреЗрдЬрд┐рдЩ) рдлрд╛рдЗрд▓рд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫред
рдЕрдиреНрддрдорд╛, рдХреБрдмреЗрд░реНрдиреЗрдЯреНрд╕рд▓рд╛рдИ рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ рд╡рд╛рддрд╛рд╡рд░рдгрдХреЛ рд░реВрдкрдорд╛ рд▓рдХреНрд╖рд┐рдд рдЧрд░реЗрд░, рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рдХреБрдмреЗрд░реНрдиреЗрдЯреНрд╕ рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╕реНрддрд░рдорд╛ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЬрд╛рднрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдиред рддрд╛рд▓рд┐рдХрд╛ рез рд▓реЗ рдХреБрдмреЗрд░реНрдиреЗрдЯреНрд╕ рд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд╛рднрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХрд╣рд░реВ рдмреАрдЪрдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдореНрдпрд╛рдкрд┐рдЩ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред
рддрд╛рд▓рд┐рдХрд╛ рез. рдЬрд╛рднрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рд░ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдмреАрдЪрдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрддреНрд░рд╛рдЪрд╛рд░рдХреЛ рдирдХреНрд╕рд╛ред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
рдкрд░рдореНрдкрд░рд╛рдЧрдд рд╡рд╕рдиреНрдд рдмреБрдЯ
рдХреБрдмрд░реНрдиреЗрдЯреНрд╕
рд╕реЗрд╡рд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░
рдпреБрд░реЗрдХрд╛
DNS
рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди
рд╕реНрдкреНрд░рд┐рдЩ рдХреНрд▓рд╛рдЙрдб рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди
рдХрдиреНрдлрд┐рдЧ рдирдХреНрд╕рд╛ / рдЧреЛрдкреНрдп рдХреБрд░рд╛рд╣рд░реВ
рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд┐рдВрдЧ
рд░рд┐рдмрди (рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖)
рд╕реЗрд╡рд╛, рдкреНрд░рддрд┐рдХреГрддрд┐ рдирд┐рдпрдиреНрддреНрд░рдХ (рд╕рд░реНрднрд░ рд╕рд╛рдЗрдб)
рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрдореНрдкрд╛рдЗрд▓ рд░ рдЪрд▓рд╛рдЙрдБрджреИ
рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореА рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реНрдЫреМрдВ , рдЬрд╕рд▓реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИрд╣рд░реВ рд╕рдБрдЧреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рд░ рддреНрдпреЛ рдЬрд╛рднрд╛ рдХреНрд▓рд╛рд╕ рдкрдирд┐ред рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛ рдХреЛрдб рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рд░ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрдирдмрд╛рдЯ рдЪрд▓рд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ, рд╡рд┐рд╡рд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ README.md рдлрд╛рдЗрд▓ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред
рд╕реНрдкреНрд░рд┐рдЩ рдлреНрд░реЗрдорд╡рд░реНрдХ API рд╣рд░реВ
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди
рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рд╡рд┐рд╕реНрддреГрдд рджрд╛рдпрд░рд╛рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ рд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбрд┐рдкреЗрдиреНрдбреЗрдиреНрд╕реА рдЗрдиреНрдЬреЗрдХреНрд╢рди (рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреАрдЖрдИ) рдПрдкреАрдЖрдИрд╣рд░реВред рдпрджрд┐ рддрдкрд╛рдИрдВ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, , рддреНрдпрд╕реЛ рднрдП рддрдкрд╛рдИрдВ рдкрд╣рд┐рд▓реЗ рдиреИ CDI рд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдиреБрд╣реБрдиреНрдЫред рдЕрд░реНрдХреЛрддрд░реНрдл, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ DI рд╕рдБрдЧ рдЕрдиреБрдХреВрд▓рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рд╕реНрдкреНрд░рд┐рдВрдЧ DI API рдХреЛ рд▓рд╛рдЧрд┐ рдХреНрд╡рд╛рд░реНрдХрд╕ рдПрдХреНрд╕рдЯреЗрдиреНрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ DI API рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛ реи рдорд╛ рджрд┐рдЗрдПрдХреЛ рдЫред
╨Т CDI рд░ Spring Dependency Injection рджреБрд╡реИ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рдердк рдЬрд╛рдирдХрд╛рд░реА рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ Quarkus Manual рдорд╛ рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ рдЬрд╕рд▓рд╛рдИ .
рддрд╛рд▓рд┐рдХрд╛ реи. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ 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-рд╕рдЪреЗрдд рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдердкреЗрдХреЛ рджреЗрдЦреЗрд░ рдЦреБрд╕реА рд╣реБрдиреЗрдЫрдиреНред рд╕реНрдкреНрд░рд┐рдВрдЧ DI рдЬрд╕реНрддреИ, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм API рд╕рдорд░реНрдердирдХреЛ рдкреНрд░рд╛рдердорд┐рдХ рд▓рдХреНрд╖реНрдп рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ API рд╣рд░реВрд╕рдБрдЧреИ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм API рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреБ рд╣реЛред рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм API рд╣рд░реВ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛ рей рдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдердк рдЬрд╛рдирдХрд╛рд░реА рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдХреНрд╡рд╛рд░реНрдХрд╕ рдЧрд╛рдЗрдбрдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫред .
рддрд╛рд▓рд┐рдХрд╛ рей. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВред
рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдмрдХрд╛ рд╕рдорд░реНрдерд┐рдд рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ
рдЙрджрд╛рд╣рд░рдг
@рд░реЗрд╕реНрдЯрдХрдиреНрдЯреНрд░реЛрд▓рд░
@RequestMapping рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@рдЧреЗрдЯрдореНрдпрд╛рдкрд┐рдЩ
@рдкреЛрд╕реНрдЯрдореНрдпрд╛рдкрд┐рдЩ
@рдкреБрдЯрдореНрдпрд╛рдкрд┐рдЩ
@рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН рдореНрдпрд╛рдкрд┐рдЩ
@рдкреНрдпрд╛рдЪрдореНрдпрд╛рдкрд┐рдЩ
@RequestParam рд▓рд╛рдИ
@RequestHeader рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН
@рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рднреЗрд░рд┐рдПрдмрд▓
@рдкрдердЪрд░
@рдХреБрдХреАрднреНрдпрд╛рд▓реБ
@рдЕрдиреБрд░реЛрдз рд╢рд░реАрд░
@рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реНрдерд┐рддрд┐
@ExceptionHandler рд▓реЗ
@RestControllerAdvice (рдЖрдВрд╢рд┐рдХ)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
рд╕реНрдкреНрд░рд┐рдЩ рдбрд╛рдЯрд╛ JPA
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ ORM рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ JPA рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛рдХреЛ рдкрдирд┐ рдХрджрд░ рдЧрд░реНрдиреЗрдЫрдиреНред рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЦреБрд╕реАрдХреЛ рдЦрдмрд░: рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдкреНрд░рд┐рдВрдЧ рдбрд╛рдЯрд╛ JPA рдПрдиреЛрдЯреЗрд╕рди рд░ рдкреНрд░рдХрд╛рд░рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбрд╛рдЯрд╛ JPA API рд╣рд░реВ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛ рек рдорд╛ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫред
╨Т рд╕реНрдкреНрд░рд┐рдЩ рдбрд╛рдЯрд╛ JPA API рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рд░ рдердк рдЬрд╛рдирдХрд╛рд░реА рдХреНрд╡рд╛рд░реНрдХрд╕ рдЧрд╛рдЗрдбрдорд╛ рдЙрдкрд▓рдмреНрдз рдЫ рдЬрд╕рд▓рд╛рдИ .
рддрд╛рд▓рд┐рдХрд╛ рек. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбрд╛рдЯрд╛ JPA API рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВред
рд╕реНрдкреНрд░рд┐рдЩ рдбрд╛рдЯрд╛ JPA рд╕рдорд░реНрдерд┐рдд рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ
рдЙрджрд╛рд╣рд░рдг
рдХреНрд░реБрдбрд░рд┐рдкреЛрдЬрд┐рдЯрд░реА
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 рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВред
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдЧрд▓реНрддреА рд╕рд╣рдирд╢реАрд▓рддрд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг
@рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕
рдЫреБрдЯреНрдЯреИ рдереНрд░реЗрдбрдорд╛ рддрд░реНрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджреИ
@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(); //...
}
рд╕реЗрд╡рд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ
рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрд▓реЗ рд╡рд┐рд╢реЗрд╖ рд╕реЗрд╡рд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрдЫрдиреНред рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрди рдЕрдиреНрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд▓реЗрдЯрдлрд░реНрдорд▓рд╛рдИ рд╕рдХреНрд╖рдо рдкрд╛рд░реНрди, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХрдиреНрдлрд┐рдЧрд░ рдпреЛрдЧреНрдп рд╣реЗрд▓реНрдердЗрдиреНрдбрд┐рдХреЗрдЯрд░ рд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреБрдЯ рдПрдХреНрдЪреБрдПрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред рдХреНрд╡рд╛рд░реНрдХрд╕рдорд╛, рдпреЛ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реЗрд▓реНрде рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд▓рд╛рдЗрднрдиреЗрд╕ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ, рддрд░ рдПрдХреИ рд╕рд╛рде рд▓рд╛рдЗрднрдиреЗрд╕ рд░ рддрдпрд╛рд░реА рдЬрд╛рдБрдЪ рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реЗрд▓реНрде рдПрдкреАрдЖрдИрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛ рем рдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдердк рдЬрд╛рдирдХрд╛рд░реА рдХреНрд╡рд╛рд░реНрдХрд╕ рдЧрд╛рдЗрдбрдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫред .
рддрд╛рд▓рд┐рдХрд╛ рем. рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реЗрд▓реНрде рдПрдкреАрдЖрдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВред
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг
@рдЬреАрд╡рди
рдкреНрд▓реЗрдЯрдлрд░реНрдорд▓реЗ рднрд╛рдБрдЪрд┐рдПрдХрд╛ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬреНрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд░рд┐рдмреБрдЯ рдЧрд░реНрдЫред
рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБ:
рд╣реЛрд╕реНрдЯ: реорежреореж/рд╕реНрд╡рд╛рд╕реНрдереНрдп/рдкреНрд░рддреНрдпрдХреНрд╖
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@рддрдпрд╛рд░реА
рдпрджрд┐ рдкреНрд▓реЗрдЯрдлрд░реНрдо рддрдпрд╛рд░ рдЫреИрди рднрдиреЗ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬреНрдб рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдорд╛ рдЯреНрд░рд╛рдлрд┐рдХ рдкрдард╛рдЙрдиреЗ рдЫреИрдиред
рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБ:
рд╣реЛрд╕реНрдЯ: реорежреореж/рд╕реНрд╡рд╛рд╕реНрдереНрдп/рддрдпрд╛рд░
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
рдореЗрдЯреНрд░рд┐рдХреНрд╕
рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрд▓реЗ рд╕рдЮреНрдЪрд╛рд▓рди (рдкреНрд░рджрд░реНрд╢рди SLA рдЕрдиреБрдЧрдорди) рд╡рд╛ рдЧреИрд░-рд╕рдЮреНрдЪрд╛рд▓рди (рд╡реНрдпрд╛рдкрд╛рд░ SLA рдореЗрдЯреНрд░рд┐рдХреНрд╕) рдЙрджреНрджреЗрд╢реНрдпрдХрд╛ рд▓рд╛рдЧрд┐ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЙрдЬрд╛рдЧрд░ рдЧрд░реНрдЫрдиреНред рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреБрдЯ рдПрдХреНрдЪреБрдПрдЯрд░ рд░ рдорд╛рдЗрдХреНрд░реЛрдорд┐рдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЙрдЬрд╛рдЧрд░ рдЧрд░реНрдЫрдиреНред рдлрд▓рд╕реНрд╡рд░реВрдк, рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рдЖрдзрд╛рд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ (JVM рд░ OS), рд╡рд┐рдХреНрд░реЗрддрд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ (рдХреНрд╡рд╛рд░реНрдХрд╕), рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЙрдЬрд╛рдЧрд░ рдЧрд░реНрди рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ JSON рд░ OpenMetrics (Prometheus) рдЖрдЙрдЯрдкреБрдЯ рдврд╛рдБрдЪрд╛рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ API рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛ рен рдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред
╨Т рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд╛рди рдЧрд░реНрди рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдердк рдЬрд╛рдирдХрд╛рд░реА рдХреНрд╡рд╛рд░реНрдХрд╕ рдореНрдпрд╛рдиреБрдЕрд▓рдорд╛ рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫред .
рддрд╛рд▓рд┐рдХрд╛ рен. рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ API рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВред
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг
@рдЧрдгрд┐рдд
рдПрдиреЛрдЯреЗрдЯ рдЧрд░рд┐рдПрдХреЛ рд╡рд╕реНрддреБрд▓рд╛рдИ рдХрддрд┐ рдкрдЯрдХ рдХрд▓ рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреЗрд░ рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ рдХрд╛рдЙрдиреНрдЯрд░рд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫред
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@рд╕рдордХрд╛рд▓реАрдирдЧреЗрдЬ
рдПрдиреЛрдЯреЗрдЯ рдЧрд░рд┐рдПрдХреЛ рд╡рд╕реНрддреБрдорд╛ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдХрд▓рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ рдЧреЗрдЬрд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫред
@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;
}
рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЕрдиреНрддреНрдпрдмрд┐рдиреНрджреБрд╣рд░реВ
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдЯреНрд░рд┐рдХреНрд╕ :реорежреореж/рдореЗрдЯреНрд░рд┐рдХреНрд╕/рдЖрд╡реЗрджрди
рдЖрдзрд╛рд░рднреВрдд рдореЗрдЯреНрд░рд┐рдХреНрд╕ :реорежреореж/рдореЗрдЯреНрд░рд┐рдХреНрд╕/рдЖрдзрд╛рд░
рд╡рд┐рдХреНрд░реЗрддрд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ :реорежреореж/рдореЗрдЯреНрд░рд┐рдХреНрд╕/рд╡рд┐рдХреНрд░реЗрддрд╛
рд╕рдмреИ рдореЗрдЯреНрд░рд┐рдХреНрд╕ :реорежреореж/рдореЗрдЯреНрд░рд┐рдХреНрд╕
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдиреНрдЯ
рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрдЬрд╣рд░реВрд▓реЗ рдкреНрд░рд╛рдпрдГ RESTful рдЕрдиреНрддреНрдп рдмрд┐рдиреНрджреБрд╣рд░реВ рдЙрдЬрд╛рдЧрд░ рдЧрд░реНрдЫрдиреН рдЬрд╕рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕рдореНрдмрдиреНрдзрд┐рдд рдХреНрд▓рд╛рдЗрдиреНрдЯ API рд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫред RESTful рдЕрдиреНрддреНрдп рдмрд┐рдиреНрджреБрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ RestTemplate рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред рдЕрд░реНрдХреЛрддрд░реНрдл, рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рдпрд╕ рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдЖрд░рд╛рдо рдХреНрд▓рд╛рдЗрдиреНрдЯ API рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рдЬрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛ рео рдорд╛ рджрд┐рдЗрдПрдХрд╛ рдЫрдиреНред
╨Т RESTful рдЕрдиреНрддреНрдп рдмрд┐рдиреНрджреБрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдиреНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рдердк рдЬрд╛рдирдХрд╛рд░реА рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореНрдпрд╛рдиреБрдЕрд▓рдорд╛ рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫред .
рддрд╛рд▓рд┐рдХрд╛ реоред рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдиреНрдЯ рдПрдкреАрдЖрдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВред
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдиреНрдЯ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг
@RegisterRestClient рд▓рд╛рдИ рд╕рдореНрдкрд░реНрдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдЯрд╛рдЗрдк рдЧрд░рд┐рдПрдХреЛ рдЬрд╛рднрд╛ рдЗрдиреНрдЯрд░рдлреЗрд╕рд▓рд╛рдИ 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-рд░реЗрд╕реНрдЯ/url
REST рдЕрдиреНрддреНрдпрдмрд┐рдиреНрджреБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫ
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
рдкрд░рд┐рдгрд╛рдорд╣рд░реВ
рдпрд╕ рдмреНрд▓рдЧрдорд╛, рдЬреБрди рдореБрдЦреНрдпрддрдпрд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛ, рд╣рд╛рдореАрд▓реЗ рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рдЬрд╛рднрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕рд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИрд╣рд░реВ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИрд╣рд░реВрд╕рдБрдЧреИ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫ рд░ рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдиреЗрдЯрд┐рдн рдмрд╛рдЗрдирд░реАрд╣рд░реВрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдЫ рдЬрд╕рд▓реЗ рд╕рдпреМрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд░реНрдпрд╛рдо рдмрдЪрдд рдЧрд░реНрдЫ рд░ рдорд┐рд▓рд┐рд╕реЗрдХреЗрдиреНрдбрдорд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗрдорд╛ рджреНрд░реБрдд рд░реВрдкрдорд╛ рд╣реЗрд░реНтАНрдпреМрдВред
рддрдкрд╛рдИрдВрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд╕реНрдкреНрд░рд┐рдЩ рд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рд╕рдорд░реНрдердирдХреЛ рдмрд╛рд░реЗрдорд╛ рдердк рдЬрд╛рдирдХрд╛рд░реА, рд╕рд╛рдереИ рдзреЗрд░реИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реАрд╣рд░реВ, рдорд╛ рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ .
рд╕реНрд░реЛрдд: www.habr.com
