这是我的春季整合xml:我用来学习的一个简单的东西......
<int-file:inbound-channel-adapter id="executionMessageFileInputChannel"
directory="file:${fpml.messages.input}"
prevent-duplicates="false" filename-pattern="*.xml">
<int:poller fixed-delay="20000" max-messages-per-poll="20"/>
</int-file:inbound-channel-adapter>
<int:service-activator input-channel="executionMessageFileInputChannel"
output-channel="executionMessageFileArchiveChannel"
ref="dummyService" method="myMethod"/>
<int-file:outbound-channel-adapter id="executionMessageFileArchiveChannel"
directory="file:${fpml.messages.archive}"
delete-source-files="true" auto-create-directory="true"/>
我真的找不到这方面的好教程..请你指点一下 集成java dsl的好教程? 另外,请帮我将其从xml转换为dsl。
更新:(在Gary's Response之后):
我设法将其翻译为此。
@MessagingGateway
public interface Archive {
@Gateway(requestChannel = "archiveFile.input")
void archive();
}
@Bean
public IntegrationFlow archiveFile() {
return IntegrationFlows
.from(Files.inboundAdapter(new File(dirPath))
.patternFilter("*.xml")
.preventDuplicatesFilter(false),
e -> e.poller(Pollers.fixedDelay(20000)
.maxMessagesPerPoll(20)))
.handle("app","myMethod")
.handle(Files.outboundAdapter(new File(outDirPath)).deleteSourceFiles(true).autoCreateDirectory(true))
.get();
}
不确定我是否正确行事。我翻译后立即发布,将测试出来。
测试它:收到以下错误:
org.springframework.beans.factory.BeanCreationException:错误 创建名为&#39; archiveFile&#39;的bean定义于 si.jdsl.App:Bean实例化通过 工厂方法失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化[org.springframework.integration.dsl.IntegrationFlow]: 工厂方法&#39; archiveFile&#39;抛出异常;嵌套异常是 java.lang.IllegalArgumentException:&#39;过滤器&#39; (org.springframework.integration.file.filters.CompositeFileListFilter@48e64352) 已经为FileReadingMessageSource配置了
有什么想法吗?
更新2:
感谢Gary,这解决了过滤器问题:服务激活器出现问题。以下是我的服务激活者:
@Bean
@ServiceActivator(inputChannel = "archiveFile.input")
public Message<File> myMethod (File inputFile){
Map<String, Object> contextHeader = new HashMap<String, Object>();
return new GenericMessage<File>(inputFile, contextHeader);
}
bean初始化失败;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名称为&#39; myMethod&#39;的bean时出错定义于 si.jdsl.App:不满意的依赖 通过类型为索引0的构造函数参数表示 [java.io.File] ::找不到类型为[java.io.File]的限定bean 依赖:预计至少有1个bean有资格成为autowire 这种依赖的候选人。依赖注释:{};嵌套 例外是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 为依赖项找到类型[java.io.File]的限定bean:expected 至少有一个bean有资格作为autowire候选者 依赖。依赖注释:{}
请让我知道我错过了什么?
答案 0 :(得分:2)
使用Files
命名空间工厂。见the DSL reference manual。这是一个通用教程here,它通过咖啡馆示例应用程序的逐行转换。 (Java 6/7版本here)。
修改强>:
这看起来像一个错误,DSL抱怨你设置了两个过滤器并且它不会允许它。
在这种情况下,你实际上并不需要这个
.preventDuplicatesFilter(false),
因为当你提供另一个过滤器时它是默认值。
如果您确实需要撰写过滤器,可以使用
.filter(myFilter())
其中myFilter
是带有模式过滤器等的CompositeFileListFilter
bean。
编辑2 :
@Bean
是在初始化时构建的,显然这是一个运行时方法。
当@Bean
注释@ServiceActivator
时,它必须是MessageHandler
类型。要使用POJO消息传递,您需要@MessageEndpoint
bean ...
@Bean
public MyPojo myPojo() {
return new MyPojo();
}
@MessageEndpoint
public static class MyPojo {
@ServiceActivator(inputChannel = "archiveFile.input")
public Message<File> myMethod (File inputFile){
Map<String, Object> contextHeader = new HashMap<String, Object>();
return new GenericMessage<File>(inputFile, contextHeader);
}
}
您可以在POJO中使用多种消息传递方法。
答案 1 :(得分:0)
If _
ARange(1).Value = "John" Or ARange(1).Value = "Thomson" Or _
ARange(1).Value = "Mattson" Or ARange(1).Value = "Powers" Or _
ARange(1).Value = "Hermkens" Or ARange(1).Value = "Licka" Or _
ARange(1).Value = "Fout" Or ARange(1).Value = "Marrin" Or _
ARange(1).Value = "Fleming" Or ARange(1).Value = "Waiblinger" Or _
ARange(1).Value = "Lambertson" Or ARange(1).Value = "Solis" Or _
ARange(1).Value = "Deot" Or ARange(1).Value = "Large" Or _
ARange(1).Value = "Gannon" Or ARange(1).Value = "FAUGHNAN" Or _
ARange(1).Value = "COMPLIANCE" Or ARange(1).Value = "Jacobs" Or _
ARange(1).Value = "Powers" Or ARange(1).Value = "TSH" Or _
ARange(1).Value = "WRONG LOCATION CODE" _
Then
If DRange Is Nothing Then
Set DRange = ARange
Else
Set DRange = Union(DRange, ARange)
End If
End If