当前位置: 首页 > 知识库问答 >
问题:

有没有办法在spring boot的main方法中调用@Scheduled注释

郭恩
2023-03-14

我只想使用@scheduler注释定期运行spring boot main方法。我已经指定了一些附加代码,这些代码将在启用REST服务之前执行一些预操作。

@EnableScheduling
@SpringBootApplication
public class SpringBootJDBCApp {

    @Autowired
    ITest testService;

    public static void main(String args[]) throws Exception  {
        PersistenceValidation.cloneGit();
        PersistenceValidation.dataPersistance();
        PersistenceValidation.cleanUp();
        ApplicationContext context = SpringApplication
                .run(SpringBootJDBCApp.class);
        ITest testService = context.getBean(ITestService.class);
        testService.getAllData();
    }
}

我想每10秒运行一次上面的主方法。并在主方法中添加了@时间表注释。但它抛出了一个例外:

根据doc@Scheduler的预期行为应调用一个没有args[]的方法

我想在main方法中使用@Scheduler注释,如下所示:

@Scheduled(initialDelay = 1000, fixedRate = 10000)
public static void main(String args[]) throws Exception {
    PersistenceValidation.cloneGit();
    PersistenceValidation.dataPersistance();
    PersistenceValidation.cleanUp();
    ApplicationContext context = SpringApplication.run(SpringBootJDBCApp.class);
    ITest testService = context.getBean(ITestService.class);
    testService.getAllData();
}

错误:

组织。springframework。豆。工厂BeanCreationException:创建名为“springBootJDBCApp”的bean时出错:bean初始化失败;嵌套的异常是java。lang.IllegalStateException:遇到无效的@Scheduled方法“main”:只有任何参数方法都不能用@Scheduled进行注释

有没有其他方法来完成这项任务?我想定期运行main方法中提到的所有内容。

有线索吗?

共有1个答案

卞嘉许
2023-03-14

使用@scheduled注释注释的计划方法必须没有参数,因为注释不提供任何输入。@Scheduledsais的Spring文档:

带注释的方法不能要求任何参数。它通常会有一个无效的返回类型;如果不是,则通过调度程序调用时将忽略返回值。

您注释了方法publicstaticvoidmain(字符串args[]),该方法有一个数组作为参数。您只需将main(字符串args[])中的内容包装到另一个方法中即可。注意,您根本不使用args[]

 类似资料:
  • 是否允许在一个方法中使用多个@scheduled注释?

  • 我需要调用一个方法:myMethod(双...选项卡),但我通过其他方法调用获取此数组的元素。现在我做的是: 但是有了它,myMethod是这样声明的: 我想知道如何使用bytebuddy来代替: 或 此外,属性“form”是一个动态检索方法,因此在“for”中执行的循环数永远不会相同。所以有时我可以调用这样的表单方法:或或

  • 问题内容: 有没有办法用TypeScript语言进行方法重载? 我想实现以下目标: 这是我不想做的一个例子(我真的很讨厌JS中重载hack的那一部分): 问题答案: 根据规范,TypeScript确实支持方法重载,但是它很笨拙,并且包含许多手动检查参数类型的工作。我认为这主要是因为在纯JavaScript中最接近方法重载的地方还包括检查,并且TypeScript尝试不修改实际的方法主体,以避免任何

  • 当我点击任何编辑文本时,我想调整我的键盘。我在Android清单中使用windowSoftInputMode,但当我使用搜索编辑文本时,它覆盖了整个区域。键盘和底部布局覆盖整个区域

  • 问题内容: 我在Service类中看到了一种被标记为的方法,但是它也在同一类中调用了其他未标为的方法。 这是否意味着对单独方法的调用导致应用程序打开与DB的单独连接或暂停父事务等? 不带任何注释的方法的默认行为是什么,而另一个带有注释的方法调用该方法的默认行为是什么? 问题答案: 当你调用没有事务块之内的方法时,父事务将继续使用新方法。它将使用与父方法(with )相同的连接,以及在调用的方法中导

  • 所以我想要一个“Void Repository”,通过它可以访问不一定在实体上操作的存储过程。 但这当然不起作用,因为期望是一个实体。 有没有一种方法可以使用注释而无需创建虚拟实体,或者我是否坚持使用使用通过准备好的语句进行查询的已实现类? 因为老实说,这很难看: