@Autowired сущность становится нулевой - PullRequest
0 голосов
/ 26 апреля 2019
@Component
public class TempTry implements CommandLineRunner{

@Autowired
TokenRepository tkeRepo;

@Parameter(names = { "--email", "-e" })
String email;

static final Logger logger = LoggerFactory.getLogger(TempTry.class);

@Override
public void run(String... args) throws Exception {
    logger.info("ApplicationStartupRunner run method Started !!");
    TempTry main = new TempTry();
    JCommander.newBuilder().addObject(main).build().parse(args);
    main.runtask();
}

public void runtask() {

    LocalDateTime expiryTime = LocalDateTime.now().plusDays(1);
    String uuid = UUID.randomUUID().toString();
    TokenEntity tknEntity = new TokenEntity();

    tknEntity.setEmailId(email);
    tknEntity.setExpiryTime(DateUtils.asDate(expiryTime));
    tknEntity.setStatus(ResetPasswordStatus.ACTIVE);
    tknEntity.setToken(uuid);

    tkeRepo.save(tknEntity);

    String fromString = UUID.nameUUIDFromBytes("SomeString".getBytes()).toString();
    System.out.println("For email " + mail + " UUID=" + uuid + " is stored at time " + new Date());
    System.out.println("UUID generated from String is " + fromString);
}
}

Я установил конфигурацию запуска как -e dhanrajtijare@gmail.com .., получив ожидаемое значение электронной почты. Моя проблема здесь в строке tkeRepo.save (tknEntity); tkeRepo равно нулю

1 Ответ

3 голосов
/ 26 апреля 2019

Здесь

 TempTry main = new TempTry();

Как вы ожидаете, что @Autowire будет работать, если вы создаете экземпляр yoursefl?

К этому моменту ваш текущий экземпляр, кажется, находится в контексте приложения, поэтому

@Override
public void run(String... args) throws Exception {
    logger.info("ApplicationStartupRunner run method Started !!");

    JCommander.newBuilder().addObject(this).build().parse(args);
    runtask();
}

Я отложил в сторону тот факт, что ИМХО просто плохо смешивать JCommander с Spring CLI - использовать один или другой.

...