启动服务时自动启动场景

This commit is contained in:
ayan 2023-01-04 14:32:04 +08:00
parent 4701ac0c29
commit 29bc67e3a4
1 changed files with 19 additions and 1 deletions

View File

@ -1,6 +1,7 @@
package org.jetlinks.community.rule.engine.service;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.hswebframework.web.crud.events.EntityCreatedEvent;
import org.hswebframework.web.crud.events.EntityDeletedEvent;
import org.hswebframework.web.crud.events.EntityModifyEvent;
@ -13,6 +14,7 @@ import org.jetlinks.community.rule.engine.scene.SceneRule;
import org.jetlinks.community.rule.engine.web.request.SceneExecuteRequest;
import org.jetlinks.rule.engine.api.RuleData;
import org.jetlinks.rule.engine.api.RuleEngine;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -27,7 +29,8 @@ import java.util.Map;
@Service
@AllArgsConstructor
public class SceneService extends GenericReactiveCrudService<SceneEntity, String> {
@Slf4j
public class SceneService extends GenericReactiveCrudService<SceneEntity, String> implements CommandLineRunner {
private final RuleEngine ruleEngine;
@ -164,4 +167,19 @@ public class SceneService extends GenericReactiveCrudService<SceneEntity, String
);
}
@Override
public void run(String... args) {
createQuery()
.where()
.is(SceneEntity::getState, RuleInstanceState.started)
.fetch()
.flatMap(e -> Mono
.defer(() -> ruleEngine.startRule(e.getId(), e.toRule().getModel()).then())
.onErrorResume(err -> {
log.warn("启动场景[{}]失败", e.getName(), err);
return Mono.empty();
}))
.subscribe();
}
}