Spring boot 在项目中的应用-部署(二)
2018-08-05 本文已影响0人
咦咦咦萨
1. Spring boot 项目启动事件
现在有部分资源,需要在项目启动后进行预加载。这就需要在Spring 环境准备好之后,加入自动执行的事件。
@Component
@Slf4j
public class CertConfigManagerInitListener implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
private CertConfigManager certConfigManager;
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
// 只在root application context初始化完成后调用逻辑代码,否则会在servlet context初始化后再次调用
if(contextRefreshedEvent.getApplicationContext().getParent() == null) {
long start = System.currentTimeMillis();
// TODO: 初始化代码
log.info("完成,耗时:{} 毫秒", (end - start));
}
}
}
- 以Jar包形式运行
# 同步运行
java -jar test-restful-service.jar
# 后台运行
nohup java -jar test-restful-service.jar &
# 关闭
ps aux | grep test-restful-service | xargs kill -9
- 优雅停机
通过kill -9 杀掉进程,使web容器不能关闭相关的资源,那么还有一种更加优雅的方式来停止容器的运行。
3.1 通过Spring boot Actuator提供的端点优雅停机
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在application.yml配置文件中添加端点
endpoints:
#启用shutdown
shutdown:
enabled: true
#禁用密码验证
sensitive: false
之后,我们可以通过POST方式访问http://yourIP:port/shutdown来关闭web容器。
4. 安全认证
集成SpringSecurity进行安全认证和权限管理。
4.1 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
4.2 配置application.yml
security:
basic:
# 启用基础认证
enabled: false
# 安全路径列表,逗号分隔,此处只针对/admin路径进行认证
path: /admin
user:
# 认证使用的用户名
name: admin
# 认证使用的密码。 默认情况下,启动时会记录随机密码。
password: 123456
management:
# actuator暴露接口使用的端口,为了和api接口使用的端口进行分离
port: 7778
# actuator暴露接口的前缀
context-path: /admin
security:
# actuator是否需要安全保证
enabled: true
# 可以访问管理端点的用户角色列表,逗号分隔
roles: SUPERUSER
之后,可通过一下命令来执行优雅关机
curl -u admin:123456 -X POST yourIP:7778/admin/shutdown
参考&扩展:
https://www.jianshu.com/p/af9738634a21
https://www.jianshu.com/p/bcebf8921919