我需要在运行时拦截所有Spring Integration组件,并且应该能够获取属性值,以便记录有意义的消息。例如:
<int-http:outbound-gateway url="someURL" http-method="GET"
request-channel="channel1"
expected-response-type="com.example.Test"
message-converters="customMessageConverters">
<int-http:uri-variable name="testId" expression="headers.testId"/>
</int-http:outbound-gateway>
在上面的示例中,我需要截获int-http:output-gateway并捕获url、request-channel和expected-response-type的值。我们需要为所有http出站网关这样做。
<int:message-history />
<int:logging-channel-adapter id="logging"
log-full-message="true" logger-name="message.history" level="DEBUG"/>
<int:wire-tap pattern="*" order="3" channel="logging" />
或
<int:message-history />
<int:logging-channel-adapter id="logger"
log-full-message="true" logger-name="message.history" level="DEBUG"/>
<int:channel id="wiretapChannel">
<int:interceptors>
<int:wire-tap channel="logger"/>
</int:interceptors>
</int:channel>
此外,我还试图将LogMessage注入到wire-tap中,以便从MessageHistory数据中执行一些额外的任务。但是控件不进入handleMessage方法。请帮忙。
<bean id="logMessage" class="com.logging.LogMessage"/>
<int:service-activator input-channel="wiretapChannel" ref="logMessage" method="handleMessage"></int:service-activator>
public class LogMessage {
public void handleMessage(org.springframework.messaging.Message<?> message) throws MessagingException {
MessageHistory history = MessageHistory.read(message);
for (int i = 0; i < history.size(); i++) {
Properties properties = history.get(i);
getLogger().info("history: " + properties.get("name"));
}
}
}
嗯,这不是标准的任务,尤其是对于您想要打印的阅读属性。此外,它们中的许多都是基于SpEL表达式的,实际值取决于请求消息。
虽然有一个组件是非常接近你想要得到的。它被称为消息历史。
您所需要的只是
-所有Spring集成组件都将被跟踪,并将它们存储到messagehistory.header_name
中,以显示集成流上消息的整个路径。
<wire-tap channel="logger"/>
<logging-channel-adapter id="logger" log-full-message="true" logger-name="message.history"/>
以截获应用程序中的所有通道并记录消息及其消息历史记录。
您可以为全局
创建自己的POJO订阅服务器(
),并执行一些智能逻辑从消息中提取MessageHistory
:MessageHistory.read(Message<?>)
。这样的MessageHistory
是一个列表
,实际上您可以在MessageHistory.Entry
类中强制转换该属性
,并遍历其属性:
public String getName() {
return this.getProperty(NAME_PROPERTY);
}
public String getType() {
return this.getProperty(TYPE_PROPERTY);
}
public String getTimestamp() {
return this.getProperty(TIMESTAMP_PROPERTY);
}
使用名称
,您可以转到BeanFactory
以获取真正的组件实例,并且已经在那里尝试提取您所需的属性,但同样:并非所有属性都可用,因为...
您还可以参考集成图,了解IntegrationNode
实现的可能公共属性。
问题内容: 我尝试了很多,但是找不到解决方案。 这是我的项目结构。 我有一个updatePropertiesFile类,用于更新所有属性文件的密钥。我有大约200个属性文件。 因此,我需要的是,我需要编写一种方法来更新所有这些属性文件中的特定键。手动更改并不是那么实际。我需要编写一个执行此功能的应用程序。 我尝试使用resoucebundle机制。但是使用资源包,我们只能获得一个属性文件。我试过和
问题内容: 我找不到使用Thymeleaf从URL获取属性的任何解决方案。例如,对于URL: 我需要获取“错误”属性值。如果有帮助,我也正在使用SpringMVC。 问题答案: 经过一番调查,我发现实际上是Spring EL问题。因此,使用null检查的完整答案是:
我需要标签中的属性值。< br >例如。Name xmlns:xsi = " http://www . w3 . org/2001/XML inst " xsi:space schema = " Name _ 5879 . xsd "
如何获取
我有一个java代码可以将这些值追加到我的属性文件中 我的属性文件将有如下条目。 key1=主机、端口、orcl、用户名、密码 key2=主机、端口、orcl、用户名、密码 key3=主机、端口、orcl、用户名、密码等… 这些key1、key2和key3是连接名。 在进入属性文件之前,首先我必须检查该文件是否提供了连接名条目。我的意思是,如果用户再次使用key1或key2或key3连接名输入值,
但是响应只返回用户和他们的一些属性,而不是我在门户中看到的所有属性。 进行REST调用以获取所有用户及其字段/属性的正确URI是什么?