Проблема в том, что вы создаете SystemPopulatedHandler
сами с помощью
SystemPopulatedHandler systemPopulatedHandler = new SystemPopulatedHandler();
Таким образом Spring не внедряет хранилище в ваш класс, потому что это работает, только если Spring создает класс.
Но если вы хотите заполнить базу данных при запуске (по крайней мере, кажется, что вы пытаетесь это сделать), вы должны проверить пролет (или 85.5 в этой документации: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html)
Если по какой-то причине вы не можете использовать flyway, вы можете добавить следующий код в основной класс:
@Bean
public SystemPopulatedHandler systemPopulatedHandler(SystemPopulatedRepository repository) {
SystemPopulatedHandler systemPopulatedHandler = new SystemPopulatedHandler(repository);
systemPopulatedHandler.insertIntoDB()
return systemPopulatedHandler;
}
Затем добавьте конструктор в класс SystemPopulatedHandler
:
public SystemPopulatedHandler(SystemPopulatedRepository systemPopulatedRepository) {
this.systemPopulatedRepository = systemPopulatedRepository;
}
и удалите аннотацию @Autowired
.
обновление
Вам также необходимо добавить недостающие аннотации, как указано в этом ответе: https://stackoverflow.com/a/55767393/2248239
обновление 2
Если вы хотите периодически выполнять это действие, вы можете использовать планирование (как в этом руководстве https://spring.io/guides/gs/scheduling-tasks/)
На самом деле это довольно просто:
Не вносите изменения, о которых я упоминал выше, за исключением добавления отсутствующих аннотаций, просто сделайте следующее:
Добавить @Component
к SystemPopulatedHandler
Добавить @Scheduled
к insertIntoDB()
в SystemPopulatedHandler
И добавить @EnableScheduling
в основной класс
Для @Scheduled
просто прочитайте руководство, в котором описано, что вы можете сделать с аннотацией.