Слюни |Перезагрузить правила без перезапуска сервера - PullRequest
0 голосов
/ 14 мая 2019

Я создаю приложение весенней загрузки с Gradle и версией 7.20 drools. Мы загружаем базу знаний drools из файла внешнего ресурса по пути drl_file_path. Ниже приведен мой код конфигурации.

@Configuration
public class DroolConfig {
    KieServices kieServices = KieServices.Factory.get();
    @Bean
    public KieFileSystem kieFileSystem() throws IOException {
        KieFileSystem kieFileSystem =kieServices.newKieFileSystem();
        kieFileSystem.write(ResourceFactory.newFileResource(new File("drl_file_path")));
        return kieFileSystem;
    }

    @Bean
    public KieContainer kieContainer() throws IOException{
        KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());
        kieBuilder.buildAll();
        KieModule kieModule = kieBuilder.getKieModule();
        KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());
        KieScanner kScanner = kieServices.newKieScanner(kieContainer);
        kScanner.start( 10000L );
        return kieContainer;
    }

    @Bean
    public KieScanner kieScanner() throws IOException{
        return kieServices.newKieScanner(kieContainer());
    }
}

Есть шанс, что нам нужно обновить правило drools, и мы хотим обновить базу знаний drools, не перезагружая сервер, мы используем KieScanner.sacnNow(), который не работает, что является ключевым моментом, который я упускаю. Ниже приведен код перезагрузить и применить слюни правило-

@Component
public class DroolComponent {
    @Autowired private KieContainer kieContainer;
    @Autowired private KieScanner kieScanner;

    public Customer reloadDroolsAndApply(Customer customer) {
        kieScanner.scanNow();
        //above scanning not applying updated rules. 
        KieSession kieSession = kieContainer.newKieSession();
        kieSession.insert(customer);
        kieSession.fireAllRules();
        kieSession.dispose();
        return customer;
    }
}
...