标签: spring-dsl

从grails app中的自定义groovy文件加载spring bean

尝试从Grails中的自定义groovy文件加载spring bean 2.3.7.我之前已经问过这个问题,但是经过几个小时的搜索,我无法找到从类路径加载的一致方法.

目标

  • 模块化resources.groovy为多个自定义资源文件
  • 将自定义资源文件放在标准位置: grails-app/conf/spring
  • 使用插件来做魔术; 最小化开销

试了...

//## grails-app/conf/spring/MyBeansConfig.groovy 
beans {
   testsvc(TestService){
      msg = 'hello'
   }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我正在使用beans {},而不是beans = {},显然它有所不同:

resources.groovy

这有效......

beans = {
  loadBeans 'file:C:\\Proj\Test1\grails-app\\conf\\spring\\MyBeansConfig.groovy'
}
Run Code Online (Sandbox Code Playgroud)

......根据文档,这也应该,但不是:

importBeans("classpath:*MyBeansConfig.groovy")
Run Code Online (Sandbox Code Playgroud)

更新 - 工作选项

(为Grails 2.3.7工作)

选项1:(src/java)

根据lukelazarovic的建议,这种方法有效,因为Grails会自动将groovy文件复制(不编译)src/java到类路径中; 在日食和战争部署中工作正常:

//bean config files here
src/java/MyBeansConfig.groovy
src/java/FooBeansConfig.groovy

//resources.groovy
loadBeans('classpath*:*BeansConfig.groovy')
Run Code Online (Sandbox Code Playgroud)

选项2 :( grails-app/conf/spring)

这种方法允许自定义bean配置文件grails-app/conf/spring(对ideascultormark.esher的信用 )

   //bean config files here …
Run Code Online (Sandbox Code Playgroud)

java grails groovy spring spring-dsl

8
推荐指数
1
解决办法
3775
查看次数

Spring Integration Java DSL - 如何使用重试建议调用ServiceActivator方法

我有一个带有ServiceActivator方法的Component类:

@Component("payloadService")
public class PayloadService {

    @Transactional
    @ServiceActivator
    @Description("Pre-check service")
    public Message<String> preCheck(Message<String> message) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个Spring Integration 4 Java DSL流程,它调用ServiceActivator的preCheck方法,如下所示:

IntegrationFlows.from("input.ch")
    .handle("payloadService", "preCheck")
    ...
    .get();
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试向服务调用添加重试建议(如http://docs.spring.io/spring-integration/reference/htmlsingle/#retry-config所示)但我想以Java DSL形式执行此操作如https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference#dsl-and-endpoint-configuration中所述.

但是我无法弄清楚如何在实践中将这个建议应用到我的DSL流程中.可能会挣扎,因为我还不太熟悉lambdas等.

有人可以给我一些关于如何做到这一点的指示吗?

PM,提前谢谢

spring spring-integration spring-dsl

5
推荐指数
1
解决办法
3528
查看次数

是否有使用 Java DSL 使用 Spring Integration 记录消息的组件?

我正在使用 Spring Integration 来开发我的集成场景。当我不得不写一些日志来提供一些信息时,我是这样写的:

@Bean
IntegrationFlow blacklist(BlacklistService service) {
    return m -> m
            .wireTap(f -> f.handle(t -> log.info("Adding email source address in blacklist...")))
            .<MessageHandlingException, Blacklist>transform(p -> SourceBlacklist.of((Email) p.getFailedMessage().getHeaders().get(IntegrationConstants.MailSender.EMAIL)))
            .wireTap(f -> f.handle(t -> log.info("Email source address added to blacklist.")))
            .handle(service, "voidSave");
}
Run Code Online (Sandbox Code Playgroud)

我正在使用带有 lambda 和句柄的窃听来记录我的消息。有没有更好的方法使用 Java DSL 使用 Spring Integration 编写日志?

谢谢。

java spring spring-integration spring-dsl

5
推荐指数
1
解决办法
4683
查看次数

apache camel spring dsl检查body是否包含字符串

我想检查一下:

<simple>${body} contains 'verification'</simple>
Run Code Online (Sandbox Code Playgroud)

身体是json:

{"verification": {"email": "bb@wp.pl", "code": "1234"}}
Run Code Online (Sandbox Code Playgroud)

但这种情况不起作用.我也试过了:

<simple>${body} contains &#39;verification&#39;</simple>
<simple>${bodyAs(String)} contains 'verification'</simple>
<simple>${body.verification} != null</simple>
Run Code Online (Sandbox Code Playgroud)

你能告诉我什么吗?

apache-camel spring-dsl

4
推荐指数
1
解决办法
8303
查看次数

DSL的管道源

我开始为jenkins(以前的工作流程)管道工作

我正在使用IntelliJ作为IDE

是否有GDSL文档的来源或某种方式我可以知道哪些groovy在管道中可接受,哪些不是?

还有一种方法,我可以在检查我的Jenkinsfile之前测试运行GDSL吗?

dsl jenkins spring-dsl cloudbees jenkins-workflow

4
推荐指数
1
解决办法
2116
查看次数

Camel + marklogic不使用Marklogic Content Pump

我正在尝试从文件系统中获取JSON文件,并尝试将文件插入MarkLogic数据库.

<route id="file_upload">
  <!-- incoming requests from the file is routed -->
  <from uri="file:/E:/camel/input"/>
  <to uri="http://localhost:8005/v1/documents?uri/patents/test.json"/>
</route>
Run Code Online (Sandbox Code Playgroud)

用户名和密码为:admin/admin,用于在8005上运行的MarkLogic REST实例

rest apache-camel marklogic spring-dsl

4
推荐指数
1
解决办法
166
查看次数

Spring 集成 DSL 错误处理

正如标题所说,我正在寻找一个关于 DSL 流中的 errorHandling 的好例子。具体来说,我希望处理来自服务激活器的错误。

例子:

IntegrationFlows.from(Amqp.inboundAdapter(simpleMessageListenerContainer()))
    .transform(new JsonToObjectTransformer(AlbumDescriptor.class))
    .handle(AlbumDescriptor.class, (p,h) -> transformXml(p))
    .transform(new ObjectToJsonTransformer())
    .handle(Amqp.outboundAdapter(rabbitTemplate).routingKey("xml-transformed"))
    .get();
Run Code Online (Sandbox Code Playgroud)

如果我的函数transformXml(p)抛出异常,我如何使它转到特定的 errorChannel。

如果没有抛出异常,一切都会按照我想要的方式工作。

目前,如果从此函数抛出异常,我会收到以下异常:

2014-09-17 15:26:28.566  WARN 16339 --- [cTaskExecutor-1] s.a.r.l.ConditionalRejectingErrorHandler : Execution of Rabbit message listener failed.

org.springframework.amqp.rabbit.listener.ListenerExecutionFailedException: Listener threw exception
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.wrapToListenerExecutionFailedExceptionIfNeeded(AbstractMessageListenerContainer.java:758)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:653)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:576)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$001(SimpleMessageListenerContainer.java:78)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$1.invokeListener(SimpleMessageListenerContainer.java:161)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:1177)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:559)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:950)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:934)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$600(SimpleMessageListenerContainer.java:78)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1045)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.messaging.MessageHandlingException: java.lang.reflect.InvocationTargetException
    at org.springframework.integration.dsl.LambdaMessageProcessor.processMessage(LambdaMessageProcessor.java:125)
    at org.springframework.integration.handler.ServiceActivatingHandler.handleRequestMessage(ServiceActivatingHandler.java:71)
    at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:170)
    at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78)
    at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
    at …
