在開發時有時候需要在整個應用開始運行時執行一些特定代碼,比如初始化環境,准備測試數據等等。
在Spring中可以通過ApplicationListener來實現相關的功能,不過在配合Spring Boot使用時就稍微有些區別了。
創建ApplicationListener
這里以填充部分測試數據為例子,首先實現ApplicationStartup
類。
1
2
3
4
5
6
7
8
|
publicclass
ApplicationStartup
implements
ApplicationListener
<
ContextRefreshedEvent
>
{
@
Override
publicvoidonApplicationEvent
(
ContextRefreshedEvent
event
)
{
SourceRepository
sourceRepository
=
event
.
getApplicationContext
(
)
.
getBean
(
SourceRepository
.
class
)
;
Source
je
=
new
Source
(
"justice_eternal吧"
,
"http://tieba.baidu.com/f?kw=justice_eternal"
)
;
sourceRepository
.
save
(
je
)
;
}
}
|
這類並不會自動執行,需要我們注冊。
硬編碼注冊
Spring Boot有一個類SpringApplication
,這個類是Spring Boot的入口,包含所有的配置。
1
2
3
4
5
6
7
8
9
10
|
@
Configuration
@
ComponentScan
@
EnableAutoConfiguration
publicclass
WebApplication
{
publicstaticvoidmain
(
String
[
]
args
)
{
SpringApplication
springApplication
=
new
SpringApplication
(
WebApplication
.
class
)
;
springApplication
.
addListeners
(
new
ApplicationStartup
(
)
)
;
springApplication
.
run
(
args
)
;
}
}
|
硬編碼的弊端在於無法區別環境,當我們需要部署應用到生產環境時需要修改代碼。
配置文件
Spring Boot支持profiles模式,在application.properties
中配置
1
|
spring
.
profiles
.
active
=
dev
|
然后在application-dev.properties
中配置開發環境的參數。
增加一個配置來注冊自定義的監聽器
1
|
context
.
listener
.
classes
=
cn
.
acgmo
.
ApplicationStartup
|