java 调度程序未在Sping Boot 中运行

uurity8g  于 2023-03-11  发布在  Java
关注(0)|答案(8)|浏览(122)

我已经创建了一个Sping Boot 应用程序。我已经配置了包含调度程序方法startService()的类。下面是我的代码:

服务类别:

package com.mk.service;  
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.mk.envers.model.BossExtChange;
import com.mk.envers.model.BossExtChangeRepository;

@Component
public class EnverseDemoService {

    @Autowired
    BossExtChangeRepository bossExtChangeRepository;

    @Scheduled(fixedRate = 30000)
    public void startService() {
        System.out.println("Calling startService()");
        BossExtChange bossExtChange = bossExtChangeRepository.findById(5256868L);
        System.out.println("bossExtChange.getDescription()--->"+bossExtChange.getDescription());
        System.out.println("Ending startService()");
    }
}

主类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
@PropertySource("classpath:application.properties")
public class EnverseDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(EnverseDemoApplication.class, args);
    }
}

我已经将类注解为@Component,将作为调度程序运行的方法注解为@Scheduled(fixedRate = 30000)。但是,当作为Sping Boot 运行应用程序时,调度程序不会触发。控制台显示以下消息:

2016-02-03 10:56:47.708  INFO 10136 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup 
2016-02-03 10:56:47.721  INFO 10136 --- [           main] com.mk.envers.EnverseDemoApplication     : Started EnverseDemoApplication in 3.231 seconds (JVM running for 3.623)
2016-02-03 10:56:47.721  INFO 10136 --- [       Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@49e202ad: startup date [Wed Feb 03 10:56:44 IST 2016]; root of context hierarchy
2016-02-03 10:56:47.721  INFO 10136 --- [       Thread-2] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown 
2016-02-03 10:56:47.736  INFO 10136 --- [       Thread-2] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'

有人能帮帮我吗。

hrirmatl

hrirmatl1#

您可以通过在配置文件中添加**@ComponentScan**注解来解决此问题

@SpringBootApplication
@EnableScheduling
@ComponentScan(basePackages = "com.mk.service")
@PropertySource("classpath:application.properties")
public class EnverseDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(EnverseDemoApplication.class, args);
    }
}
bksxznpy

bksxznpy2#

我能够解决这个问题,我忘记提供@service level注解,我已经为@Scheduler创建了检查列表,请您逐个检查每个点,它将帮助您解决这个问题。
1.检查SpringBoot主类上的@EnableScheduling。
1.预定的方法应该用@Scheduled注解,遵循@Scheduled Method规则。方法应该有void返回类型,方法不应该接受任何参数。
1.确保类应该使用@Service或@Component Annotation进行注解,以便SpringBoot可以创建该类的对象。
1.调度程序作业的包应位于主应用程序类的包之下。例如,com.company是您的主应用程序类包,则调度程序类包应为com.company.scheduler,
1.如果您使用Cron表达式确认相同的示例@Scheduled(cron =“0 0/2 * * *?”),则此Cron表达式将每2分钟调度一次任务。

欢迎在评论中添加更多观点,以帮助解决问题。

06odsfpq

06odsfpq3#

一定是您忘记在应用类中添加@EnableScheduling注解。

public static void main(String[] args) {
        context = SpringApplication.run(YouApplication.class, args);
    }
omtl5h9j

omtl5h9j4#

我终于能够解决上述问题,我将服务类EnverseDemoService的包从package com.mk.service;更改为com.mk.envers.service;。这是因为如果主配置类EnverseDemoApplication存在于包com.mk.envers中,则 Boot 应用程序中的所有其他类都应在合格包中。Eg: com.mk.envers.*;

n3schb8v

n3schb8v5#

在我的例子中,lazy-initialization的值是true,它阻止Spring在启动时加载@Component,并且@Scheduled方法从未运行。
确保禁用Sping Boot 延迟初始化。

bgtovc5b

bgtovc5b6#

请检查www.example.com中是否application.properties有“spring.main.lazy-initialization=true”
将其从application.properties中删除。
即使所有配置都正确,这一简单的代码行也会启用延迟加载,因此@Component将在应用程序启动时初始化。

lg40wkob

lg40wkob7#

Swapnil已经提到了使用cron时要确保的所有检查点。还有一件事你应该做:始终使用下面的参考站点- www.example.com验证您的cron表达式是否格式正确http://www.freeformatter.com/cron-expression-generator-quartz.html#

htrmnn0y

htrmnn0y8#

在我的例子中,我只在使用@Scheduled的同一个类中添加@Component

相关问题