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

Java会截断任何以数字后跟空格开头的属性值字符串。本技巧有一个带有SpringScheduled任务的小项目,该任务使用CRON时间表来演示问题和解决方案。

介绍

当尝试使用环境变量对SpringTask的CRONSchedule进行参数化设置时,我遇到了一个问题,即无法从属性中接收到完整的日程表,而仅在第一个值为数字的情况下。搜索Google可以给我零例此类问题的信息,因此我是一个人。

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

使用代码

附带的基于Maven的项目是一个简单的项目,其中SpringTask将向控制台输出当前时间。我使用的是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()));
 }
}1234567891011复制代码类型:[java]

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

cron.schedule = ${test_cron}1复制代码类型:[java]

如果我*/5****?在环境变量“test_cron”中设置的CRON计划“”(每5秒)运行一次,我将得到预期的结果:

2021-04-29 12:17:50.437  INFO 22420 --- [  main] o.s.s.c.ThreadPoolTaskScheduler
 : Initializing ExecutorService 'taskScheduler'2021-04-29 12:17:50.480  INFO 22420 --- [  main] c.e.s.SchedulingTasksApplication
   : Started SchedulingTasksApplication in 2.441 seconds (JVM running for 3.931)2021-04-29 12:17:55.008  INFO 22420 --- [   scheduling-1] c.e.schedulingtasks.ScheduledTasks
 : The time is now 12:17:552021-04-29 12:18:00.014  INFO 22420 --- [   scheduling-1] c.e.schedulingtasks.ScheduledTasks
 : The time is now 12:18:002021-04-29 12:18:05.005  INFO 22420 --- [   scheduling-1] c.e.schedulingtasks.ScheduledTasks
 : The time is now 12:18:0512345678910复制代码类型:[java]

但是,如果我使用时间表“025***?”(每小时25分钟后)运行它,则会收到一条错误消息,提示我的时间表无效,并且其中只有零:

Encountered invalid @Scheduled method 'reportCurrentTime': For input string: ""0"1复制代码类型:[java]

为了解决这个问题,我更改了应用程序属性,以便在Environment每个计划节使用一个变量,并在以下之间留一个空格:

cron.schedule = ${cron_sec} ${cron_min} ${cron_hr} ${cron_day} ${cron_mth} ${cron_wk}1复制代码类型:[java]

并将其与每个环境变量设置为所需的值一起运行。与上面失败的示例类似的示例:

cron_sec=0cron_min=30cron_hr=*
cron_day=*
cron_mth=*
cron_wk=*123456复制代码类型:[java]

期的输出:

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:001234复制代码类型:[java]

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

兴趣点

如前所述,Google对这个问题的帮助完全为零。我找不到与以Application.propertiesString数字后跟空格开头的值截断有关的任何内容。这是Java的错误或“功能”吗?

(0)

相关推荐