Java Spring-Bean执行方法两次
当我运行应用程序时,下面的refreshDatasets方法会执行两次。你知道我把Spring的配置搞砸了吗(基于注释) 计划任务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
@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执行的一个
- 在主方法中执行的一个
您可以在和中找到更多信息您永远不会想到它与日程安排有关。非常感谢-删除了我自己的方法执行,实际上它仍然执行该方法-这一次只有一次。谢谢想不到这和日程安排有关。非常感谢-删除了我自己的方法执行,实际上它仍然执行该方法-这一次只有一次。谢谢