This is just a mental note since I wasted hours on it a few months ago. Then a colleague just did the same.
If you are developing a business process in Activiti, and your TimerEvent is only firing once, add the following parameter to your Activiti config:
<property name="jobExectuorActivate" value="true"/>
This is mentioned in the documentation, but only as a very small note:
"Note: timers are only fired when the job executor is enabled (i.e. jobExecutorActivate needs to be set to
activiti.cfg.xml, since the job executor is disabled by default)"
Hopefully this saves people some time.