добавить конкретные данные после проверки при запуске - весенняя загрузка - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть класс DatabaseLoader в моем весеннем приложении, вот как это выглядит:

@Configuration
@Slf4j
public class DatabaseLoader {
    @Bean
    CommandLineRunner initDatabase(UserRepository userRepository) {
        return args -> {
            try{
                userRepository.getOne(100L);
            }
            catch (Exception e){
                log.error(e.getMessage());
                userRepository.save(new User());
            }
        };
    }
}

Я просто пытался проверять каждый раз, когда это приложение запускается, если пользователь с определенным (100) присутствует в базе данных или нет, если не войти и не создать ее, в противном случае просто передать.

Но, похоже, это не работает, так как мой запрос к GET /user пуст.

Я немного изменил код, чтобы проверить, работает ли этот фрагмент кода:

log.info("this works");
log.info(userRepository.getOne(100L).toString());

И вот что я получил:

2019-11-02 11:40:58.837  INFO 14332 --- [  restartedMain] com.mua.scraper.DatabaseLoader           : this works
2019-11-02 11:40:58.872 ERROR 14332 --- [  restartedMain] com.mua.scraper.DatabaseLoader           : could not initialize proxy [com.mua.scraper.model.User#100] - no Session

1 Ответ

1 голос
/ 02 ноября 2019

Изменить @Configuration на @Component

Используйте это для командной строки

@Component
public class CommandLineDatabaseLoader implements CommandLineRunner {

    @Autowired
    UserRepository userRepository;

    @Override
    public void run(String...args) throws Exception {
        try{
            userRepository.getOne(100L);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

Чтение https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-database-initialization

...