рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рдпрд╣рд╛рдВ рдХреНрд╡рд╛рд░реНрдХрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рддреАрд╕рд░реА рдкреЛрд╕реНрдЯ рд╣реИ!
рдЬрд╛рд╡рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ, рд╣рдо рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рджрд╛рдпрд░рд╛ рдФрд░ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрд╡рд╛рд░реНрдХрд╕ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдкрдиреЗ рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рдХреЗ рдХрд╛рдо рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдмрдирд╛рддреЗ рд╕рдордп рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред
рдХреНрд╡рд╛рд░реНрдХрд╕ рдХреНрдпреЛрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд▓рд╛рдЗрд╡ рдХреЛрдбрд┐рдВрдЧ рд╣реИ, рдпрд╛рдиреА, рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИ рдФрд░ рдЕрдиреНрдп рдЬрд╛рд╡рд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреБрдирдГ рд▓реЛрдбрд┐рдВрдЧ, рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИ: рдПрдорд╡реАрдПрди рдХреНрд╡рд╛рд░реНрдХрд╕: рджреЗрд╡ред рджреВрд╕рд░реЗ, рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ
рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рд╡реЗ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдВрдЯреЗрдирд░ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рд╕рдорд░реНрдерди рдХреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкрд╣рд▓реБрдУрдВ рдХреЛ рд╣реА рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗред
рдХреНрд╡рд╛рд░реНрдХрд╕ рднреА
рдЕрдВрдд рдореЗрдВ, рд▓рдХреНрд╖реНрдп рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдХреЗ, рдХреНрд╡рд╛рд░реНрдХрд╕ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕реНрддрд░ рдкрд░ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИред рддрд╛рд▓рд┐рдХрд╛ 1 рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдмреАрдЪ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд╛ рдПрдХ рдирдХреНрд╢рд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред
рддрд╛рд▓рд┐рдХрд╛ 1. рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░ред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ
Kubernetes
рд╕реЗрд╡рд╛ рдЦреЛрдЬ
рдпреВрд░реЗрдХрд╛
рдбреАрдПрдирдПрд╕
рд╡рд┐рдиреНрдпрд╛рд╕
рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рдХреЙрдиреНрдлрд╝рд┐рдЧ рдорд╛рдирдЪрд┐рддреНрд░/рд░рд╣рд╕реНрдп
рднрд╛рд░ рд╕рдВрддреБрд▓рди
рд░рд┐рдмрди (рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖)
рд╕реЗрд╡рд╛, рдкреНрд░рддрд┐рдХреГрддрд┐ рдирд┐рдпрдВрддреНрд░рдХ (рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб)
рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ
рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдкреАрдЖрдИ
рдирд┐рд░реНрднрд░рддрд╛ рдЕрдиреНрддрдГрдХреНрд╖реЗрдкрдг
рдХреНрд╡рд╛рд░реНрдХрд╕ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
╨Т
рддрд╛рд▓рд┐рдХрд╛ 2. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреАрдЖрдИ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреАрдЖрдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдЙрджрд╛рд╣рд░рдг
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрдВрдЬреЗрдХреНрд╢рди
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 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ REST рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдХреНрд╡рд╛рд░реНрдХрд╕ рдХреЗ рд╣рд╛рд▓рд┐рдпрд╛ рд╕рдорд░реНрдерди рд╕реЗ рдкреНрд░рд╕рдиреНрди рд╣реЛрдВрдЧреЗред рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреАрдЖрдИ рдХреЗ рд╕рдорд╛рди, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рд╕рдорд░реНрдерди рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рдирд╛ рд╣реИред рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рддрд╛рд▓рд┐рдХрд╛ 3 рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреНрд╡рд╛рд░реНрдХрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рддрд╛рд▓рд┐рдХрд╛ 3. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдЙрджрд╛рд╣рд░рдг
@рд░реЗрд╕реНрдЯрдХрдВрдЯреНрд░реЛрд▓рд░
@Request рдореИрдкрд┐рдВрдЧ
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@рдЧреЗрдЯрдореИрдкрд┐рдВрдЧ
@рдкреЛрд╕реНрдЯрдореИрдкрд┐рдВрдЧ
@рдкреБрдЯрдореИрдкрд┐рдВрдЧ
@рдбрд┐рд▓реАрдЯрдореИрдкрд┐рдВрдЧ
@рдкреИрдЪрдореИрдкрд┐рдВрдЧ
@RequestParam
@RequestHeader
@рдореИрдЯреНрд░рд┐рдХреНрд╕рд╡реЗрд░рд┐рдПрдмрд▓
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (рдЖрдВрд╢рд┐рдХ)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдмрд╛рдд рдХреА рднреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрд╡рд╛рд░реНрдХрд╕ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдУрдЖрд░рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЗрдкреАрдП рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ: рдХреНрд╡рд╛рд░реНрдХрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рддрд╛рд▓рд┐рдХрд╛ 4 рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВред
╨Т
рддрд╛рд▓рд┐рдХрд╛ 4. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдЙрджрд╛рд╣рд░рдг
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);
}
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдПрдкреАрдЖрдИ
рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛
рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдирд┐рд░реНрдорд╛рдг рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рджреЛрд╖ рд╕рд╣рдирд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рд░реНрдХрд┐рдЯ-рдмреНрд░реЗрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рддрд╛рд▓рд┐рдХрд╛ 5. рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░реЗрдВрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рджреЛрд╖ рд╕рд╣рдирд╢реАрд▓рддрд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг
@рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕
рддрд░реНрдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛
@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(); //...
}
рдЬрд╛рдБрдЪ рд╕реЗрд╡рд╛рдПрдБ (рд╕реЗрд╡рд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп)
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╡рд┐рд╢реЗрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЛ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдХрд╕реНрдЯрдо рд╣реЗрд▓реНрдердЗрдВрдбрд┐рдХреЗрдЯрд░ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдХреНрдЪреБрдПрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ, рдпрд╣ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реЗрд▓реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЬреАрд╡рдВрддрддрд╛ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рде рдЬреАрд╡рдВрддрддрд╛ рдФрд░ рддрддреНрдкрд░рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реЗрд▓реНрде рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рддрд╛рд▓рд┐рдХрд╛ 6 рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреНрд╡рд╛рд░реНрдХрд╕ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реИ
рддрд╛рд▓рд┐рдХрд╛ 6: рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реЗрд▓реНрде рдПрдкреАрдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг
@рд▓рд╛рдЗрд╡рдиреЗрд╕
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╡рд┐рдлрд▓ рдХрдВрдЯреЗрдирд░реАрдХреГрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд░реАрдмреВрдЯ рдХрд░рддрд╛ рд╣реИ
рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ:
рд╣реЛрд╕реНрдЯ: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 (рдкреНрд░реЛрдореЗрдерд┐рдпрд╕) рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗред рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рддрд╛рд▓рд┐рдХрд╛ 7 рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВред
╨Т
рддрд╛рд▓рд┐рдХрд╛ 7. рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг
@рдЧрд┐рдирд╛ рд╣реБрдЖ
рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдЧрд┐рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдПрдиреЛрдЯреЗрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
@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;
}
рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕рдорд╛рдкрдирдмрд┐рдВрджреБ
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдЯреНрд░рд┐рдХреНрд╕
рдмреБрдирд┐рдпрд╛рджреА рдореЗрдЯреНрд░рд┐рдХреНрд╕
рд╡рд┐рдХреНрд░реЗрддрд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕
рд╕рднреА рдореЗрдЯреНрд░рд┐рдХреНрд╕
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ
рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдЕрдХреНрд╕рд░ рд░реЗрд╕реНрдЯрдлреБрд▓ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд░реЗрд╕реНрдЯрдлреБрд▓ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрдорддреМрд░ рдкрд░ рд░реЗрд╕реНрдЯрдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХреНрд╡рд╛рд░реНрдХрд╕ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рддрд╛рд▓рд┐рдХрд╛ 8 рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВред
╨Т
рддрд╛рд▓рд┐рдХрд╛ 8. рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг
@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());
рдПрдордкреА-рд░реЗрд╕реНрдЯ/рдпреВрдЖрд░рдПрд▓
REST рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
рдкрд░рд┐рдгрд╛рдо
рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рд▓рдХреНрд╖рд┐рдд рдЗрд╕ рдмреНрд▓реЙрдЧ рдореЗрдВ, рд╣рдордиреЗ рдЬрд╛рд╡рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдореВрд▓ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдбрд╛рд▓реА, рдЬреЛ рд╕реИрдХрдбрд╝реЛрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд░реИрдо рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдорд┐рд▓реАрд╕реЗрдХреЗрдВрдб рдХреА рдмрд╛рдд рд╣реИ.
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА, рд╕рд╛рде рд╣реА рдХрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рд╕реНрд░реЛрдд: www.habr.com