рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдмреВрдЯ, рд╡рд╕рдВрдд рдЖ рд░рд╣рд╛ рд╣реИ (рднрд╛рдЧ 2)

рдПрд╡рдЧреЗрдиреА рдПрд╡реЗрд░реНрдмреЛрд░рд┐рд╕реЛрд╡ рдмреЛрд░рд┐рд╕реЛрд╡ ( рдПрдирдПрдПрдП рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреАрдЬ) рдФрд░ рдХрд┐рд░рд┐рд▓ рдЯреЛрд▓рдХрд╡ рдЯреЛрд▓рдЪреЗрд╡ (рд╕рд┐рдпрд╛рди.рдлрд┐рдиреЗрдВрд╕, рдЯреНрд╡рд┐рдЯрд░ ) рдиреЗ рдмреНрд░рд╛рд╡реЛрд╕ рдХреЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЖрдпрд░рди рдмреИрдВрдХ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ рд╣реИред рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рд╕реВрдХреНрд╖реНрдорддрд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред






рд▓реЗрдЦ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред


рдЗрд╕рд▓рд┐рдП, рд╣рд╛рд▓ рддрдХ, рдЧреНрд░рд╛рд╣рдХ рдЖрдпрд╛ рдФрд░ рд╕рд┐рд░реНрдл рдПрдХ рд░реЗрд╡реЗрди рднреЗрдЬрдиреЗ рдХреА рдорд╛рдВрдЧ рдХреАред рдЕрдм рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИред рд╕рд░реНрджреА рдЖ рдЧрдИ рд╣реИ, рджреАрд╡рд╛рд░ рдЧрд┐рд░ рдЧрдИ рд╣реИред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЛрдг рдЬрд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдмрджрд▓ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдкрд╣рд▓реЗ 50% рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реНрдЯрд╛рд░реНрдХреНрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рддреЛ рдЕрдм рд╡реЗ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдЛрдг рдЪреБрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдореЗрдВ рдЛрдг рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдмреИрдВрдХ рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╕реНрдерд┐рдд рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕рд░реНрджреА рдкрд╣рд▓реЗ рд╣реА рдЖ рдЪреБрдХреА рд╣реИ, рдмрд╛рдХреА рд╕рднреА рдореЗрдВ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реА рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдпрд╣ рддрдп рдХрд░рддреА рд╣реИ рдХрд┐ рдЛрдг рджреЗрдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рд╕реЗрд╡рд╛ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХреЗрд╡рд▓ рд╕рд░реНрджрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧреАред


рд╣рдо рдЕрдкрдиреЗ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ:


public class WhiteListBasedProphetService implements ProphetService {  @Override  public boolean willSurvive(String name) {    return false;  } } 

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░реНрдЬ рдЪреБрдХрд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреА рд╕реВрдЪреА рд╣реИред


 spring: application.name: money-raven jpa.hibernate.ddl-auto: validate ironbank: ---:   -  : -: ,   : true 

рдФрд░ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ - ред


 public class ProphetProperties { List<String> ; } 

рдкрд┐рдЫрд▓реЗ рд╕рдордп рдХреА рддрд░рд╣, рд╣рдо рдЗрд╕реЗ рдпрд╣рд╛рдБ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ:


 public class WhiteListBasedProphetService implements ProphetService { private final ProphetProperties prophetProperties; @Override public boolean willSurvive(String name) {   return false; } } 

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рд░рдЦреЗрдВ (рдЬрд╛рджреВ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ):


 @Service @RequiredArgsConstructor public class WhiteListBasedProphetService implements ProphetService { private final ProphetProperties prophetProperties; @Override public boolean willSurvive(String name) {   return false; } } 

рд▓рдЧрднрдЧ рдХрд┐рдпрд╛ рд╣реБрдЖред


