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

在Spring Boot IntegrationTest上禁用

吕修筠
2023-03-14

如何在Spring Boot IntegrationTest上禁用计划自动启动?

谢了。

共有1个答案

袁奇文
2023-03-14

请注意,外部组件可能会自动启用调度(请参见Spring框架中的HystrixStreamAutoConfiguration和MetricExportAutoConfiguration)。因此,如果您尝试在指定@enablescheduling@conditionalonproperty@profile类上使用@conditionalproperty,那么由于外部组件的原因,无论如何都会启用调度。

有一个@configuration类,通过@enablescheduling启用调度,但要将调度的作业放在单独的类中,每个类都使用@conditionalonproperty启用/禁用包含@调度任务的类。

不要在同一个类中使用@schedured@enablescheduling,否则会出现外部组件无论如何都在启用它的问题,因此忽略@conditionalonproperty

例如:

@Configuration
@EnableScheduling
public class MyApplicationSchedulingConfiguration {
}

然后在另一堂课上

@Named
@ConditionalOnProperty(value = "scheduling.enabled", havingValue = "true", matchIfMissing = false)
public class MyApplicationScheduledTasks {

  @Scheduled(fixedRate = 60 * 60 * 1000)
  public void runSomeTaskHourly() {
    doStuff();
  }
}
public class ConditionalThreadPoolTaskScheduler extends ThreadPoolTaskScheduler {

  @Inject
  private Environment environment;

  // Override the TaskScheduler methods
  @Override
  public ScheduledFuture<?> schedule(Runnable task, Trigger trigger) {
    if (!canRun()) {
      return null;
    }
    return super.schedule(task, trigger);
  }

  @Override
  public ScheduledFuture<?> schedule(Runnable task, Date startTime) {
    if (!canRun()) {
      return null;
    }
    return super.schedule(task, startTime);
  }

  @Override
  public ScheduledFuture<?> scheduleAtFixedRate(Runnable task, Date startTime, long period) {
    if (!canRun()) {
      return null;
    }
    return super.scheduleAtFixedRate(task, startTime, period);
  }

  @Override
  public ScheduledFuture<?> scheduleAtFixedRate(Runnable task, long period) {
    if (!canRun()) {
      return null;
    }
    return super.scheduleAtFixedRate(task, period);
  }

  @Override
  public ScheduledFuture<?> scheduleWithFixedDelay(Runnable task, Date startTime, long delay) {
    if (!canRun()) {
      return null;
    }
    return super.scheduleWithFixedDelay(task, startTime, delay);
  }

  @Override
  public ScheduledFuture<?> scheduleWithFixedDelay(Runnable task, long delay) {
    if (!canRun()) {
      return null;
    }
    return super.scheduleWithFixedDelay(task, delay);
  }

  private boolean canRun() {
    if (environment == null) {
      return false;
    }

    if (!Boolean.valueOf(environment.getProperty("scheduling.enabled"))) {
      return false;
    }

    return true;
  }
}

配置类,使用自定义调度器创建taskScheduler bean,并启用调度

@Configuration
@EnableScheduling
public class MyApplicationSchedulingConfiguration {

  @Bean
  public TaskScheduler taskScheduler() {
    return new ConditionalThreadPoolTaskScheduler();
  }
}

上面的潜在问题是,您已经创建了一个内部Spring类的依赖项,因此如果将来有更改,您必须修复兼容性。

 类似资料:
  • 问题内容: 是否可以禁用滚轮在输入数字字段中更改数字?我已经弄乱了特定于Webkit的CSS,以删除微调框,但我想完全摆脱这种行为。我喜欢使用它,因为它在iOS上带来了一个不错的键盘。 问题答案: 防止其他对象建议的输入数字元素上的mousewheel事件的默认行为(调用“ blur()”通常不是首选方法,因为这不是用户想要的)。 但。我会避免一直监听所有input-number元素上的mouse

  • 问题内容: 如何在WildFly上完全禁用WELD。我不需要它,因为我使用了另一个DI框架。 异常0:javax.enterprise.inject.UnsatisfiedResolutionException:无法使用限定符[@ javax.enterprise.inject.Any(),@ javax.enterprise.inject来解析’org.springframework.data.

  • 问题内容: 我想禁用长按(触摸并按住)Web应用程序中的图像后出现的上下文菜单。我见过关于如何做到这一点的不同想法,但似乎没有一个对我有用。 有没有办法通过HTML / CSS / Javascript在Android上执行此操作? 问题答案: 这应该适用于1.6或更高版本(如果我没记错的话)。我不认为有1.5或更早版本的解决方法。

  • 问题内容: 添加排序器后,是否可以在JTable上禁用手动排序?因此,我有一个JTable附加了以下排序器(初始化表时,基本上按第3列排序): 效果很好,但是用户仍然可以单击表中的列标题,并按我要禁用的任何列进行排序。这可能吗? 问题答案: 您可以使用 TableRowSorter* 的 setSortable 方法,如下所示: * 使第0列不可排序。您可以根据需要在列上应用它。

  • 问题内容: 我正在开发一个Web应用程序,正在尝试为其提供功能齐全的窗口系统。目前进展顺利,我只遇到一个小问题。有时,当我去拖动应用程序的一部分时(通常是窗口的角落div,应该触发调整大小的操作),Web浏览器变得很聪明,并认为我的意思是拖放东西。最终结果是,当浏览器进行拖放操作时,我的动作被暂停。 是否有一种简单的方法来禁用浏览器的拖放?理想情况下,我希望能够在用户单击某些元素时将其关闭,但要重

  • 我正在使用Symfony2。0和FOSUserBundle,并希望在我的登录表单上禁用csrf令牌。 我已经禁用了csrf保护全球在我的网站在我的config.yml: 这工作得很好,没有csrf字段添加到我的表单中。但是,这不适用于登录表单。仅在此表单上,如果我没有将令牌包含在表单中,则会出现“无效的CSRF令牌”错误: 如何在登录表单上禁用CSRF令牌?