流口水资源URL无法从S3存储桶中读取数据

发布于 2025-01-27 16:58:32 字数 3872 浏览 3 评论 0原文

我正在尝试实现流口水引擎,我已将XLSX文件上传到我的S3存储桶上,当我尝试从S3文件夹获取文件时,问题就会到达代码中断和移动以捕获块,并且从本地资源文件夹中读取文件。无法识别问题,如果我公开我的文件夹,我的代码有什么问题,那么我很容易访问该文件。 方法1

  @Configuration
public class DroolsAutoConfiguration {
    
    private static final String RULES_PATH = "rules/";
    
    @Bean
    @ConditionalOnMissingBean(KieFileSystem.class)
    public KieFileSystem kieFileSystem() throws IOException {
        KieFileSystem kieFileSystem = getKieServices().newKieFileSystem();
            kieFileSystem.write(ResourceFactory.newUrlResource("s3url"));
        return kieFileSystem;
    }

    
    @Bean
    @ConditionalOnMissingBean(KieContainer.class)
    public KieContainer kieContainer() throws IOException {
        KieServices kieServices =  getKieServices();
        final KieRepository kieRepository = kieServices.getRepository();
        
        kieRepository.addKieModule(new KieModule() {
            @Override
            public ReleaseId getReleaseId() {
                return kieRepository.getDefaultReleaseId();
            }
        });
        
        KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());
        Results results = kieBuilder.getResults();
        if (results.hasMessages(Message.Level.ERROR)) {
            System.out.println(results.getMessages());
            throw new IllegalStateException("### errors ###");
        }

        kieBuilder.buildAll();

        KieContainer kieContainer = kieServices.newKieContainer(kieRepository.getDefaultReleaseId());
        KieUtils.setKieContainer(kieContainer);
        return kieContainer;
    }
    
    private KieServices getKieServices() {
        return KieServices.Factory.get();
    }
    
    @Bean
    @ConditionalOnMissingBean(KieBase.class)
    public KieBase kieBase() throws IOException {
        return kieContainer().getKieBase();
    }

    @Bean
    @ConditionalOnMissingBean(KModuleBeanFactoryPostProcessor.class)
    public KModuleBeanFactoryPostProcessor kiePostProcessor() {
        return new KModuleBeanFactoryPostProcessor();
    }
}

方法2

@Configuration
@Slf4j
public class DroolConfig {
    @Autowired
    private AmazonS3 amazonS3Client;


    private KieServices kieServices = KieServices.Factory.get();

    public KieFileSystem getKieFileSystem() throws IOException {
        KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
        Resource dt;
        try {
            dt= ResourceFactory
                    .newUrlResource("S3 URL");
        }catch (Exception e){
            dt= ResourceFactory
                    .newClassPathResource("localfile.xlsx");
        }
        kieFileSystem.write(dt);
        DecisionTableProviderImpl decisionTableProvider
                = new DecisionTableProviderImpl();

        String drl = decisionTableProvider.loadFromResource(dt, null);
        log.info("*************"+drl);
        return kieFileSystem;
    }

    @Bean
    public KieContainer getKieContainer() throws IOException {
        System.out.println("Container created...");
        getKieRepository();
        KieBuilder kb = kieServices.newKieBuilder(getKieFileSystem());
        kb.buildAll();
        KieModule kieModule = kb.getKieModule();
        KieContainer kContainer = kieServices.newKieContainer(kieModule.getReleaseId());
        return kContainer;
    }

    private void getKieRepository() {
        final KieRepository kieRepository = kieServices.getRepository();
        kieRepository.addKieModule(new KieModule() {
            public ReleaseId getReleaseId() {
                return kieRepository.getDefaultReleaseId();
            }
        });
    }

    @Bean
    public KieSession getKieSession() throws IOException {
        System.out.println("session created...");
        return getKieContainer().newKieSession();
    }

}

方法2即使水桶是私人的,任何人都可以告诉我第一次方法的问题是什么

I am trying to implement drool engine I have uploaded my xlsx file on my s3 bucket the issue comes when I try to get file from my s3 folder the code breaks and moves to catch block and the file is read from local resource folder.I am not able to identify the issue don't know what is wrong with my code If I make my folder public then I am easily able to access the file.I have use two approach
Approach 1

  @Configuration
public class DroolsAutoConfiguration {
    
    private static final String RULES_PATH = "rules/";
    
    @Bean
    @ConditionalOnMissingBean(KieFileSystem.class)
    public KieFileSystem kieFileSystem() throws IOException {
        KieFileSystem kieFileSystem = getKieServices().newKieFileSystem();
            kieFileSystem.write(ResourceFactory.newUrlResource("s3url"));
        return kieFileSystem;
    }

    
    @Bean
    @ConditionalOnMissingBean(KieContainer.class)
    public KieContainer kieContainer() throws IOException {
        KieServices kieServices =  getKieServices();
        final KieRepository kieRepository = kieServices.getRepository();
        
        kieRepository.addKieModule(new KieModule() {
            @Override
            public ReleaseId getReleaseId() {
                return kieRepository.getDefaultReleaseId();
            }
        });
        
        KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());
        Results results = kieBuilder.getResults();
        if (results.hasMessages(Message.Level.ERROR)) {
            System.out.println(results.getMessages());
            throw new IllegalStateException("### errors ###");
        }

        kieBuilder.buildAll();

        KieContainer kieContainer = kieServices.newKieContainer(kieRepository.getDefaultReleaseId());
        KieUtils.setKieContainer(kieContainer);
        return kieContainer;
    }
    
    private KieServices getKieServices() {
        return KieServices.Factory.get();
    }
    
    @Bean
    @ConditionalOnMissingBean(KieBase.class)
    public KieBase kieBase() throws IOException {
        return kieContainer().getKieBase();
    }

    @Bean
    @ConditionalOnMissingBean(KModuleBeanFactoryPostProcessor.class)
    public KModuleBeanFactoryPostProcessor kiePostProcessor() {
        return new KModuleBeanFactoryPostProcessor();
    }
}

Approach 2

@Configuration
@Slf4j
public class DroolConfig {
    @Autowired
    private AmazonS3 amazonS3Client;


    private KieServices kieServices = KieServices.Factory.get();

    public KieFileSystem getKieFileSystem() throws IOException {
        KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
        Resource dt;
        try {
            dt= ResourceFactory
                    .newUrlResource("S3 URL");
        }catch (Exception e){
            dt= ResourceFactory
                    .newClassPathResource("localfile.xlsx");
        }
        kieFileSystem.write(dt);
        DecisionTableProviderImpl decisionTableProvider
                = new DecisionTableProviderImpl();

        String drl = decisionTableProvider.loadFromResource(dt, null);
        log.info("*************"+drl);
        return kieFileSystem;
    }

    @Bean
    public KieContainer getKieContainer() throws IOException {
        System.out.println("Container created...");
        getKieRepository();
        KieBuilder kb = kieServices.newKieBuilder(getKieFileSystem());
        kb.buildAll();
        KieModule kieModule = kb.getKieModule();
        KieContainer kContainer = kieServices.newKieContainer(kieModule.getReleaseId());
        return kContainer;
    }

    private void getKieRepository() {
        final KieRepository kieRepository = kieServices.getRepository();
        kieRepository.addKieModule(new KieModule() {
            public ReleaseId getReleaseId() {
                return kieRepository.getDefaultReleaseId();
            }
        });
    }

    @Bean
    public KieSession getKieSession() throws IOException {
        System.out.println("session created...");
        return getKieContainer().newKieSession();
    }

}

Approach 2 works fine even if the bucket is private can anyone tell me what is the issue with first approach

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文