Run Code Online (Sandbox Code Playgroud)

spring spring-integration spring-dsl

3
推荐指数
1
解决办法
5244
查看次数

Apache Camel:查询参数与标头参数

我目前正在试用 Apache 骆驼(作为路由引擎)。我知道 Camel 支持多个 DSL,并且可以使用 Java (Java DSL) 或 Spring (Spring DSL) 进行配置。

问题:
我有以下 Spring DSL 配置。这个想法是,如果传入的请求具有名为“name”的标头参数,它将命中 when 子句,否则将请求路由到谷歌:

 <camel:route>
    <camel:from uri="servlet:///test" />
    <camel:choice>
        <camel:when>
            <camel:header>name</camel:header>
            <camel:transform>
                <camel:simple>Hello ${header.name} how are you?</camel:simple>
            </camel:transform>
        </camel:when>
        <camel:otherwise>
                <camel:to uri="http://www.google.com?bridgeEndpoint=true" />
        </camel:otherwise>
    </camel:choice>
</camel:route>
Run Code Online (Sandbox Code Playgroud)

我希望上述配置仅适用于 Header Param。但是,我注意到此配置甚至适用于查询参数,如以下请求所示:

http://localhost:8080/<war-context>/test?name=test
Run Code Online (Sandbox Code Playgroud)

有没有办法确保它仅适用于标题参数?

java apache-camel query-parameters http-headers spring-dsl

1
推荐指数
1
解决办法
1万
查看次数