Start here. This is the direct spoken answer to practice first.
Overview
Each running application instance owns its own scheduler, so horizontal scaling can multiply a supposedly singular job.
An @Scheduled method runs in every application replica that enables scheduling. If three instances are running, the same schedule can execute three times. I make the work idempotent and decide explicitly whether parallel executions are acceptable. If the business requires one logical execution, I use a durable scheduler, queue, database claim, or proven distributed lock rather than relying on one application instance.