java - Spring Integration - 外部化 JDBC 查询

标签 java spring groovy spring-integration

是否有一种简单的方法可以从 jdbc 出站网关外部化大型 SQL 查询,而不是内联它?原因是我们必须进行许多大型查询,并且我们希望将它们放在自己的文件中,或者至少将它们外部化在 beans 中。

一些注意事项:

  • 我无法控制数据库,因此无法创建任何内容 那里(例如存储过程)
  • 我不想仅仅为了这个问题创建类,我只是想稍微组织/重构它,而不是让它变得更复杂 引入许多其他步骤
  • 我更喜欢创建裸 .sql 文件,但将查询放入带有 bean 的 xml 中也可以
  • 我无法选择使用 hibernate,只能使用 spring 集成 jdbc

考虑到我们将有许多其他出站网关,欢迎提出有关如何更好地组织此 Activity 的建议:)

例如,我不希望将 SQL 内联到“int-jdbc:outbound-gateway”元素中,如下所示:

<int-jdbc:outbound-gateway
         data-source="datasource"
         request-channel="reqChannel"
         reply-channel="respChannel"
         row-mapper="datamapper" max-rows-per-poll="1000"
         query=" SELECT Field1, Field2, ManyOthers
                 FROM Table T
                 JOIN A ON A.id = T.id [... many other joins here ...]
                 WHERE SOMECONDITION=:payload">
</int-jdbc:outbound-gateway>


我使用答案做了什么

简单地说:

<bean id="myCoolQuery" class="java.lang.String">
    <constructor-arg>
      <value>
        <![CDATA[
                 SELECT Field1, Field2, ManyOthers
                 FROM Table T
                 JOIN A ON A.id = T.id [... many other joins here ...]
                 WHERE SOMECONDITION=:payload
        ]]>
      </value>
    </constructor-arg>
</bean> 

<int-jdbc:outbound-gateway
         data-source="datasource"
         request-channel="reqChannel"
         reply-channel="respChannel"
         row-mapper="datamapper" max-rows-per-poll="1000"
         query="#{myCoolQuery}">
</int-jdbc:outbound-gateway>

它也适用于 bean 内部使用的“:payload”参数。

最佳答案

是的,您可以将它们放入属性文件中,并使用属性占位符 ${...}来解决它们,或者您可以使用 SpEL...

"#{myQueryBean.queryOne}"

哪里myQueryBean<bean/>这是一个带有方法的类的实例...

public String getQueryOne() {...}

或者类中的静态常量...

"#{T(foo.Queries).QUERY_ONE}"

public static final String QUERY_ONE = "...";

关于java - Spring Integration - 外部化 JDBC 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556825/

相关文章:

java - 如何实现SpringRetry

java - SonarQube 提示 : Either log or rethrow this exception

grails - Grails强制 Controller 下载文件

java - Spring Boot事务管理器建议回滚所有异常

java - 从 groovy 类中的应用程序上下文获取 spring bean

java - 如何在grails中使用POST方法?

java - 如何在 Java 项目中管理证书、信任库和 keystore key 文件

java - 无法在此实例 oneliner 上实例化和调用方法

java - 是什么导致方法被热点编译器归类为 "' 不可编译(禁用)?

java - 在将 String 转换为一组对象的情况下,最好的 Spring 转换器策略是什么?