我正在开发一个Spark应用程序,我习惯将Spring作为依赖注入框架.现在我遇到了问题,处理部分使用了Spring的@Autowired功能,但它被Spark序列化和反序列化.
所以下面的代码让我陷入困境:
Processor processor = ...; // This is a Spring constructed object
// and makes all the trouble
JavaRDD<Txn> rdd = ...; // some data for Spark
rdd.foreachPartition(processor);
Run Code Online (Sandbox Code Playgroud)
处理器看起来像这样:
public class Processor implements VoidFunction<Iterator<Txn>>, Serializeable {
private static final long serialVersionUID = 1L;
@Autowired // This will not work if the object is deserialized
private transient DatabaseConnection db;
@Override
public void call(Iterator<Txn> txns) {
... // do some fance stuff
db.store(txns);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:是否甚至可以将Spring与Spark结合使用?如果没有,那么做这样的事情最优雅的方式是什么?任何帮助表示赞赏!
类作为LocalDateTime从封装java.time是基于值类.如果我有一个实体使用这样的对象作为字段,我会遇到以下"问题":不应序列化基于值的类.但是,JPA实体必须实现Serializable接口.这个悖论的解决方案是什么?不应该有人使用LocalDateTime作为JPA实体的字段吗?使用日期代替?这将是不满意的.
这个问题是一个声纳规则squid:S3437,因此项目中存在很多错误,因为我们从Date更改为LocalDateTime ...
基于价值的课程使用导致的不合规解决方案:
@Entity
public class MyEntity implements Serializable{
@Column
private String id; // This is fine
@Column
private LocalDateTime updated; // This is not ok, as LocalDateTime is a value based class
@Column
private Date created; // This however is fine..
}
Run Code Online (Sandbox Code Playgroud) 我在这里的第一个问题:)我正在寻找一个警报框架.它应该能够做到:
我找不到东西,能做到这一点.我已经读过,JMX Framework能够做到这一点,但我不知道如何做.我会很高兴一些想法:)
使用泛型时,我遇到Spring问题.以下代码描述了这个问题:
public class TestInj<S> {
S elem;
public S getElem() {
return elem;
}
public void setElem(S elem) {
this.elem = elem;
}
}
@Component
public class First extends TestInj<String> {
public First() {
setElem("abc");
}
}
@Component
public class Second extends TestInj<Integer> {
public Second() {
setElem(2);
}
}
public class BaseTest<T> {
@Autowired
protected TestInj<T> test;
}
@Named
public class Test extends BaseTest<String> {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("conf-spring.xml");
context.refresh();
Test test …Run Code Online (Sandbox Code Playgroud) 我想将数据插入到不同的表中的数据库中.由于约束,我必须按特定顺序执行此操作.这意味着,首先插入表a,然后b,然后c,....并且没有混合表.但我正在编写一个程序,它可以获取多个csv文件,并将它们导入数据库,但程序无法知道什么是正确的顺序.所以我认为交易是正确的方式,因为我听说,数据一致性必须只存在于交易结束时.但这不起作用
我的代码看起来像这样:
Connection connection = DriverManager.getConnection(url, user, pw);
connection.setAutoCommit(false);
Statement statement = connection.createStatement();
statement.addBatch("INSERT INTO c ....");
statement.addBatch("INSERT INTO a ....");
statement.addBatch("INSERT INTO b ....");
statement.addBatch("INSERT INTO a ....");
// ...
statement.executeBatch();
statement.close();
connection.commit();
Run Code Online (Sandbox Code Playgroud)
但我会得到ORA-02291(完整性约束违规):-(
java ×5
spring ×2
alert ×1
apache-spark ×1
frameworks ×1
generics ×1
java-8 ×1
jdbc ×1
jpa ×1
oracle ×1
sonarqube ×1
transactions ×1