рдЕрдм рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЛрдг рдЪреБрдХрд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рд╣реА рджреЗрдирд╛ рд╣реЛрдЧрд╛:


 @Service @RequiredArgsConstructor public class WhiteListBasedProphetService implements ProphetService { private final ProphetProperties prophetProperties; @Override public boolean willSurvive(String name) { return prophetProperties.get().contains(name); } } 

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ: рдкреБрд░рд╛рдиреА рдФрд░ рдирдИ рд╕реЗрд╡рд╛рдПрдВред


 Description Parameter 1 of constructor in com.ironbank.moneyraven.service.TransferMoneyProphecyBackendтАж - nameBasedProphetService: defined in file [/Users/tolkv/git/conferences/spring-boot-ripperтАж - WhileListBackendProphetService: defined in file [/Users/tolkv/git/conferences/spring-boot-ripper... 

рдЗрди рдмреАрдиреНрд╕ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ ред рд╣рдорд╛рд░реА рдирдИ рд╕реЗрд╡рд╛ рдХреЗрд╡рд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВ рд╣реА рдЪрд▓рдиреЗ рджреЗрдВ:


 @Service @Profile(ProfileConstants.) @RequiredArgsConstructor public class WhiteListBasedProphetService implements ProphetService { private final ProphetProperties prophetProperties; @Override public boolean willSurvive(String name) {   return prophetProperties.get().contains(name); } } 

рдФрд░ рдкреБрд░рд╛рдиреА рд╕реЗрд╡рд╛ ред


 @Service @Profile(ProfileConstants.) public class NameBasedProphetService implements ProphetService { @Override public boolean willSurvive(String name) {   return !name.contains("Stark") && ThreadLocalRandom.current().nextBoolean(); } } 

рд▓реЗрдХрд┐рди рд╕рд░реНрджреА рдзреАрд░реЗ-рдзреАрд░реЗ рдЖрддреА рд╣реИред рдЯреВрдЯреА рджреАрд╡рд╛рд░ рдХреЗ рдмрдЧрд▓ рдХреЗ рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░реНрджрд┐рдпреЛрдВ рд╣реИред рд▓реЗрдХрд┐рди рджрдХреНрд╖рд┐рдг рдореЗрдВ рдХрд╣реАрдВ - рдЕрднреА рддрдХ рдирд╣реАрдВред рдпрд╛рдиреА рд╡рд┐рднрд┐рдиреНрди рд╢рд╛рдЦрд╛рдУрдВ рдФрд░ рд╕рдордп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреА рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо рдкреБрд░рд╛рдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдирд╣реАрдВ рдорд┐рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╕рд░реНрджреА рдЖ рдЧрдИ рд╣реИ рдФрд░ рдирдИ рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдмреИрдВрдХ рдХрд░реНрдордЪрд╛рд░реА рдХреБрдЫ рднреА рди рдХрд░реЗрдВ: рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЖрд╡реЗрджрди рджреЗрдВрдЧреЗ рдЬреЛ рд╕рд░реНрджрд┐рдпреЛрдВ рдХреЗ рдЖрдиреЗ рддрдХ рд╕рдорд░ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдФрд░ рдЬрдм рд╕рд░реНрджреА рдЖрддреА рд╣реИ, рддреЛ рд╡реЗ рдЗрд╕реЗ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рдмрджрд▓рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЛ рдорд┐рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реБрд░реВ рдореЗрдВ рджреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реИрдВ: рдмрд┐рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдФрд░ рд╕рд░реНрджрд┐рдпреЛрдВ рдХреЗ рд╕рдордп рдмрд┐рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:




рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рднреА рдмреАрди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рджреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рд╣реИрдВ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред


рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рдПрдХ рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рд▓реМрд╣ рдХрд╛рдиреВрди 2. рдХреЛрдИ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ




рд╣рдо рд╕рдВрджрд░реНрдн рдХреЛ рдЙрдард╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрджрд┐ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрджреА рдкрд╣рд▓реЗ рд╣реА рдЖ рдЧрдИ рд╣реИ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╛ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрд╡рд╛рдж рджреЗрдЦреЗрдВ, рдЬрд┐рд╕рдХрд╛ рдкрд╛рда рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╣ рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП ProphetService рдХрд╛ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред рдЙрд╕реА рд╕рдордп, рдХрд┐рд╕реА рдиреЗ рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред


рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкреЗрдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд╕рдВрджрд░реНрдн рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреБрдЫ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдКрдкрд░ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдХреЗрд╡рд▓ рдРрд╕реЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдВрдЧреЗ (рдФрд░ рдмрд┐рди рдХреА рдХрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ)ред


рдХреНрдпрд╛ рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реНрд░реЛрддрд╛ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдирд╣реАрдВред рдФрд░ рдЗрд╕рдХреЗ рддреАрди рдХрд╛рд░рдг рд╣реИрдВ:


  • рд░реИрд╡реЗрди рдордХреНрдЦреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╢реНрд░реЛрддрд╛ рд╣реИред рд╢реНрд░реЛрддрд╛ рдХреЛ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЧрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рд╕реЗ рди рдХреЗрд╡рд▓ рд╢реНрд░реЛрддрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИред
  • рдЬрдм рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рднрд┐рдиреНрди рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВред рдФрд░ рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рддреЛ рд╡реЗ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдВред
  • рдкреНрд░рд╕рдВрдЧ рд╣рд▓ рд╣реЛрдиреЗ рдкрд░ рд╢реНрд░реЛрддрд╛ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ рдХреЛрдИ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВред рдХреНрдпреЛрдВ рдЗрди рд╕рд╢рд░реНрдд рдкрд╛рдВрдЪ рдорд┐рдирдЯ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рд╕реЗрд╡рд╛ рд▓рдЧрднрдЧ рдмрдврд╝ рдирд╣реАрдВ рдЬрд╛рддреА, рдФрд░ рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХреАрдбрд╝реЗ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдПрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд┐рдирд╛ рдЙрдардирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ (рдорд╛рди рд▓реАрдЬрд┐рдП рдореБрдЭреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдмрд╣реБрдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЛ рдиреАрдЪреЗ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд╢реБрд░реБрдЖрддреА рд╕реНрддрд░ рдкрд░ рдХрд░рддрд╛ рд╣реИред


рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ApplicationContextInitializer ред рдпрд╣ рдПрдХ рдЕрдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╡рд╕рдВрдд рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред




рд╣рдо рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ ConfigurableApplicationContext рдРрдкреНрд▓реАрдХреЗрд╢рди рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╣реИ:


 public class ProfileCheckAppInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { } } 

рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╡рд╣ рдЪреАрдЬ рдЬреЛ рд╕реНрдкреНрд░рд┐рдВрдЧрдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рднреА рд╕рдВрдкрддреНрддрд┐ рдереА, рд╡рд╣ рд╡рд╣рд╛рдВ рдорд┐рд▓ рдЧрдИред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдирдореЗрдВ рдкреНрд░реЛрдлрд╛рдЗрд▓ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред


рдпрджрд┐ рд╡рд╣рд╛рдВ рдХреЛрдИ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред


 public class ProfileCheckAppInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { if applicationContext.getEnvironment().getActiveProfiles().length == 0 {     throw new RuntimeException("  !");   } } } 

рдЕрдм рдЖрдкрдХреЛ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ.рдлреИрдХреНрдЯрд░реАрдЬ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


 org.springframework.boot.context.properties.EnableConfigurationProperties=com.ironbank.moneyraven.starter.IronConfiguration org.springframework.context.ApplicationContextInitializer=com.ironbank.moneyraven.starter.ProfileCheckAppInitializer 

рдКрдкрд░ рд╕реЗ, рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ ApplicationContextInitializer рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБ рд╣реИред ApplicationContextInitializer рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╕рдВрджрд░реНрдн рдмрд╕ рдмрдирдирд╛ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЕрднреА рддрдХ рдХреЛрдИ рдбрд┐рдмреНрдмреЗ рдирд╣реАрдВ рд╣реИрдВред


рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдЕрдЧрд░ рд╣рдордиреЗ ApplicationContextInitializer рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рд╢реНрд░реЛрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕реЗ рдХрд┐рд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЛрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИред рдпрд╛рдиреА рдЗрд╕реЗ рдЕрднреА рддрдХ рдЗрдВрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред


рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рддреЗрдЬреА рд╕реЗ рдЧрд┐рд░ рдЧрдпрд╛ рдерд╛ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдХрд┐ рд╣рдо рдмрд┐рдирд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рдереЗред рдЕрдм рдХреБрдЫ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рд░реЗрд╡реЗрди рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред


ApplicationContextInitializer - рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╕рдВрджрд░реНрдн рдкрд╣рд▓реЗ рд╣реА рдмрдирд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред




рдкрд░реНрдпрд╛рд╡рд░рдг рдХреМрди рдмрдирд╛рддрд╛ рд╣реИ? рдХрд╛рд░реНрд▓рд╕рди - SpringBootApplication ред рд╡рд╣ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рднрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдЪреАрдЬреЛрдВ рдХреЛ @value рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рд╕рд┐рд░реНрдл рдкреНрд░реЛрдлрд╛рдЗрд▓ рдорд┐рд▓рд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдЧреБрдг рдпрд╣рд╛рдВ рдЖрддреЗ рд╣реИрдВ:


  • рдЬреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ;
  • рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ;
  • рдкреНрд░рдгрд╛рд▓реА;
  • рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдиреА;
  • рдЖрд╡реЗрджрди рдЧреБрдгреЛрдВ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд;
  • рдХреБрдЫ рдЕрдиреНрдп рд╕рдВрдкрддреНрддрд┐-рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрдВрдЬреАрдХреГрддред

рдпрд╣ рд╕рдм рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡рд╕реНрддреБ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдпрд╣ рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕рдХреНрд░рд┐рдп рд╣реИрдВред рдкрд░реНрдпрд╛рд╡рд░рдг рд╡рд╕реНрддреБ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рд╣реИ рдЬреЛ рдЙрд╕ рд╕рдордп рдореМрдЬреВрдж рд╣реЛрддреА рд╣реИ рдЬрдм рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕рдВрджрд░реНрдн рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред


рдореИрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреНрдпрд╛ рд╣реЛрдЧреА рдпрджрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдкреВрдЫрдирд╛ рднреВрд▓ рдЧрдП (рд╣рдо рд╕рдм рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмреИрдВрдХ рдХрд░реНрдордЪрд╛рд░реА рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмрд┐рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╕рд╣рд╛рдп рд╣реИрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рдЙрдирдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗ, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛ рдПрдХ рдРрд╕реА рдЪреАрдЬрд╝ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдЬреЛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдЧреА - рдпрд╛ рдирд╣реАрдВ - рд╕рдбрд╝рдХ рдкрд░ рддрд╛рдкрдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред рдФрд░ рдПрдХ рдФрд░ рдирдпрд╛ рдореИрдЬрд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣рдо рд╕рднреА рдХреЛ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ - EnvironmentPostProcessor , рдХреНрдпреЛрдВрдХрд┐ ApplicationContextInitializer рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдФрд░ ApplicationContextInitializer рд╕реЗ рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ EnvironmentPostProcessor ред


рд╣рдо рдлрд┐рд░ рд╕реЗ рдПрдХ рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ ConfigurableEnvironment рдХрд░рдиреЗ ConfigurableEnvironment SpringApplication рдореЗрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ ConfigurableContext SpringInitializer рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА SpringInitializer рдореЗрдВ рдореМрдЬреВрдж рд╣реИ SpringInitializer рдпрд╣ рдпрд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ; рдХреЗрд╡рд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рд╣реИ)


 public class ResolveProfileEnvironmentPostProcessor implements EnvironmentPostProcessor { @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { } } 

рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рд╣рдо рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ getActiveProfiles рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХреА рд╣реИ, рддреЛ рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдореМрд╕рдо рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред


рдФрд░ рджреВрд╕рд░рд╛ - рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЕрднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд░реНрджреА рдпрд╛ рдЧрд░реНрдореА рдХрд╛ рдореМрд╕рдо рд╣реИред -300 рдХрд╛ рддрд╛рдкрдорд╛рди рд╣рдо рд╡рд╛рдкрд╕ рдХрд░реЗрдВрдЧреЗред


 public class ResolveProfileEnvironmentPostProcessor implements EnvironmentPostProcessor { @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { if (environment.getActivePrifiles().length == 0 && getTemperature() < -272) {   } } public int getTemperature() { return -300; } } 

рдЗрд╕ рд╢рд░реНрдд рдХреЗ рддрд╣рдд, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд░реНрджреА рд╣реИ, рдФрд░ рд╣рдо рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:


 public class ResolveProfileEnvironmentPostProcessor implements EnvironmentPostProcessor { @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {   if (environment.getActivePrifiles().length == 0 && getTemperature() < -272) { environment.setActiveProfiles("");   } else { environment.setActiveProfiles("");   } } public int getTemperature() { return -300; } } 

рдЕрдм рд╣рдореЗрдВ Spring.factories рдореЗрдВ EnvironmentPostProcessor рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


 org.springframework.boot.context.properties.EnableConfigurationProperties=com.ironbank.moneyraven.starter.IronConfiguration org.springframework.context.ApplicationContextInitializer=com.ironbank.moneyraven.starter.ProfileCheckAppInitializer org.springframework.boot.env.EnvironmentPostProcessor=com.ironbank.moneyraven.starter.ResolveProfileEnvironmentPostProcessor 

рдирддреАрдЬрддрди, рдЖрд╡реЗрджрди рдПрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЙрддреНрдкрд╛рджрди рд╣реИ, рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХрд┐рд╕ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖред рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ, рд╣рдордиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╣рдорд╛рд░реА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ ред рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЧрд┐рд░ рдирд╣реАрдВ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ ApplicationContextInitializer , рдЬреЛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЕрдЧрд▓рд╛ рдЖрддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо:


 public class ResolveProfileEnvironmentPostProcessor implements EnvironmentPostProcessor { @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {   if (getTemperature() < -272) {     environment.setActiveProfiles("");   } else {     environment.setActiveProfiles("");   } } private int getTemperature() {   return -300; } } 

рд╣рдордиреЗ EnvironmentPostProcessor рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬреЛ ApplicationContextInitializer рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреМрди рдЪрд▓рд╛рддрд╛ рд╣реИ?




рдпрд╣ рдлреНрд░реАрдХ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, ApplicationListener рдФрд░ EnvironmentPostProcessor рдХрд╛ рдирд╛рдЬрд╛рдпрдЬ рдмреЗрдЯрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ ApplicationListener рдФрд░ EnvironmentPostProcessor рджреЛрдиреЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕реЗ ConfigFileApplicationListener рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВ "рдХреЙрдиреНрдлрд╝рд┐рдЧрд╛рдЗрд▓" - рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛)ред


