☻Blog("Laziji")

System.out.print("辣子鸡的博客");

DataX是阿里巴巴开源的数据同步工具

github地址https://github.com/alibaba/DataX

最近使用的时候发现一个严重的BUG, 在Window下用DataX写入HDFS时会直接删除目标目录

原因是DataX在数据同步结束时会删除临时文件, 但是HDFS没有正确解析Window下的分隔符, 而DataX又在代码中插入的是系统分隔符而不是用统一的Linux分隔符

解决方法是在HdfsWriter.java中的buildFilePathbuildTmpFilePath方法中统一使用Linux分隔符即可, 配置路径的时候也统一用'/'

这里介绍一种使用service来实现全局变量的方法

创建一个SessionService

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { Injectable } from '@angular/core';

@Injectable({
providedIn: 'root',
})
export class SessionService {

private globalContext = {}

constructor() {}

getGlobal(key: string, defaultData?: {}) {
if (!this.globalContext[key]) {
this.globalContext[key] = defaultData || {};
}
return this.globalContext[key];
}
}

session中有一个全局上下文, 在组件中通过key获取全局域

组件中使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14

@Component({
templateUrl: "test.component.html"
})
export class TestComponent {

private global = {
user: {},
};

constructor(private session: SessionService) {
this.data.global = this.session.getGlobal("TEST", this.data.global);
}
}

只需要在初始化的使用session.getGlobal(), private global里的内容就是全局的了, 多次载入组件内容保持一致

0%