Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring-Bean执行方法两次_Java_Spring - Fatal编程技术网

Java Spring-Bean执行方法两次

Java Spring-Bean执行方法两次,java,spring,Java,Spring,当我运行应用程序时,下面的refreshDatasets方法会执行两次。你知道我把Spring的配置搞砸了吗(基于注释) 计划任务 @Component @EnableScheduling public class SchedulingTasks { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); @Autowired publ

当我运行应用程序时,下面的refreshDatasets方法会执行两次。你知道我把Spring的配置搞砸了吗(基于注释)

计划任务

@Component
@EnableScheduling
public class SchedulingTasks {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Autowired
    public TestClass testclass;

    @Scheduled(fixedDelay = 1 * 60 * 60 * 1000)
    public void refreshDatasets() {
        testclass.simpleTest();
        System.out.println("The time is now " + dateFormat.format(new Date()));
    }
}
@Component
public class TestClass {
    public void simpleTest() {
        System.out.println("FINISHED");
    }
}
TestClass

@Component
@EnableScheduling
public class SchedulingTasks {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Autowired
    public TestClass testclass;

    @Scheduled(fixedDelay = 1 * 60 * 60 * 1000)
    public void refreshDatasets() {
        testclass.simpleTest();
        System.out.println("The time is now " + dateFormat.format(new Date()));
    }
}
@Component
public class TestClass {
    public void simpleTest() {
        System.out.println("FINISHED");
    }
}
配置

@Configuration
@ComponentScan(basePackages = "com.some.analytics.scripts",
excludeFilters = {@ComponentScan.Filter (
        type= FilterType.ANNOTATION,
        value=Configuration.class)})
public class ScriptsConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        PropertySourcesPlaceholderConfigurer p =  new PropertySourcesPlaceholderConfigurer();
        p.setIgnoreResourceNotFound(true);

        return p;
    }
}
public class Scripts {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ScriptsConfig.class);

        SchedulingTasks schedulingTasks = ctx.getBean(SchedulingTasks.class);
        schedulingTasks.refreshDatasets();
    }
}
Main

@Configuration
@ComponentScan(basePackages = "com.some.analytics.scripts",
excludeFilters = {@ComponentScan.Filter (
        type= FilterType.ANNOTATION,
        value=Configuration.class)})
public class ScriptsConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        PropertySourcesPlaceholderConfigurer p =  new PropertySourcesPlaceholderConfigurer();
        p.setIgnoreResourceNotFound(true);

        return p;
    }
}
public class Scripts {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ScriptsConfig.class);

        SchedulingTasks schedulingTasks = ctx.getBean(SchedulingTasks.class);
        schedulingTasks.refreshDatasets();
    }
}
运行main方法时,我得到以下输出:

FINISHED The time is now 11:08:39 
FINISHED The time is now 11:08:39

使用
@EnableScheduling
注释时,Spring会在后台创建一个
TaskExecutor
。这将计划所有的
@Scheduled
方法。对于具有
fixedDelay
的方法,它们将立即触发(除非设置了
initialDelay

您还以编程方式执行任务,因此有两次执行:

  • 由Spring执行的一个
  • 在主方法中执行的一个
您应该删除手动调用,一切都应该按预期工作


您可以在和中找到更多信息当使用
@EnableScheduling
注释时,Spring会在后台创建一个
TaskExecutor
。这将计划所有的
@Scheduled
方法。对于具有
fixedDelay
的方法,它们将立即触发(除非设置了
initialDelay

您还以编程方式执行任务,因此有两次执行:

  • 由Spring执行的一个
  • 在主方法中执行的一个
您应该删除手动调用,一切都应该按预期工作


您可以在和中找到更多信息

您永远不会想到它与日程安排有关。非常感谢-删除了我自己的方法执行,实际上它仍然执行该方法-这一次只有一次。谢谢想不到这和日程安排有关。非常感谢-删除了我自己的方法执行,实际上它仍然执行该方法-这一次只有一次。谢谢