рд╣рд┐рдо рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрд▓рд╕рди рд╣реИ, рдЕрд░реНрдерд╛рддреН рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: ApplicationPreparedEvent рдФрд░ ApplicationEnvironmentPreparedEvent ред рд╣рдо рдЕрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХреМрди рдлреЗрдВрдХрддрд╛ рд╣реИред рдПрдХ рдФрд░ рдкрд░рдд рд╣реИ (рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдорддрд░ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╡рд╕рдВрдд рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЗрд╕ рдЪрд░рдг рдореЗрдВ), рдЬреЛ рдПрдХ рдРрд╕реА рдШрдЯрдирд╛ рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдирд┐рд░реНрдорд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реИ (Application.yml, рдЧреБрдг, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░, рдкрд╛рд░реНрд╕, рдЖрджрд┐) )ред
ApplicationEnvironmentPreparedEvent рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╢реНрд░реЛрддрд╛ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╕рднреА EnvironmentPostProcessor рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВред




рдЙрд╕рдХреЗ рдмрд╛рдж, рд╡рд╣ SpringFactoriesLoader рдХреЛ рд╕рдм рдХреБрдЫ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдСрд░реНрдбрд░ рдХрд┐рдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреН рд╕рднреА EnvironmentPostProcessor , рд╕реНрдкреНрд░рд┐рдВрдЧ.рдлреИрдХреНрдЯрд░реАрдЬ рдХреЛред рдлрд┐рд░ рдпрд╣ рдкреВрд░реЗ EnvironmentPostProcessor рдХреЛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рднрд░ рджреЗрддрд╛ рд╣реИред




