最近的新项目和数据同步相关,有定时调度的需求。之前一直有使用过Quartz
、XXL-Job
、Easy Scheduler
等调度框架,后来越发觉得这些框架太重量级了,于是想到了Spring
内置的Scheduling
模块。而原生的Scheduling
模块只是内存态的调度模块,不支持任务的持久化或者配置(配置任务通过@Scheduled
注解进行硬编码,不能抽离到类之外),因此考虑理解Scheduling
模块的底层原理,并且基于此造一个简单的轮子,使之支持调度任务配置:通过配置文件或者JDBC
数据源。
作为Java
开发者,很多场景下会使用SpringBoot
开发Web
应用,目前微服务主流SpringCloud
全家桶也是基于SpringBoot
搭建的。SpringBoot
应用部署到服务器上,需要编写运维管理脚本。本文尝试基于经验,总结之前生产使用的Shell
脚本,编写一个可以复用的SpringBoot
应用运维脚本,从而极大减轻SpringBoot
应用启动、状态、重启等管理的工作量。本文的Shell
脚本在CentOS7
中正常运行,其他操作系统不一定适合。如果对一些基础或者原理不感兴趣可以拖到最后,直接拷贝脚本使用。
当我们在生产环境部署了SpringBoot
应用的时候,虽然可以通过Jenkins
的构建状态和Linux
的ps
命令去感知应用是否在新的一次发布中部署和启动成功,但是这种监控手段是运维层面的。那么,可以提供一种手段能够在应用层面感知服务在新的一次发布中的构建部署和启动是否成功吗?这个问题笔者花了一点时间想通了这个问题,通过这篇文章提供一个简单的实现思路。
org.springframework.core.env.Environment
是当前应用运行环境的公开接口,主要包括应用程序运行环境的两个关键方面:配置文件(profiles)和属性。Environment
继承自接口PropertyResolver
,而PropertyResolver
提供了属性访问的相关方法。这篇文章从源码的角度分析Environment
的存储容器和加载流程,然后基于源码的理解给出一个生产级别的扩展。
本文较长,请用一个舒服的姿势阅读。