【问题标题】:Fetching data from PostgreSQL database in Mule flow using JDBC transport使用 JDBC 传输在 Mule 流中从 PostgreSQL 数据库中获取数据
【发布时间】:2014-07-23 18:32:48
【问题描述】:

我有一个 Mule 流从 PostgreSQL 数据库中的表中获取数据并将数据转换为 XML 格式并写入文件:

<mule ...>
    <spring:bean id="Postgres-jdbcDataSource"
        class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
        <spring:property name="driverName" value="org.postgresql.Driver" />
        <spring:property name="url"
            value="jdbc:postgresql://host:port/schema?user=username&password=password" />
    </spring:bean>

    <jdbc:connector name="Postgres-jdbcConnector"
        dataSource-ref="Postgres-jdbcDataSource" pollingFrequency="60000"
        transactionPerMessage="false">
        <jdbc:query key="read" value="SELECT * FROM tablename" />
    </jdbc:connector>

    <file:connector name="file_connector" fileAge="500"
        streaming="false" pollingFrequency="60000" />

    <flow name="Postgres-flow">
        <jdbc:inbound-endpoint queryKey="read"
            connector-ref="Postgres-jdbcConnector">
            <jdbc:transaction action="ALWAYS_BEGIN" />
            <property key="receiveMessageInTransaction" value="true" />
        </jdbc:inbound-endpoint>

        <custom-transformer name="Postgres-transformer"
            class="com.example.transformer.DbToXmlTransformer" ignoreBadInput="false"
            encoding="UTF-8" />

        <file:outbound-endpoint connector-ref="file_connector"
            path="/home/path" outputPattern="file.xml" responseTimeout="10000"
            encoding="UTF-8" />
    </flow>
</mule>

当我运行此流程时,流程不会从数据库中获取数据并写入文件。它也不会抛出任何错误或异常。但是当我为 MySQL 或 SQLServer 数据库运行相同的流程时,相应地更改 driverName 和 url 属性,流程工作正常。

知道为什么 Postgres 数据库不工作吗?可能它需要不同的 DataSource 类?

【问题讨论】:

    标签: postgresql jdbc mule


    【解决方案1】:

    还有一个用于 mule 的 Postgre 数据源,您可以使用它来代替 spring bean:

    <jdbc:postgresql-data-source name="PostgreSQL_Data_Source" user="your user name" password="your pwd" url="jdbc:postgresql://localhost:5432/TestDB" transactionIsolation="UNSPECIFIED" doc:name="PostgreSQL Data Source"/>
    

    无论如何...,使用您的现有配置,您可以通过将 JDBC 入站端点保留在轮询组件中并在文件出站之前放置一个记录器来检查有效负载值。如果它得到记录器中的有效负载值..这意味着它正在获取值..让我知道它是否有效...您可以尝试以下操作:-

       <mule ...>
            <spring:bean id="Postgres-jdbcDataSource"
                class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
                <spring:property name="driverName" value="org.postgresql.Driver" />
                <spring:property name="url"
                    value="jdbc:postgresql://host:port/schema?user=username&password=password" />
            </spring:bean>
    
            <jdbc:connector name="Postgres-jdbcConnector"
                dataSource-ref="Postgres-jdbcDataSource" pollingFrequency="60000"
                transactionPerMessage="false">
                <jdbc:query key="read" value="SELECT * FROM tablename" />
            </jdbc:connector>
    
            <file:connector name="file_connector" fileAge="500"
                streaming="false" pollingFrequency="60000" />
    
            <flow name="Postgres-flow">
              <poll frequency="1000" doc:name="Poll">
                <jdbc:inbound-endpoint queryKey="read"
                    connector-ref="Postgres-jdbcConnector">
                    <jdbc:transaction action="ALWAYS_BEGIN" />
                    <property key="receiveMessageInTransaction" value="true" />
                </jdbc:inbound-endpoint>
        </poll>
    
         <!-- You can also use object to xml transformer if you are not using any custom transformer -->
         <!--<mulexml:object-to-xml-transformer doc:name="Object to XML"/> -->
    
                <custom-transformer name="Postgres-transformer"
                    class="com.example.transformer.DbToXmlTransformer" ignoreBadInput="false"
                    encoding="UTF-8" />
    
    <logger message="Payload :- #[message.payload]" level="INFO" doc:name="Logger"/>
    
                <file:outbound-endpoint connector-ref="file_connector"
                    path="/home/path" outputPattern="file.xml" responseTimeout="10000"
                    encoding="UTF-8" />
            </flow>
        </mule>
    

    欲了解更多信息,请在此处找到有关使用 Mule 的 Postgre 数据库的参考:- http://www.dotnetfunda.com/articles/show/2068/using-mule-studio-to-read-data-from-postgresqlinbound-and-write-it-to

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2011-03-04
      • 2010-11-30
      • 2011-08-14
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多