рдФрд░ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рднреА рдПрдХ EnvironmentPostProcessor (рд╕рдорд╡рд░реНрддреА) рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдЦреБрдж рдХреЛ рд╡рд╣рд╛рдВ рдзрдХреЗрд▓рддрд╛ рд╣реИ,

рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдпрд╣ рдЙрдиреНрд╣реЗрдВ postProcessEnvironment рджреЗрддрд╛ рд╣реИ, рдЙрдирдХреЗ рд╕рд╛рде рд╕рд╡рд╛рд░реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ postProcessEnvironment рдХреЙрд▓ postProcessEnvironment ред


рдЗрд╕ рддрд░рд╣, рд╕рднреА postProcessEnvironment рдХреЛ SpringApplicationInitializer рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, ConfigFileApplicationListener рдирд╛рдордХ рдПрдХ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛ EnvironmentPostProcessor ConfigFileApplicationListener рднреА рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИред


рдЬрдм рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдХрд╛рд░реНрд▓рд╕рди рдХреЗ рдкрд╛рд╕ рд▓реМрдЯ рдЖрддрд╛ рд╣реИред


рдпрджрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдХрд╛рд░реНрд▓рд╕рди ApplicationInitializer рд╕рд╛рде рд╕рдВрджрд░реНрдн рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рд╣реИ, рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдо рдЧрд┐рд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреАред рдлрд┐рд░ рд╢реБрд░реБрдЖрдд рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рдеред


