以单个数字开头的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)