Adaty Spring Framework wakalaryna goşmaça, SpringApplication
goşmaça käbir programmanyň wakalaryny iberýär.
Käbir wakalar ApplicationContext
döredilmezinden öň başlaýar, şonuň üçin bu wakalaryň diňleýjisini @Bean
annotasiýasy hökmünde belläp bilmez. SpringApplication.addListeners(…)
ýa-da SpringApplicationBuilder.listeners(…)
usuly bilen olary belläp bilersiňiz.
Eger programmanyň döredilmegine garaşman, ähli diňleýjileri awtomatiki belläp goýmak isleseňiz, proýekte META-INF/spring.factories
faýlyny goşup, diňleýjilere org.springframework.context.ApplicationListener
açary bilen salgylanmak bolar, aşakdaky mysalyň görkezilişi ýaly:
org.springframework.context.ApplicationListener=com.example.project.MyListener
Programmanyň ýerine ýetirilmegi bilen birlikde wakalar şu tertipde iberilýär:
-
Waka
ApplicationStartingEvent
ýerine ýetirilişiň başynda, emma diňleýjileri we inisializatorlary belläp goýmakdan başga işlerden öň iberilýär. -
Waka
ApplicationEnvironmentPreparedEvent
kontekste ulanyljakEnvironment
belli bolanda, emma kontekstiniň döredilmeginden öň iberilýär. -
Waka
ApplicationContextInitializedEvent
ApplicationContext
taýýar we ApplicationContextInitializers çagyrylanda, emma bean belirleýjileri ýüklenmezinden öň iberilýär. -
Waka
ApplicationPreparedEvent
täzeleme başlamazdan öň, emma bean belirleýjileri ýüklenenden soň iberilýär. -
Waka
ApplicationStartedEvent
kontekst täzelenenden soň, emma programmanyň ýerine ýetirilmeginiň we komanda setiriniň ähli araçalary çagyrylmadan öň iberilýär. -
Şeýle hem,
LivenessState.CORRECT
bilenAvailabilityChangeEvent
wakasy programmanyň işläp ýörendigini görkezmek üçin omöürlik bilen iberilýär. -
Waka
ApplicationReadyEvent
komanda setiri we programmalaryň ýerine ýetiriliş araçalary çagyrylandan soň iberilýär. -
Şeýle hem,
ReadinessState.ACCEPTING_TRAFFIC
bilenAvailabilityChangeEvent
wakasy, programmanyň soraglary kabul etmäge taýyndygyny görkezmek üçin iberilýär. -
Waka
ApplicationFailedEvent
başlangyçda aýratynlykda bir zat nji bolanda iberilýär.
Ýokardaky sanaw diňe SpringApplicationEvent
wakalaryny öz içine alýar, olar SpringApplication
bilen baglanyşykly. Olar çagyrşyk wagtynda ApplicationPreparedEvent
we ApplicationStartedEvent
arasynda hem aşakdaky wakalar çap edilýär:
-
Waka
WebServerInitializedEvent
WebServer
taýýar bolandan soň iberilýär.ServletWebServerInitializedEvent
weReactiveWebServerInitializedEvent
serwer we reaktiw serwer wariantydyr. -
Waka
ContextRefreshedEvent
ApplicationContext
täzelenende iberilýär.
Wakalar Spring Framework-iň wakalaryny çap etmek mehanizmi arkaly iberilýär. Bu mehanizmiň bir bölegi, çaga kontekstinde diňleýjilere çap edilen wakanyň, islendik ata-baba kontekstinde hem diňleýjilere çap edilýändigini üpjün edýär. Şeýlelikde, eger siziň programmäňiz SpringApplication
nusgalarynyň hierarhiýasyny ulanýan bolsa, diňleýji belli bir wakanyň birnäçe nusgasyny alar.
Diňleýji öz konteksti üçin wakany çaga konteksti üçin wakadan tapawutlandyrmak üçin, ol öz programmasynyň kontekstini girizilmegi talap etmeli we soňra girizilen konteksti wakanyň konteksti bilen deňeşdirmeli. Kontekst ApplicationContextAware
bilen ýa-da diňleýji bean bolan bolsa, @Autowired
annotasiýasy bilen girizilip bilner.
Web Gurşaw
SpringApplication
islenýän görnüşde ApplicationContext
döretmäge synanyşýar. WebApplicationType
kesgitlemek üçin aşakdaky algoritm ulanylýar:
-
Spring MVC bar bolsa,
AnnotationConfigServletWebServerApplicationContext
ulanylýar. -
Spring MVC ýok bolsa we Spring WebFlux bar bolsa,
AnnotationConfigReactiveWebServerApplicationContext
ulanylýar. -
Başga ýagdaýda
AnnotationConfigApplicationContext
ulanylýar.
Bu Spring MVC we täze WebClient
-i bir programmada ulansaňyz, Spring MVC yza öwrüler diýmekdir. Muňa ýeňillik bilen setWebApplicationType(WebApplicationType)
çagyryp, üýtgetme edip bilersiňiz.
Çäklendirilen ýagdaýda ApplicationContext
-iň ulanylýan görnüşine doly gözegçilik edip bilersiňiz, setApplicationContextClass(…)
ulanyp.
SpringApplication
-ni ulanyp,
setWebApplicationType(WebApplicationType.NONE)
çagyrmak islegli bolup bilner.
Programma Argumentlerine Giriziň
Programmanyň argumentlerine girmegiň zerurlygy bar bolsa, SpringApplication.run(…)
geçilen, org.springframework.boot.ApplicationArguments
bean girizip bilersiňiz. ApplicationArguments
interfeýsi String[]
ham argumentlerine we option
hem-de non-option
analiz edilen argumentlerine girmegi üpjün edýär, aşakda görkezilişi ýaly:
@Component public class MyBean { public MyBean(ApplicationArguments args) { boolean debug = args.containsOption("debug"); List<String> files = args.getNonOptionArgs(); if (debug) { System.out.println(files); } // eger "--debug logfile.txt" parameteri bilen başlansa, ["logfile.txt"] çykýar. } }
@Component class MyBean(args: ApplicationArguments) { init { val debug = args.containsOption("debug") val files = args.nonOptionArgs if (debug) { println(files) } // eger "--debug logfile.txt" parameteri bilen başlansa, ["logfile.txt"] çykýar. } }
CommandLinePropertySource
-y hem belläp goýýar. Bu aýratynlykda programma argümentlerini
@Value
annotasiýasy bilen girizmäge mümkinçilik berýär.
ApplicationRunner ýa-da CommandLineRunner ulanmak
Eger SpringApplication
-ni işledenden soň, belli bir kod ýerine ýetirmek isleseňiz, ApplicationRunner
ýa-da CommandLineRunner
interfeýslerini amala aşyryp bilersiňiz. Iki interfeýs hem meňzeş işledilýär we SpringApplication.run(…)
gutulmanka bir gezek çaýrylan run
usuly üpjün edýär.
CommandLineRunner
interfeýsi programa argumentlerine tekst setirleriniň şekilinde girmäge mümkinçilik berýär, şol bir wagtda ApplicationRunner
ozaly ApplicationArguments
interfeýsi ulanylýar. Aşakda run
usuly bilen CommandLineRunner
görkezen:
@Component public class MyCommandLineRunner implements CommandLineRunner { @Override public void run(String... args) { // bir zatlar edýäris... } }
@Component class MyCommandLineRunner : CommandLineRunner { override fun run(vararg args: String) { // bir zatlar edýäris... } }
Eger birnäçe CommandLineRunner
ýa-da ApplicationRunner
bean ýazylan bolsa we olaryň bellenenden öň bellenilmegi zerur bolsa, org.springframework.core.Ordered
interfeýsini hem-de org.springframework.core.annotation.Order
annotasiýasyny ulanyp bilersiňiz.
Programmadan Çykmak
Her SpringApplication
registrasiýa çykaryş başlygy JVM-de, programmanyň kontekstiniň tertipli ýapylmagy üçin üpjün etmek. Spring-iň ähli ömür dolanşygy çagyryşlary (meselem, DisposableBean
interfeýsi ýa-da @PreDestroy
annotasiýasy) ulanyp bilersiňiz.
Mundan başga-da, bean-lar org.springframework.boot.ExitCodeGenerator
interfeýsini amala aşyryp biler, eger olara belli bir çykaryş kodyny return etmek zerur bolsa, SpringApplication.exit()
çagyrylanda. Bu çykaryş kodyny System.exit()
geçip, ýagdaý kodyny return etmek üçin ulanyp bilersiňiz, aşakdaky mysalda görkezilen gibi:
@SpringBootApplication public class MyApplication { @Bean public ExitCodeGenerator exitCodeGenerator() { return () -> 42; } public static void main(String[] args) { System.exit(SpringApplication.exit(SpringApplication.run(MyApplication.class, args))); } }
@SpringBootApplication class MyApplication { @Bean fun exitCodeGenerator() = ExitCodeGenerator { 42 } } fun main(args: Array<String>) { exitProcess(SpringApplication.exit( runApplication<MyApplication>(*args))) }
Mundan başga-da, ExitCodeGenerator
interfeýsi aýratynlyklara hem göçürilip bilner. Şeýle aýratynlyk ýüze çykanda, Spring Boot getExitCode()
usuly bilen geçirilen çykgynçlyk koduny return edýär.
Eger birnäçe ExitCodeGenerator
bar bolsa, ilkinji boljak çykgynçlyk kody ulanylýar. Generatorlaryň çagyryş tertibine gözegçilik etmek üçin org.springframework.core.Ordered
interfeýsini hem-de org.springframework.core.annotation.Order
annotasiýasyny ulanyň.
Işleriň Dolandyryşy
Programma bilen baglanyşykly dolandyryşlaryň funksiýalaryny işjeňleşdirmek üçin spring.application.admin.enabled
ýagdaýyny bellemek mümkin. Bu aýratynlyk SpringApplicationAdminMXBean
MBeanServer
platformasy üçin açar. Spring Boot programmasyny uzakdan dolandyrmak üçin bu aýratynlykdan peýdalanyp bilersiňiz. Bu aýratynlyk ähli hyzmatlardyr obýektler üçin peýdaly bolup biler.
local.server.port
açaryna eýe boluň.
Programmanyň Başlanyolyny Yzarlamak
Programmanyň ýola goýulmagy wagtynda SpringApplication
we ApplicationContext
programmanyň ömri dolanşygyna, bean ömri dolanşygyna we hatda programmanyň wakalaryna baglanyşykly köp sanly işjeňlikleri ýerine ýetirýär. ApplicationStartup
Spring Framework-iň programmagy ýola goşmak üçin StartupStep
objekti arkaly yzarlamagyny üpjün edýär. Bu maglumatlary profilleşdirme we ýa-da diňe programmanyň başlama prosesine has gowy düşünmek üçin ýygnap bolýar.
Sprinteriň beýan edilýän nusgasyny sazlamagyňyz bilen ApplicationStartup
amala aşyryşyny saýlamak mümkin. Mysal üçin, BufferingApplicationStartup
-y ulanmak üçin şu aşakdaky ýaly ýazmak mümkin:
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication application = new SpringApplication(MyApplication.class); application.setApplicationStartup(new BufferingApplicationStartup(2048)); application.run(args); } }
@SpringBootApplication class MyApplication fun main(args: Array<String>) { runApplication<MyApplication>(*args) { applicationStartup = BufferingApplicationStartup(2048) } }
Ilkinji elýeterli amala aşyryş, FlightRecorderApplicationStartup
, Spring Framework tarapyndan üpjün edilýär. Ol açyş maglumatlaryny Java Flight Recorder sessiýasyna goşýar we ýakynlaşdyrma programmalary üçin hem Spring-kontekstiň ömür dolanşygynyň JVM bilen baglanyşykly wakalary bilen (ýaly razdelke, памяти arassalama amallary, класс gaplamasy) çap etmek üçin niýetlenendir. Konfigurasiýadan soň, Flight Recorder bilen işläp:
$ java -XX:StartFlightRecording:filename=recording.jfr,duration=10s -jar demo.jar
Spring Boot öz görnüşi bolan BufferingApplicationStartup
bilen üpjün edýär; bu amala aşyryş başlama ädimlerini buferi saklamak we olary daşarky metrik ulgama atmak üçin niýetlenendir. Programmalar islenýän komponentde BufferingApplicationStartup
görnüşli bean talap edip biler.
Spring Boot hem startup
nokadyny açmak üçin konfigurasiýa edilip biler, bu ýagdaýda bu maglumatlary JSON dokmentiniň görnüşinde geçmek mümkin.
GO TO FULL VERSION