рдКрдкрд░ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рджрд░реНрд╢рд╛рддреА рд╣реИ рдХрд┐ рд╡рд╕рдВрдд рднреА рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдРрд╕реЗ рдПрд▓рд┐рдпрдВрд╕ рд╕рдордп-рд╕рдордп рдкрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЪрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рдЕрдм рд╣рдо рдЗрд╕ рдЕрдЬреАрдм рдкреНрд░рд╛рдгреА рдХреЗ рджреВрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рддрд░рдл рд╢реНрд░реЛрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реА рддрд░рдл EnvironmentPostProcessor ред




EnvironmentPostProcessor рддрд░рд╣ EnvironmentPostProcessor рдпрд╣ application.yml, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ, рд╕рднреА рддрд░рд╣ рдХреЗ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓, рдХрдорд╛рдВрдб рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯреНрд╕ рдЖрджрд┐ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдПрдХ рд╢реНрд░реЛрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╣ рджреЛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрди рд╕рдХрддрд╛ рд╣реИ:


  • ApplicationPreparedEvent
  • ApplicationEnvironmentPreparedEvent

рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ:




рдпреЗ рд╕рднреА рдЖрдпреЛрдЬрди рдкреБрд░рд╛рдиреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдереЗред рдФрд░ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдКрдкрд░ рдмрд╛рдд рдХреА рдереА, рд╡реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреА рдШрдЯрдирд╛рдПрдБ рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдерд╛)ред рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкреВрд░рд╛ рдЭреБрдВрдб рд╣реИред рдпреЗ рдореБрдЦреНрдп рд╣реИрдВ:


  • ApplicationStartingEvent
  • ApplicationEnvironmentPreparedEvent
  • ApplicationPreparedEvent
  • ContextRefreshedEvent
  • EmbeddedServletContainerInitializedEvent
  • ApplicationReadyEvent
  • ApplicationFailedEvent

рдпрд╣ рд╕реВрдЪреА рд╕рднреА рд╕реЗ рджреВрд░ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдФрд░ рд╡рд╕рдВрдд рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ ContextRefreshedEvent ), рдЖрджрд┐ред


