发信息做推广,我选黔优网

发布产品信息
微信公众号

以单个数字开头的 Java 字符串属性值被截断

我要举报 来源:黔优网作者:小优 责编:小优 时间:2024-12-18 13:49:54 浏览量:12
导读:本文深度解析以单个数字开头的 Java 字符串属性值被截断的核心底层逻辑要点与实践方法,涵盖关键观点信息和常见问题解决思路分析,为您提供全面的学习指导,一起来看看吧。

以单个数字开头的 Java 字符串属性值(例如,像“0 30 */1 * * ?”这样的 CRON 计划)被截断为第一个数字。Java 将截断任何以数字开头、后跟空格的属性值字符串。这个技巧有一个带有 Spring Scheduled 任务的小项目,它使用 CRON 计划来演示问题和解决方案。

简介

当尝试使用环境变量参数化 Spring 任务的 CRON 计划时,我遇到了一个问题,即未从属性接收完整计划,而仅在第一个值为数字的情况下。搜索谷歌给了我零个我的问题类型的例子,所以我是靠自己的。

我找到的解决方案涉及为计划的每个部分使用单独的环境变量。

使用代码

附加的基于 Maven 的项目是一个简单的项目,其中 Spring 任务会将当前时间打印到控制台。我使用 Intellij 的 IDEA,但您应该能够将其调整到 Eclipse 或您喜欢的任何其他 IDE。

任务类是:

public class ScheduledTasks {

private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);

private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

@Scheduled(cron ="${cron.schedule}")
public void reportCurrentTime() {
log.info("The time is now {}", dateFormat.format(new Date()));
}
}

在我的 中application.properties,我最初从单个环境变量设置时间表:

cron.schedule = ${test_cron}

如果我使用*/5 * * * * ?环境变量“test_cron”中设置的“”(每 5 秒)的CRON 计划运行此程序,我会得到预期的结果:

2021-04-29 12:17:50.437INFO 22420 --- [ main] o.s.s.c.ThreadPoolTaskScheduler
: Initializing ExecutorService 'taskScheduler'
2021-04-29 12:17:50.480INFO 22420 --- [ main] c.e.s.SchedulingTasksApplication
 : Started SchedulingTasksApplication in 2.441 seconds (JVM running for 3.931)
2021-04-29 12:17:55.008INFO 22420 --- [ scheduling-1] c.e.schedulingtasks.ScheduledTasks
 : The time is now 12:17:55
2021-04-29 12:18:00.014INFO 22420 --- [ scheduling-1] c.e.schedulingtasks.ScheduledTasks
 : The time is now 12:18:00
2021-04-29 12:18:05.005INFO 22420 --- [ scheduling-1] c.e.schedulingtasks.ScheduledTasks
 : The time is now 12:18:05

但是,如果我以​“0 25 * * * ?”​(在过去 25 分钟)的时间表运行它,我会收到错误消息,指出我的时间表无效并且其中只有零:

Encountered invalid @Scheduled method 'reportCurrentTime': For input string: ""0"

为了解决这个问题,我更改了应用程序属性,以便在​Environment​每个计划部分使用一个变量,中间有一个空格:

cron.schedule = ${cron_sec} ${cron_min} ${cron_hr} ${cron_day} ${cron_mth} ${cron_wk}

并在每个环境变量设置为所需值的情况下运行它。类似于上面失败的例子:

cron_sec=0 cron_min=30 cron_hr=* cron_day=* cron_mth=* cron_wk=*

我得到了预期的输出:

2021-04-29 12:29:25.539 INFO 22896 --- [ main] c.e.s.SchedulingTasksApplication : Started SchedulingTasksApplication in 3.677 seconds (JVM running for 5.441) 2021-04-29 12:30:00.003 INFO 22896 --- [ scheduling-1] c.e.schedulingtasks.ScheduledTasks : The time is now 12:30:00

如果这篇文章可以帮助其他人解决此类问题,那么我的工作就完成了!

 
  • 下一篇: 解决企鹅电竞iPad直播闪退问题的最佳方法
  • 上一篇: 解决Windows 10下MuMu模拟器闪退问题的全面指南
 
没用 0举报 收藏 0评论 0
免责声明:
以上展示内容来源于用户自主上传及公开网络信息收集整理,版权归属原作者所有,平台不承担内容准确性责任,版权争议与本站无关。本文涉及见解与观点不代表黔优网官方立场,仅供技术交流参考,黔优网为纯技术资讯交流平台,不参与任何商业服务及交易行为,所有企业信息均经基础资质审核后展示。本文标题:以单个数字开头的 Java 字符串属性值被截断,本文链接:https://www.qianu.com/n/933745.html,欢迎转载,转载时请说明出处。若您发现本文涉及版权争议或违法违规内容,请您立即通过点此【投诉举报】并提供有效线索,也可以通过邮件(邮箱号:kefu@qianu.com)联系我们及时修正或删除。
 
 

 

 
推荐图文资讯