之前在做oa项目的钉钉推送功能的时候,组长让我增加一个定时推送的功能,最好能实现用户在前端能自由修改时间。但是网上查了发现很多方法都需要重启项目才实现,后来从一篇博客上翻到说可以换一种思路,并不是去修改定时器时间,可以通过将之前的定时器停止注销,然后重新开启一个新的定时器来实现。
先上代码吧,基本上除了去掉了部分注入和方法参数的处理过程,整体逻辑都还是在的
/**
* 钉钉消息推送定时器Controller
*
* @author zjs
* @since 2019-03-21
*/
@Controller
@EnableScheduling
public class DingdingTimingController implements SchedulingConfigurer {
private final static Logger logger = LoggerFactory.getLogger(DingdingTimingController.class);
/**
* (安装维护)信息
*/
@Transactional(readOnly = false)
public String timerOfOptRepair(DingdingTimer dingdingTimer) {
try {
//处理变量参数
List<Object> result = dealResult();
//处理文本整体
String content = dealContent();
dingdingService.sendMsg();
logger.info("安装维护信息,钉钉定时推送成功);
return Constants.SYSDIC_COMMON_SUCCESS;
} catch (Exception e) {

在OA项目中,实现了用户通过前端自由修改钉钉推送的定时任务时间。无需重启项目,通过停止原有定时器,注册新定时器来实现动态变更。代码逻辑包括查询数据库初始化定时器,使用Map记录定时器状态,修改时间时调用特定方法更新定时器并在Map中覆盖旧记录。已知问题包括服务器上有时执行几次后停止,后续会更新解决方案。
最低0.47元/天 解锁文章
2560

被折叠的 条评论
为什么被折叠?



