Expand my Community achievements bar.

SOLVED

Restricting Scheduler to run in published Env.

Avatar

Level 1

I want to restrict the scheduler to run in published env. which approach will be good for this?

1 Accepted Solution

Avatar

Correct answer by
Level 4

In the run() of scheduler you have to runmode wheather its autour or publisher

@Reference

    private SlingSettingsService settingsService;

    private Set<String> runModes;

    @Override

    public void run() {

        this.runModes = settingsService.getRunModes();

        if (null != runModes && runModes.contains("author")) {

//your code goes here...

}

View solution in original post

4 Replies

Avatar

Community Advisor

Use run mode configuration.

Add a config in config.author folder so that scheduler will not run in author

Add a config in config.publish folder so that it gets executed in publish.

Hope this helps.

Avatar

Community Advisor

Hi venusj64090183

In your service, you can define policy = ConfigurationPolicy.REQUIRE as below

@Component(policy = ConfigurationPolicy.REQUIRE) 

Now create OSGi config only for publish run mode. Your service will not satisfied with the author instance.

Reference: OSGi component in AEM that is active only in specific run mode (say, publish). – Compute Patterns

Regards,

Arpit

Avatar

Correct answer by
Level 4

In the run() of scheduler you have to runmode wheather its autour or publisher

@Reference

    private SlingSettingsService settingsService;

    private Set<String> runModes;

    @Override

    public void run() {

        this.runModes = settingsService.getRunModes();

        if (null != runModes && runModes.contains("author")) {

//your code goes here...

}

Avatar

Employee Advisor

While the answer by khamat.bn​ works for that, the best solution for this is the one by arpitv27529355​: You should never hardcode this in the code, but rely on configuration instead.

Personally I would consider every call of SlingSettingsService.getRunmodes() as bad practice.