рдЪреЗрддрд╛рд╡рдиреА рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рд╕рднреА рд╣рдо рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреЗрд╡рд▓ рдирд╢реНрд╡рд░ - рд╡рд┐рднрд┐рдиреНрди рджрд╛рджреА - рдмрд╕ рд╡рд╕рдВрдд рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрди рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдлреЗрдВрдХрддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ.рдлреИрдХреНрдЯрд░реАрдЬ рдХреЗ рдЧреБрдкреНрдд рддрдВрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реНрд░реЛрддрд╛ рдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ.рдлреИрдХреНрдЯрд░реАрдЬ рдХреЗ рд╕реНрддрд░ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯ-рдЕрдк рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдг рд╕реЗ рдЖрдкрдХреЛ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИред




рдирддреАрдЬрддрди, рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдХрд╛рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЕрдиреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ - рдЬреИрд╕реЗ рдХрд┐ EnvironmentPostProcessor рдФрд░ ApplicationContextInitializer ред


рдЖрдк рд╢реНрд░реЛрддрд╛рдУрдВ рдкрд░ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдмрджрд╕реВрд░рдд рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЙрди рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ ContextRefreshedEvent рдФрд░ ContextStartedEvent , рддреЛ рдЖрдкрдХреЛ рд╢реНрд░реЛрддрд╛ рдХреЛ рдПрдХ рд╕реЗрдо рдХреА рддрд░рд╣, рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдЕрдиреНрдпрдерд╛ рдпрд╣ рдмрд╣реБрдд рджреЗрд░ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ)ред рдЗрд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ.рдлреИрдХреНрдЯрд░реАрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рдЗрд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рд╡реИрд╕реЗ, рдЬрдм рд╣рдордиреЗ рдЗрд╕ рд╕реВрдЪреА рдХреЛ рджреЗрдЦрд╛, рддреЛ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдХрдм ContextStartedEvent рдФрд░ ContextStoppedEvent рдЖрдЧ рд▓рдЧреА?




рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпреЗ рдШрдЯрдирд╛рдПрдВ рдХрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рд╣рдо рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╣реИрд░рд╛рди рдереЗ рдХрд┐ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛ рд╕рдХреЗред рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЕрдм рд╣рдо рдЬрд┐рди рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ рд╡реЗ рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдЖрдк рд╕рдВрджрд░реНрдн рд╕реЗ рдЬрдмрд░рджрд╕реНрддреА рддрд░реАрдХреЗ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ:


  • ctx.start(); -> ContextStartedEvent
  • ctx.stop(); -> ContextStoppedEvent

рдпрд╛рдиреА SpringApplication.run рддрднреА SpringApplication.run рдЬрдм рд╣рдо SpringApplication.run рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, ctx.start(); рдХреЛ рдЗрд╕рдореЗрдВ рд╕реЗ ctx.start(); рдпрд╛ ctx.stop(); ред рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди, рдлрд┐рд░, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБ рджрд┐рдпрд╛ред


рдХреНрдпрд╛ рд╡рд╕рдВрдд рдХрд╛ рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЕрдкрд╡рд╛рдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:


  • ctx.stop(); (1)
  • ctx.start(); (2)
  • ctx.close(); (3)
  • ctx.start(); (4)

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдкрд░ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ ctx.close(); рдмрд╛рдж ctx.close(); рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреЙрд▓ ctx.stop(); ctx.start(); рд╕реЗ рдкрд╣рд▓реЗ ctx.start(); - рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╡рд╕рдВрдд рдмрд╕ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ - рд╡реЗ рд╕рд┐рд░реНрдл рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИрдВ)ред


рдЕрдкрдиреЗ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦреЗрдВ, рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕реБрдиреЗрдВ, рдЕрдкрдиреЗ рдХрд╛рдиреВрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдПрдВ, ctx.stop(); рдкрд░ рдХреНрдпрд╛ рдХрд░реЗрдВ ctx.stop(); , рдФрд░ ctx.start(); рдкрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ ctx.start(); ред


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЖрд╡реЗрджрди рдХреА рдмрд╛рддрдЪреАрдд рдФрд░ рдЬреАрд╡рди рдЪрдХреНрд░ рдЖрд░реЗрдЦ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:




