在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化环境,准备测试数据等等。
在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
|