我目前正在从事一个集成项目。我必须从MySQL数据库中获取一些数据,并使用Apache Camel将它们组合起来。在数据库中,我有两个表,分别是materials和packages。它们是一对多关系,一种材料可以包含多个包装。我已经知道如何从数据库中获取数据并将其保存到json文件中,但我不知道如何将这两条消息合并为一条。我读过关于聚合的文章,但我并不真正了解它们。这是我第一次使用Apache Camel,我真的不知道现在该怎么做。这些路由的代码如下所示:
public class InputAdapter{
public static void main(String[] args) throws Exception {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/Packages");
dataSource.setUsername("uname");
dataSource.setPassword("passwd");
SimpleRegistry registry = new SimpleRegistry();
registry.bind("dataSource", dataSource);
CamelContext context = new DefaultCamelContext(registry);
context.addRoutes(new RouteBuilder() {
@Override
public void configure() {
from("timer://foo?repeatCount=1")
.setBody(constant("SELECT * FROM material;"))
.to("jdbc:dataSource")
.marshal().json(true)
.to("file:/some/path/to/file?fileName=materials.json");
from("timer://foo?repeatCount=1")
.setBody(constant("SELECT * FROM package;"))
.to("jdbc:dataSource")
.marshal().json(true)
.to("file:/some/path/to/file?fileName=packages.json");
}
});
context.start();
Thread.sleep(10000);
context.stop();
}
}
材质和包的模型只是具有getter和setter的私有属性:
public class Material {
private int id;
private int number;
private enumType type;
private String name;
private String description;
private boolean is_deleted;
private List<Package> packageList = new ArrayList<>();
public enum enumType {
A1, A2, A3, B1, B2, B3, Z1, Z2, Z3;
}
public int getId() {
return this.id;
}
... some getters
}
public List<Package> getPackageList() {
return this.packageList;
}
public void setId(int id) {
this.id = id;
}
... some setters
public void setPackageList(List<Package> packages) {
this.packageList = packages;
}
}
谁能给我一个提示,我现在该怎么办?请帮帮我。
聚合器通常用于合并来自某个源的消息。我可能不会使用聚合器来组合这两组项目。如果您希望提取所有材质并从数据库中获取关联的包,那么最好检索每个材质的包列表。
我将创建一个处理器来处理检索每个返回材料对象的包,然后在单个路由中输出整个内容。
您可以在Camel中html" target="_blank">定义一个处理器类,如下所示:
public class PackageProcessor implements Processor {
@Override
public void process(Exchange exchange) {
// Transform the input to your message class
// Retrieve the Packages
// Transform the results to Packages
// Add to the Material
// Set the Out Body
exchange.getMessage().setBody(material);
}
}
然后,您可以使用路由中的处理器来执行此工作。这将使路由看起来像这样:
from("timer://foo?repeatCount=1")
.routeId("my-material-route")
.setBody(constant("SELECT * FROM materials;"))
.to("jdbc:dataSource")
.split(body())
.process(new PackageProcessor())
.setHeader(Exchange.FILE_NAME, simple("${exchangeId}.json"))
.marshal().json(true)
.to("file:/somepath")
.end();
这将把每条记录输出到一个包含所需信息的Json文件中。如果您想将所有项目都放在一个文件中,这就是聚合器发挥作用的地方。
您会注意到路由中的几个项目超出了您的原始路由。JDBC组件的结果是一个ArrayList
处理器完成后,我们将exchange上的CamelFileName头设置为exchange Id,然后这将从Materials表中为每条记录输出一个单独的文件。
如果您想将所有内容都包含在一个文件中,您可以使用聚合器来收集交换并构建列表。让它将交换释放到JSON文件中可能会稍微复杂一点。您通常必须设置超时或某种评估函数来确定何时应该释放“超级”交换。
我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:
所以我根据YouTube上的教程创建了一个房间数据库。我有两个栏day and likes,每个栏都有int.目前,我已经用三行数据手动填充了数据库。 下面是手动填充数据库的代码: 在我的Dao类中,我当前有Insert、Update、deleteAll和getall...方法。这里是道: } 现在,我要从Room数据库中检索基于当天的数据。所以我想要第6天的likes数,它是1。我想检索数据并将
互联网日安! 我正在尝试从mysql数据库检索并显示一个图像到一个图像视图(android)中。图像是blob类型。我有以下php代码从MySQL获取图像。 下面是使用JSON的android代码。 提前感谢您的帮助!
问题内容: 我有以下表格及其关系。我将JSON数据存储在client_services表中。它们是使用MySQL查询来检索JSON值的任何方式,如下所示: 还是可以进一步规范化client_services表? 表: 表: 表: 表: 问题答案: 由于很多人都亲自问过我这个问题,所以我想我会再作一次修改。这是一个具有SELECT,Migration和View Creation的完整SQL的要点,
我正在使用XAMPP。我试图在网页上转储我的db_数据。错误消息是“调用未定义的函数mysql\u connect”。我应该导入一些文件吗? 或者我应该在代码中进行更改??