рдпрд╣рд╛рдБ рдХреЗ рд░рдВрдЧ рдЬреАрд╡рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд▓ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред


  • рдмреНрд▓реВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╣реИ, рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХреЛрдВ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯреЙрдордХреИрдЯ рд╕реЗрд╡рд╛ рдЕрдиреБрд░реЛрдз рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдкреВрд░рд╛ рд╕рдВрджрд░реНрдн рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рднреА рд╕реЗрдо рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдЖрджрд┐ред
  • рдЧреНрд░реАрди - рдПрдХ рдШрдЯрдирд╛ ContextRefreshedEvent рдЖ рдЧрдИ рд╣реИ рдФрд░ рд╕рдВрджрд░реНрдн рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдХреНрд╖рдг рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реНрд░реЛрддрд╛ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрдк рдпрд╛ рддреЛ ApplicationListener рдПрдиреЛрдЯреЗрд╢рди рд╕реЗрдЯ рдХрд░рдХреЗ, рдпрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд╕рд╛рде рдПрдкреЙрдирд╛рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдирддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ.рдлреИрдХреНрдЯрд░реАрдЬ (рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдкреНрд░рд┐рдВрдЧ рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ) рдореЗрдВ рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рдирд▓рд┐рд╕реНрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рд░рд┐рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
  • рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рд╕реНрдкреНрд░рд┐рдВрдЧрдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рд╣реИ рдЬреЛ рд╣рдордиреЗ рддрдм рдХрд┐рдпрд╛ рдерд╛ рдЬрдм рд╣рдо рдирд┐рдпрдорд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдереЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ WebXMLред
  • рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдХреЗ рдЪрд░рдг рднреА рд╣реИрдВред рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди, рдХрд╣рд╛рдБ рдФрд░ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • рдЕрднреА рднреА рдПрдХ рдЧреНрд░реЗ рд╕реНрдЯреЗрдЬ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЫреЗрдбрд╝рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдпрд╣ рд╡рд╣ рдЪрд░рдг рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╕реНрдкреНрд░рд┐рдВрдЧрдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рдХреЛрдб рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ)ред

рдпрджрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛, рджреЛ-рднрд╛рдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рджреМрд░рд╛рди, рд╣рдо рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рдЧрдП: рд╣рдордиреЗ рдмрд╣реБрдд рдЕрдВрдд рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛, рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╕реЗ рдЙрдбрд╝ рдЧрдпрд╛, рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛, рдЖрджрд┐ред рдЕрдм рдЪрд▓реЛ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рдЖрдк рдЕрдкрдиреЗ рдореБрдЦреНрдп SpringApplication.run ред рд╡рд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдкрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдРрд╕реА рдШрдЯрдирд╛ рдлреЗрдВрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╢реНрд░реЛрддрд╛ EnvironmentPostProcessor рдкрд╛рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рджреЗрдВред рдПрдХ рдмрд╛рд░ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рдВрджрд░реНрдн (рдХрд╛рд░реНрд▓рд╕рди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдХрд╛рд░реНрд▓рд╕рди рдиреЗ рд╕рдВрджрд░реНрдн рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдФрд░ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд░рдВрднрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рдпрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕рдВрджрд░реНрдн рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд╣реА рдЪреАрдЬ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рддрд░рд╣ рд╣реЛрдиреЗ рд▓рдЧрддреА рд╣реИ, рдЬрдм рд╕рдВрджрд░реНрдн рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ - BeanFactoryPostProcessor , BeanPostProcessor , рд╕реЗрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕рдВрдд рдХрд░рддрд╛ рд╣реИред


рдХреИрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реИ?


рд╣рдордиреЗ рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИред


рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдЪреАрдЬ рдереА рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рд╡реЗ рдпрд╣ рд╕реЛрдЪрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рдХрд┐ рдЖрдЦрд┐рд░рдХрд╛рд░, рдЙрдирдХрд╛ рдЖрд╡реЗрджрди рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдкреНрд░рд╢рд╛рд╕рди рдЗрд╕реЗ рдЯреЙрдордХреИрдЯ, рдЬреЗрдмреЙрд╕ рдпрд╛ рд╡реЗрдмрд▓реЙрдЬрд┐рдХ рдореЗрдВ рдЪрд▓рд╛рдПрдЧрд╛? рдмрд╕ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛


рддреЛ рд╣рдорд╛рд░реЗ рд▓реЙрдиреНрдЪ рдХреЗ рддрд░реАрдХреЗ рдХреНрдпрд╛ рд╣реИрдВ?


  • рдЯреЙрдордХреИрдЯ рдпреБрджреНрдз;
  • рд╡рд┐рдЪрд╛рд░;
  • java -jar/war ред

рдЯреЙрдореНрдХрдЯ рдПрдХ рд╡реНрдпрд╛рдкрдХ рдкреНрд░рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рд╣рдордиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдирд╣реАрдВ рдХреА рд╣реИред


рд╕рд┐рджреНрдзрд╛рдВрдд рднреА, рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рдкреЗрдЪреАрджрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рдореИрдВ рдиреАрдЪреЗ рдмрддрд╛рдКрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдЖрдЗрдбрд┐рдпрд╛ рдореЗрдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рджреЗрдЦрддреА рд╣реИ рдХрд┐ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд┐рд╕ рддрд░рд╣ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд▓рд╛рдПрдЧрд╛ред
рдпрджрд┐ рд╣рдо java -jar , рддреЛ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдХреНрд▓рд╛рд╕рдкрд╛рде рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рдПред


2001 рдореЗрдВ рд▓реЛрдЧреЛрдВ рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛? рдЙрдиреНрд╣реЛрдВрдиреЗ java -jar рд▓рд┐рдЦрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдЬрд╛рд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП, рдлрд┐рд░ рдПрдХ рд╕реНрдкреЗрд╕, classpath=... рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рд╡рд╣рд╛рдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 150 рдПрдордмреА рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВред рдФрд░ рдпрд╣ рд╕рдм рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХреЛрдИ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╕рд┐рд░реНрдл рд▓рд┐рдЦрддреЗ рд╣реИрдВ: java -jar , рдХреМрди рд╕рд╛ рдЬрд╛рд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рд╣реИред рдХрд┐рд╕реА рддрд░рд╣ рд╡рд░реНрдЧрдкрде рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЕрднреА рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рдо рдЕрднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред


рдЖрдЗрдП рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреА рддреИрдпрд╛рд░реА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рдЯреЙрдордХреИрдЯ рдХреЗ рдмрд┐рдирд╛ рднреА рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк java -jar рдмрдирд╛рдПрдВ, рдЖрдкрдХреЛ рдЬрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрд╣ рдЬрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдпреБрджреНрдз рдПрдирд╛рд▓реЙрдЧ, рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЕрдВрджрд░ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдЯреЙрдордХреИрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред


 <build> <plugins>    <plugin>       <groupId>org.springframework.boot</groupId>       <artifactId>spring-boot-maven-plugin</artifactId>    </plugin> </plugins> </build> 

рдЬрдм рд╣рдордиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛, рддреЛ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ POM рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рджрд░реНрдЬ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ред рдпрд╣рд╛рдВ, рд╡реИрд╕реЗ, рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХред jar, Maven Gradle , jar . :




:




war-.


, .


, jar. java -jar , , , , org.springframework.boot . . org.springframework.boot package. META-INF




Spring Boot MANIFEST ( Maven Gradle), main class, jar-.


, jar- : -, main-. java -jar -jar, , main-class-.


, , MANIFEST, main-class , main ( Idea). , . class path? java -jar , main, , тАФ main, . MANIFEST JarLauncher.




рдпрд╛рдиреА , , JarLauncher. , main, class path.
, main? property тАФ Start-class .


рдпрд╛рдиреА . class path jar. , тАФ org.springframework.boot тАФ class path. org.springframework.boot.loader.JarLauncher main-class. , main-class . class path, BOOT-INF ( lib class , ).


RavenApplication, properties class BOOT-INF , , Tomcat , BOOT-INF/lib/ . JarLauncher classpath, тАФ , start-class . Spring, ContextSpringApplication тАФ flow, .


, start-class-? , . , .


, . property, mainClass , MANIFEST Start-Class , mainClass тАФ JarLauncher.


, mainClass, ? . Spring boot plugin тАУ mainClass:


  • тАУ . тАФ main class;
  • тАУ , mainClass @SpringBootApplication , , , ;
  • тАФ exception , main class, , jar- . рдпрд╛рдиреА , , . , , main class.
  • @SpringBootApplication тАФ .

JarLauncher . Tomcat WarLauncher, war- , jar-.


, java -jar . ? рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред .


 <build> <plugins>    <plugin>       <groupId>org.springframework.boot</groupId>       <artifactId>spring-boot-maven-plugin</artifactId>       <configuration>          <executable>true</executable>       </configuration>    </plugin> </plugins> </build> 

<configuration> <executable>true</executable> Gradle , :


 springBoot { executable = true } 

jar executable jar. .


, . Windows , exe-, . Spring Boot, .. jar, . , .
?


(jar тАФ zip-, ):




Spring Boot - .


-, jar-. , , тАФ #!/bin/bash . .


. exit 0 - тАФ zip-.




, zip- тАФ 0xf4ra . , , .




(, ..).


jar :


  • тАФ ;
  • , " bash" ( #!/bin/bash );
  • bash ;
  • exit 0 ;
  • java -jar тАФ jar-, ;
  • java -jar zip- jar-, , , .

рдирд┐рд╖реНрдХрд░реНрд╖


, Spring Boot тАФ , , .


-, . , Spring, Spring тАФ Spring Boot. , , тАФ , , , . , , Spring, Spring Boot .


-, @SpringBootApplication , best practice, Spring-.


тАФ , , . property environment variable, var arg , , JSON. @value , . configuration properties , , , . , Spring . , , .


. , . Spring, Spring Boot . - , , , .




рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХрд╛ рдорд┐рдирдЯред 19-20 Joker 2018, ┬л [Joker Edition]┬╗ , ┬лMicronaut vs Spring Boot, ?┬╗ ред , Joker . .

Source: https://habr.com/ru/post/hi425333/


All Articles