当前位置: 首页 > 知识库问答 >
问题:

Spring Integration Service Activator处理器业务逻辑

朱乐逸
2023-03-14

我目前刚接触Spring integration。
基本上尝试使用Java Spring integration DSL异步轮询多个文件位置。我需要获取文件名,并使用文件名执行一些操作,最后将文件推送到S3,我的问题是这些使用文件执行操作的任务是否可以在任务执行器或服务激活器处理程序中执行。我不确定哪个地方是对的。

@Autowired
private AWSFileManager awsFileManager;

@Bean
public IntegrationFlow inboundChannelFlow(@Value("${file.poller.delay}") long delay,
@Value("${file.poller.messages}") int maxMsgsPerPoll,
TaskExecutor taskExecutor, MessageSource<File> fileSource) 
{
    return IntegrationFlows.from(fileSource,
            c -> c.poller(Pollers.fixedDelay(delay)
                    .taskExecutor(taskExecutor)
                    .maxMessagesPerPoll(maxMsgsPerPoll)))
            .handle("AWSFileManager", "fileUpload")
            .channel(ApplicationConfiguration.inboundChannel)
            .get();
}

@Bean
TaskExecutor taskExecutor(@Value("${file.poller.thread.pool.size}") int poolSize) {
    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
    //Runnable task1 = () -> {this.methodsamp();};
    taskExecutor.setCorePoolSize(poolSize);

    //taskExecutor.execute(task1);
    return taskExecutor;
}
@Async
public void methodsamp()
{
    try
    {
        awsFileManager.fileUpload();
        System.out.println("test");
    }
    catch(Exception ex)
    {

    }

我在这里附上了示例代码。
还有一种方法可以检索通道中文件的文件名,因为我需要将它作为参数传递给fileUpload方法。请指教。

共有1个答案

晏德佑
2023-03-14

你的问题不清楚。TaskExecutor用于流中的线程上下文。服务激活器(.handle())完全适用于业务逻辑方法。这可以在执行器的线程上执行。并且在integrationflow中确实正确地使用了它们。

FileReadingMessageSourcejava.io.file作为有效负载生成消息。所以,这就是获取文件名的方法--只需从file.getname()

 类似资料:
  • 问题内容: 我已经为,一旦文件被上传,然后我需要调用基于从解析器下拉列表中选择什么样的价值不同的解析器,然后解析器正在创建的对象,其中我打电话的那个特定的类方法,这里要注意的一点是,既不也不是在faces- config.xml中注册的,我的问题是 如果我想维护从一个班级到另一个班级的会话信息,那么我应该在其中定义它,但是应该如何定义和定义类,应该将它定义为其他名称还是其他名称? 这是代码: 在我

  • 综述 在多功能的动态web应用程序中测试业务逻辑漏洞需要用非常规手段来思考。如果应用认证机制原先以1、2、3的步骤依次执行的验证身份目的来开发,万一用户从步骤1直接跳到步骤3会发生什么?用更加简单的例子来说,在打开失败、权限拒绝或仅仅500的错误的情况下,应用程序是否依然能够提供访问权限? 可以举出许多例子,但是不变的思想是“跳出常规思维”。这种类型的漏洞无法被漏洞扫描工具探测到,依赖于渗透测试人

  • 问题内容: 我认为人们普遍认为,作为Java(以及可能带有异常处理的任何语言)中的一条通用规则,应尽量避免使用异常处理来实际处理业务逻辑。通常,如果预期会发生某种情况,则应该检查并更直接地处理它,而不是依靠异常处理为您做检查。例如,以下情况不被认为是好的做法: 相反,延迟初始化应该更像这样完成: 当然,除了简单地处理延迟初始化之外,还可能存在更复杂的逻辑。因此,考虑到这种事情通常是令人生厌的……何

  • 1.1  概述 业务逻辑模块主要用于编写业务逻辑,一般包含三个子模块:action(定义action和procedure)、code(业务逻辑的实现,一般使用java实现,有src,dsrc,lib)、fn(函数定义)。 1.2  Action定义 语法: <action name=" n" global="true" log-enabled="true" procedure=" "> <参

  • 问题内容: 软件体系结构中的域对象和域服务是什么?我不熟悉它们,或者它们与业务逻辑层有何不同? 问题答案: 不同的人以不同的方式使用这些术语,但这是我的看法: 1)“业务”和“域”大致是同义词。“域”更为通用,因为它不会假设您正在编写业务应用程序。因此,如果我们正在编写科学应用程序或游戏,则可能更喜欢将代码的相关部分称为“域”代码,而不是“业务”代码。因此,在本说明的其余部分中,我将使用“域”,因

  • 因此,每个功能区显然都在数据库中,但它们还需要一些逻辑来确定用户何时获得了功能区。 按照我的编码方式,是一个简单的接口: 是一个抽象类,它实现了接口,避免了方法的定义: 现在,将像这样实现一个特定的功能区: 这段代码工作得很好,表是按照我期望的方式在数据库中创建的(我在本地环境中使用DDL生成)。 问题是,在域对象中编写业务逻辑感觉是错误的。这是好的练习吗?你能提出一个更好的解决方案吗?此外,我不