After much digging, I've realized that this can be done with an SDK extension class TimerSchedule
.
For it, you would need a base class that you'll be able to use for multiple triggers.
class CustomTimerTriggerBase: TimerSchedule
{
TimeSpan timer;
public CustomTimerTriggerBase(string triggerConfigKey)
{
timer=TimeSpan.Parse(ConfigurationManager.AppSettings[triggerConfigKey]);
}
public override DateTime GetNextOccurrence(DateTime now)
{
return now.Add(timer);
}
}
Use this Base to generate your timers...
public sealed class FooTimer : CustomTimerTriggerBase
{
public FooTimer() : base("FooTimerKey") {}
}
In your, App.config have a key for "FooTimer"
<add key="FooTimerKey" value="00:02:00" />
Use this FooTimer class in your webjob functions.
public void foo([TimerTrigger(typeof(FooTimer)] TimerInfo timer)
Now you can simply change the value in app config instead of redeploying the code.
NOTE: Since you are using Timespan to parse, the string can be of any format you need as defined in TimeSpan formats.
UPDATE
As pointed by l--''''''---------'''''''''''' and Andy Dobedoe
now (as of 2019) it is much simpler to achieve this.
public static async Task RunAsync([TimerTrigger("%MYCRON%")]TimerInfo myTimer
Finds the setting called MYCRON and uses the cron expression from there