保险丝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