Ok, it was not spine related.
For those who have similar problems :
I use a animatorOverrideController. if the the animation are set as looping in the global animator animations but not in the override animations, the animations will loop but the event are not sent after the first loop.
So the animation in global animator AND override animations need to be marked as "loop".
By the way, is there a way in spine to export animation as "looping"? and directly mark them in spine editor? So in unity its set as looping when baked.