我试图使用Spring Batch创建一个使用DataSource(配置之前)并运行查询的作业。我希望能够遍历返回的ResultSet,用返回的数据创建一个新表。
@Bean
public JdbcCursorItemReader<ResultSet> reader(String query, DataSource dataSource) {
JdbcCursorItemReader<ResultSet> itemReader = new JdbcCursorItemReader<>();
itemReader.setDataSource(dataSource);
itemReader.setSql(query);
return itemReader;
}
我的ItemProcessor应该收到什么?这个?
public class ExtractionItemProcessor implements ItemProcessor<ResultSet, String>{
@Override
public String process(ResultSet item) throws Exception {
// transform the resultSet into a SQL INSERT
}
}
编辑:我知道查询结果的唯一方法是ResultSet元数据,所以我不能创建POJO和设置属性。
创建一个POJO类来表示记录,例如foo
:
public class Foo {
private final long id;
// more properties
public Foo(long id // ,...) {
this.id = id;
// set other properties
}
public long getId() {
return id;
}
}
因此,阅读器将是JDBCursorItemReader
。
并创建rowmapper
,例如:
public FooRowMapper implements implements RowMapper<Foo> {
@Override
public Foo mapRow(ResultSet rs, int rowNum) throws SQLException {
long id = rs.getLong("id");
// more properties
return new Foo(id // more properties);
}
}
public class ExtractionItemProcessor implements ItemProcessor<Foo, String>{
@Override
public String process(Foo item) throws Exception {
int someValue = transform(foo);
return "INSERT INTO blah blah blah..." + someValue + "..."; // potentially dangerous - see SQL injection attack
}
}
为了更进一步,也许ExtractionItemProcessor
转换foo
应该创建bar
。然后看起来像:
public class ExtractionItemProcessor implements ItemProcessor<Foo, Bar>{
@Override
public Bar process(Foo item) throws Exception {
int someValue = transform(foo);
// more values....
return new Bar(someValue // more values);
}
}
因此,ItemWriter
impelementation将获得列表
,它知道如何安全地将bar
插入到另一个表中。
我有一个springbatch应用程序,我将连接到一个网络数据库进行阅读。我发现的大多数示例都嵌入了数据库,用于独立测试。我不想那样做。我不确定配置是否类似。以下是我所拥有的最具德国特色的部分(带有一些异议): ,然后从应用程序启动: 我没有配置数据源。我不确定,因为我的基本上只是一个到远程网络数据库的客户端连接,它的配置是否会与我找到的各种示例的嵌入式设置不同。所以我自然会出错(如下)。我只是在
我需要从数据库读取数据,并使用PIG分析数据。我用java编写了一个UDF,引用了下面的链接 org.apache.pig.impl.logicallayer.frontendException:错误1066:无法在org.apache.pig.pig.tools.grunt.gruntparser.openiterator(pigserver.java:892)在org.apache.pig.t
问题内容: 我在通过火花流从天蓝色斑点读取数据时遇到问题 上面的代码适用于HDFS,但无法从Azure blob读取文件 上面是在azure UI中显示的路径,但是这行不通,我是否丢失了某些内容,以及如何访问它。 我知道Eventhub是流数据的理想选择,但是我目前的情况要求使用存储而不是队列 问题答案: 为了从Blob存储中读取数据,需要完成两件事。首先,您需要告诉Spark在基础Hadoop配
问题内容: 我有一个MS-Access数据库,我正在使用JDBC(我认为是JDBC-ODBC桥)在Java中连接到该数据库。我的访问数据库有一些希伯来语值。 当我尝试使用String str = rs.getString(1)(rs是RowSet)读取这些值时,我得到的字符串只是一个问号字符串。 我还有希伯来语中的其他字符串,这些字符串是我在Java代码中使用字符串文字设置的,它们可以正常工作。所
我有一些非常类似于下面的代码(我不得不做一些困惑)。我正在获取一个应用程序启动失败的错误。未显示的代码是datasource bean和spring boot application类。当我在debug中放置断点并运行所有bean时,所有bean似乎都被创建了,除了Job和Step bean,这两个bean似乎被完全跳过了。我不确定如何进一步诊断。似乎是一些Spring的魔法问题。任何想法都非常感
问题内容: 是否可以将数据从Microsoft Sql Server(以及oracle,mysql等)读取到Spark应用程序中的rdd中?还是我们需要创建一个内存中的集合并将其并行化为RDD? 问题答案: 从邮件列表中找到了解决方案。可以使用JdbcRDD完成此操作。我需要获取MS Sql Server JDBC驱动程序jar并将其添加到项目的lib中。我想使用集成安全性,因此需要将sqljdb