То, что вы ищете, это планировщик. Quartz , вероятно, является наиболее часто используемым планировщиком в мире Java, хотя Spring имеет некоторые интересные функции планирования, если вы уже используете эту платформу.
Какой бы планировщик вы ни выбрали, вы обычно указываете действие, которое должно произойти (иногда называемое «заданием»), и время, когда оно должно произойти («триггер» в терминологии кварца). В вашем случае вы устанавливаете триггер на запуск каждый день в полночь, а когда он срабатывает, он будет делать все, что вам нужно, как указано в вашей работе.