数据库
首页 > 数据库> > 保险丝ide如何定义数据库表的终点

保险丝ide如何定义数据库表的终点

作者:互联网

当涉及带有Fuse的Apache Camel时,我听说过很多成功集成的故事.从此.在这里,我刚刚开始探索Fuse IDE,我想做的只是一个简单的任务:

>阅读固定长度文件
>解析固定长度文件
>将其持久化到mysql数据库表

我只能做到:

>读取固定长度文件(端点为“ file:src / data / Japan?noop = true”)
>使用Bindy定义元帅并使用@FixedLengthRecord注释定义POJO包模型
>然后我被困住了…如何将POJO持久化到mysql数据库表中?我可以看到一些JDBC,IBatis和JPA端点,但是如何在Fuse IDE中实现呢?

My POJO package:
package com.mbww.model;

import org.apache.camel.dataformat.bindy.annotation.DataField;
import org.apache.camel.dataformat.bindy.annotation.FixedLengthRecord;

@FixedLengthRecord(length=91)
public class Japan {

@DataField(pos=1, length=10)
private String TNR; 

@DataField(pos=11, length=10)
private String ATR;

@DataField(pos=21, length=70)
private String STR; 
}

解决方法:

好了,您可以使用以下所有组件来实际从数据库读取和写入数据:

> JDBC
>宜必思
> MyBATIS
> SPRING-JDBC
> SQL
>定制处理器

我将向您展示如何使用自定义处理器将行插入表中.这样做的主要原因是您将可以处理消息并进行交流,这将使您对Camel有了更多的了解.通过遵循骆驼站点上的文档,可以使用所有其他组件.

因此,让我们回顾一下您所拥有的.您正在读取文件并将主体转换为绑定对象.因此,对于您的文本文件中的每一行,Camel都会将com.mbww.model.JAPAN类的绑定对象发送到下一个端点.下一个端点需要与数据库对话.我可以立即发现一个问题,您正在使用元帅,而您应该使用非元帅.

该文档明确指出:如果您从诸如文件,HTTP或JMS之类的Camel组件之一收到消息,则您通常希望将有效载荷编组到某个Bean中,以便您可以使用某些Bean Integration对其进行处理或执行谓词评估等. .为此,请使用Java或Xml配置中的DSL中的非编组词.

您的bindy类看起来不错,但是缺少getter,setter将该类修改为如下所示:

package com.mbww.model;
import org.apache.camel.dataformat.bindy.annotation.DataField;
import org.apache.camel.dataformat.bindy.annotation.FixedLengthRecord;

@FixedLengthRecord(length=91)
public class Japan {

  @DataField(pos=1, length=10)
  private String TNR; 

  @DataField(pos=11, length=10)
  private String ATR;

  @DataField(pos=21, length=70)
  private String STR;

  public String getTNR() {
    return TNR;
  }

  public void setTNR(String tNR) {
    TNR = tNR;
  }

  public String getATR() {
    return ATR;
  }

  public void setATR(String aTR) {
    ATR = aTR;
  }

  public String getSTR() {
    return STR;
  }

  public void setSTR(String sTR) {
    STR = sTR;
  } 
}

首先,您需要在路由中为数据库创建数据源.第一件事是将mysql驱动程序jar添加到您的maven依赖项中,打开pom.xml文件,并向其添加以下依赖项.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <!-- use this version of the driver or a later version of the driver -->
    <version>5.1.25</version>
</dependency>

现在,我们需要声明一个定制处理器以在将使用该驱动程序的路由中使用,并将接收到的主体插入表中.

因此,让我们在Fuse IDE中创建一个称为PersistToDatabase代码的新类,如下所示:

package com.mbww.JapanData;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Map;

import org.apache.camel.Body;
import org.apache.camel.Exchange;
import org.apache.camel.Handler;
import org.apache.camel.Headers;

import com.mbww.model.Japan;
import com.mysql.jdbc.Statement;


public class PersistToDatabase {
@Handler
public void PersistRecord
(
        @Body Japan msgBody
        , @Headers Map hdr
        , Exchange exch
) throws Exception
{
    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        System.out.println("Where is your MySQL JDBC Driver?");
        e.printStackTrace();
        return;
    }

    System.out.println("MySQL JDBC Driver Registered!");
    Connection connection = null;

    try {
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/databasename","root", "password");

    } catch (SQLException e) {
        System.out.println("Connection Failed! Check output console");
        e.printStackTrace();
        return;
    }

    if (connection != null) {
        System.out.println("You made it, take control your database now!");
    } else {
        System.out.println("Failed to make connection!");
    }
    try {
        PreparedStatement stmt=connection.prepareStatement("INSERT INTO JapanDate(TNR,ATR,STR) VALUES(?,?,?)");
        stmt.setString(1, msgBody.getTNR());
        stmt.setString(2, msgBody.getATR());
        stmt.setString(1, msgBody.getSTR());
        int rows = stmt.executeUpdate();
        System.out.println("Number of rows inserted: "+Integer.toString(rows));
    }
    catch(Exception e){
        System.out.println("Error in executing sql statement: "+e.getMessage() );
        throw new Exception(e.getMessage());
    }

}
}

这个类是一个POJO,除了PersistRecord上的@Handler注释外,别无所求.该注释告诉骆驼,PersistRecord方法/过程将处理消息交换.您还将注意到,PersistRecord方法的参数类型为Japan.如前所述,当您在骆驼路线中调用转换bean时,它将每一行转换为Japan对象,然后将其沿路线传递.

其余代码只是如何处理JDBC连接和调用insert语句.

我们几乎完成了最后一件事.我们需要在骆驼路线xml中声明此类.根据您的拱门类型,该文件通常将被称为camel-route.xml或blueprint.xml.打开“源”选项卡并添加以下行< bean id =“ JapanPersist” class =“ com.mbww.JapanData.PersistToDatabase” />在< camelContext>之前标签.

这基于我们刚刚添加到骆驼路线中的类,声明了一个名为JapanPersist的新春豆.现在,您可以在骆驼路线中引用此bean.

因此,最终的路由xml文件应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:camel="http://camel.apache.org/schema/blueprint"
   xsi:schemaLocation="
   http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
   http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">

<bean id="JapanPersist" class="com.mbww.JapanData.PersistToDatabase"/>

  <camelContext trace="false" id="blueprintContext" xmlns="http://camel.apache.org/schema/blueprint">
    <route id="JapanDataFromFileToDB">
        <from uri="file:src/data/japan"/>
        <unmarshal ref="Japan"/>
        <bean ref="JapanPersist"/>        
    </route>
</camelContext>

</blueprint>

或查看以下屏幕截图:

一旦了解了该技术,就可以通过使用拆分器,连接池和线程进行大量并发插入等操作来开始扩展解决方案.

使用上面的技术,您学习了如何将自己的bean注入骆驼路线,这使您能够直接在代码中使用消息.

我没有测试代码,因此可能会出现一两个错误,但是想法应该很清楚.

标签:apache-camel,fuseesb,mysql
来源: https://codeday.me/bug/20191121/2053974.html