hub*_*blo 13 java spring schedule spring-boot
我有以下3个班级:
ComponantA
package mytest.spring.test.spring;
import org.apache.log4j.Logger;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ComponentA {
Logger log = Logger.getLogger(ComponentB.class);
@Scheduled(fixedRate=2000)
public void sayHello() {
for(int i=1 ; i<=5 ; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
log.info("Hello from ComponentA " + i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
以componentB
package mytest.spring.test.spring;
import org.apache.log4j.Logger;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ComponentB {
Logger log = Logger.getLogger(ComponentB.class);
@Scheduled(fixedRate=2000)
public void sayHello() {
for(int i=1 ; i<=3 ; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
log.info("Hello from ComponentB " + i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序
package mytest.spring.test.spring;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行它时,我得到以下输出:
Hello from ComponentA 1
Hello from ComponentA 2
Hello from ComponentA 3
Hello from ComponentA 4
Hello from ComponentA 5
Hello from ComponentB 1
Hello from ComponentB 2
Hello from ComponentB 3
Hello from ComponentA 1
Hello from ComponentA 2
Hello from ComponentA 3
Hello from ComponentA 4
Hello from ComponentA 5
Hello from ComponentB 1
Hello from ComponentB 2
Hello from ComponentB 3
...
Run Code Online (Sandbox Code Playgroud)
我需要2个Scheduled方法并行运行,根据我得到的输出显然不是cae.我读到应该可以使用自定义TaskExecutor提供@Schedule注释,使用它可以定义我们想要的线程数...
我对吗 ?我找不到如何提供这些信息.
mie*_*sol 26
文件明确指出:
默认情况下,将搜索关联的调度程序定义:
TaskScheduler上下文中的唯一bean,或者另一个TaskScheduler名为"taskScheduler" 的bean; 同样的查找也将针对ScheduledExecutorServicebean 执行.如果两者都不可解析,则将在注册器中创建并使用本地单线程默认调度程序.当需要更多控制时,@ Configuration类可以实现SchedulingConfigurer.这允许访问底层的ScheduledTaskRegistrar实例.例如,以下示例演示如何自定义用于执行计划任务的Executor:
@Configuration
@EnableScheduling
public class AppConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
}
@Bean(destroyMethod="shutdown")
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(100);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7332 次 |
| 最近记录: |