Как я могу запустить определенный класс / утилиту в приложении Spring Boot с проводкой? - PullRequest
0 голосов
/ 12 октября 2018

У меня работает стандартное приложение Spring Boot.У меня есть ситуации, когда я хочу запустить «задание», которое в основном представляет собой какой-то определенный метод, обычно запускаемый через пользователя, который делает что-то в своем браузере, но я хочу запустить его из командной строки.

Я могу запуститьпроизвольный класс с gradlew;

./gradlew -PmainClass=kcentral.backingservices.URLMetaExtractor execute

Однако при запуске таким способом ни один из «автопроводов» не работает.Что может быть лучше для выполнения произвольного класса (который имеет основной метод), так что он также работает с любой Autowiring?

РЕДАКТИРОВАТЬ:

Я получил несколько советов, чтобы использовать CommandLineRunner и некоторыеargs, которые работают для выполнения команды с помощью:

./gradlew bootRun -Pargs=--reloadTestData

Однако автопроводка моего репо не работает.У меня есть следующее:

@EnableAutoConfiguration
@EnableMongoAuditing
@EnableMongoRepositories(basePackageClasses=KCItemRepo.class)
@ComponentScan(basePackages = {"kcentral"})
public class ReloadTestData implements CommandLineRunner {

  @Autowired
  AddItemService addItemService;

  @Autowired
  KCItemRepo itemRepo;

  @Autowired
  KCItemRatingRepo itemRatingRepo;


  private static final Logger log = LoggerFactory.getLogger(ReloadTestData.class);


  public void reloadData(){
    log.info("reloadData and called");

    if (itemRepo == null){
      log.error("Repo not found");
      return;
    }
    long c = itemRepo.count();
    log.warn("REMOVING ALL items "+c);
    itemRepo.deleteAll();

    log.warn("REMOVING ALL ratings");
    itemRatingRepo.deleteAll();

  }

itemRepo всегда имеет значение null, даже если я подключаюсь так же в моем «обычном» приложении с весенней загрузкой без проблем.Что мне нужно сделать, чтобы правильно подключить его?

1 Ответ

0 голосов
/ 12 октября 2018

Тот факт, что вы говорите, что хотите запустить «задание», говорит о том, что вы можете использовать запланированное задание в приложении, а не пытаться запустить его из командной строки.например, Планирование задач в Spring

@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
    log.info("The time is now {}", dateFormat.format(new Date()));
}

Если вы хотите, чтобы приложение командной строки работало с Autowiring, вы можете сделать приложение командной строки, сделав свой класс Application реализующим CommandLineRunnerинтерфейс, например Spring Boot Console App

@SpringBootApplication
public class SpringBootConsoleApplication 
  implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootConsoleApplication.class, args);
    }

    @Override
    public void run(String... args) {
    }
}

И добавьте spring.main.web-application-type=NONE в файл свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...