Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 유닉스
- oracle
- Spring boot
- lombok
- 뉴턴역학
- chatGPT's answer
- 자바
- write by chatGPT
- 인프라
- flet
- NIO
- JVM
- python
- 코틀린
- 소프트웨어공학
- GIT
- Java
- android
- GPT-4's answer
- 웹 크롤링
- 자바네트워크
- Database
- write by GPT-4
- 고전역학
- kotlin
- 파이썬
- 시스템
- 리눅스
- 역학
- 자바암호
Archives
- Today
- Total
Akashic Records
Spring Batch SFTP SSH ItemReader, ItemWriter 본문
728x90
spring batch 프로젝트에서 sftp, ssh 프로토콜로 itemwrite, itemread기능을 구현하려고 하는데 코드 만들어줘
Spring Batch를 사용하여 SFTP/SSH 프로토콜로 파일을 읽고 쓰는 기능을 구현하려면, ItemReader 및 ItemWriter 인터페이스를 구현하는 커스텀 컴포넌트를 작성해야 합니다. 또한, jsch 라이브러리를 사용하여 SFTP/SSH 연결 및 파일 작업을 수행할 수 있습니다.
먼저, 프로젝트에 jsch 라이브러리를 추가하세요.
Maven:
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
Gradle:
implementation 'com.jcraft:jsch:0.1.55'
다음으로, SFTP를 사용하여 파일을 읽는 ItemReader를 작성합니다.
import com.jcraft.jsch.*;
import org.springframework.batch.item.ItemReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class SftpItemReader implements ItemReader<String> {
private BufferedReader reader;
private String host;
private int port;
private String username;
private String password;
private String remoteFilePath;
public SftpItemReader(String host, int port, String username, String password, String remoteFilePath) {
this.host = host;
this.port = port;
this.username = username;
this.password = password;
this.remoteFilePath = remoteFilePath;
init();
}
private void init() {
try {
JSch jsch = new JSch();
Session session = jsch.getSession(username, host, port);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
InputStream inputStream = channelSftp.get(remoteFilePath);
reader = new BufferedReader(new InputStreamReader(inputStream));
} catch (JSchException | SftpException e) {
e.printStackTrace();
}
}
@Override
public String read() {
try {
return reader.readLine();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
SFTP를 사용하여 파일을 작성하는 ItemWriter를 작성합니다.
import com.jcraft.jsch.*;
import org.springframework.batch.item.ItemWriter;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.List;
public class SftpItemWriter implements ItemWriter < String > {
private BufferedWriter writer;
private String host;
private int port;
private String username;
private String password;
private String remoteFilePath;
public SftpItemWriter(String host, int port, String username, String password, String remoteFilePath) {
this.host = host;
this.port = port;
this.username = username;
this.password = password;
this.remoteFilePath = remoteFilePath;
init();
}
private void init() {
try {
JSch jsch = new JSch();
Session session = jsch.getSession(username, host, port);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
OutputStream outputStream = channelSftp.put(remoteFilePath);
writer = new BufferedWriter(new OutputStreamWriter(outputStream));
} catch (JSchException | SftpException e) {
e.printStackTrace();
}
}
@Override
public void write(List << ? extends String > items) {
try {
for (String item: items) {
writer.write(item);
writer.newLine();
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
이제 `SftpItemReader` 및 `SftpItemWriter`를 사용하여 Spring Batch 작업에서 파일을 읽고 쓸 수 있습니다. 작업 구성 클래스에서 이 컴포넌트를 사용하려면 다음과 같이 설정하십시오.
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableBatchProcessing
public class SftpBatchJobConfiguration {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Job sftpJob(Step sftpStep) {
return jobBuilderFactory.get("sftpJob")
.start(sftpStep)
.build();
}
@Bean
public Step sftpStep(SftpItemReader sftpItemReader, SftpItemWriter sftpItemWriter) {
return stepBuilderFactory.get("sftpStep")
.<String, String>chunk(10)
.reader(sftpItemReader)
.processor(itemProcessor())
.writer(sftpItemWriter)
.build();
}
@Bean
public ItemProcessor<String, String> itemProcessor() {
return item -> item;
}
@Bean
public SftpItemReader sftpItemReader() {
return new SftpItemReader("your_host", 22, "your_username", "your_password", "path/to/remote/file");
}
@Bean
public SftpItemWriter sftpItemWriter() {
return new SftpItemWriter("your_host", 22, "your_username", "your_password", "path/to/remote/output");
}
}
이제 SftpItemReader 및 SftpItemWriter를 사용하여 Spring Batch 작업에서 SFTP로 파일을 읽고 쓸 수 있습니다. 필요에 따라 이 클래스에 추가적인 메서드를 작성하여 사용할 수 있습니다.
728x90
'Spring.io' 카테고리의 다른 글
Spring Batch, Excel ItemReader로 읽어서 JPA ItemWriter 쓰기 (0) | 2023.04.21 |
---|---|
Spring Batch DataBase 설정 (0) | 2023.04.21 |
Spring Boot Filter 사용법 (0) | 2023.04.15 |
Spring Data JPA , FetchType (0) | 2023.04.12 |
Spring Data JPA, @OneToMany 무한 반복 오류 (0) | 2023.04.12 |
Comments