spring - 如何在带有接线的 Spring Boot 应用程序中运行特定的类/实用程序?
问题描述
我的标准 Spring Boot 应用程序正在运行。我有一些情况,我想运行一个“作业”,这基本上是一些特定的方法,通常通过用户在浏览器中执行某些操作来运行,但我想从命令行运行它。
我可以使用 gradlew 运行任意类;
./gradlew -PmainClass=kcentral.backingservices.URLMetaExtractor execute
然而,当以这种方式运行时,“自动装配”都不起作用。执行任意类(具有 main 方法)以使其也适用于任何自动装配的更好方法是什么?
编辑:
我得到了一些使用 CommandLineRunner 和一些参数的建议,它们可以通过以下方式执行命令:
./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 始终为空,即使我在我的“常规”弹簧启动应用程序中以相同的方式连接也没有问题。我需要做什么才能正确接线?
解决方案
您说要运行“作业”这一事实表明您可能希望在应用程序中使用计划任务,而不是尝试通过命令行运行它。例如在 Spring 中调度任务
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
log.info("The time is now {}", dateFormat.format(new Date()));
}
如果你想让一个命令行应用程序使用自动装配,你可以通过让你的应用程序类实现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
到属性文件中。
推荐阅读
- echarts - 画一条线并根据方向对其进行着色
- python - 根据一列值的组合有效拆分熊猫数据框
- swift - 有没有办法将鼠标事件添加到 Interface Builder 中的 Action 中?
- slider - 如何更改 swiper 滑块 slidesPerView = 3 到 1 Onclick 事件
- javascript - 通过 forEach 函数监听多个 websocket 端口 - Nodejs
- wordpress - 移动上传的文件和 WordPress
- mysql - dpkg: 错误处理包 nginx (--configure)
- scala - 如何使用 Flink 作为案例类(scala)读取镶木地板文件?
- arrays - 在 vbscript 函数中扩展数组
- python - Selenium Python - 如果没有包含此类值的属性,如何获取文本字段的当前值?