Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package kr.co.yourplanet.batch.job;

import kr.co.yourplanet.core.entity.file.FileMetadata;
import kr.co.yourplanet.batch.repository.FileMetadataRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.support.ListItemReader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@RequiredArgsConstructor
@Configuration
public class FileMetadataCleanJobConfig {

private final JobRepository jobRepository;
private final PlatformTransactionManager transactionManager;
private final FileMetadataRepository fileMetadataRepository;

@Bean
public Job deleteOldUnuploadedFilesJob() {
return new JobBuilder("deleteOldUnuploadedFilesJob", jobRepository)
.start(deleteOldUnuploadedFilesStep())
.build();
}

@Bean
public Step deleteOldUnuploadedFilesStep() {
return new StepBuilder("deleteOldUnuploadedFilesStep", jobRepository)
.<FileMetadata, FileMetadata>chunk(100, transactionManager)
.reader(fileMetadataReader())
.writer(fileMetadataWriter())
.build();
}

@Bean
public ItemReader<FileMetadata> fileMetadataReader() {
LocalDateTime cutoff = LocalDateTime.now().minusDays(1);
List<FileMetadata> oldFiles = fileMetadataRepository.findByUploadedFalseAndCreateDateBefore(cutoff);
return new ListItemReader<>(oldFiles);
}

@Bean
public ItemWriter<FileMetadata> fileMetadataWriter() {
return items ->
fileMetadataRepository.deleteAllInBatch(new ArrayList<>(items.getItems()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package kr.co.yourplanet.batch.job;

import java.util.Map;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Component
@RequiredArgsConstructor
@Slf4j
public class FileMetadataTask {

private final JobExecutor jobExecutor;

@Scheduled(cron = "0 0 0 * * ?")
public void scheduleFileMetadataCleanJob() {
jobExecutor.executeJob("deleteOldUnuploadedFilesJob", Map.of());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package kr.co.yourplanet.batch.job;

import java.util.Map;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Component
@RequiredArgsConstructor
@Slf4j
public class InstagramBatchTask {

private final JobExecutor jobExecutor;

@Scheduled(cron = "0 0 0 * * ?")
public void scheduleFileMetadataCleanJob() {
jobExecutor.executeJob("instagramMediaJob", Map.of());
}
}
40 changes: 40 additions & 0 deletions yp-batch/src/main/java/kr/co/yourplanet/batch/job/JobExecutor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package kr.co.yourplanet.batch.job;

import java.util.Map;

import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.configuration.JobLocator;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.stereotype.Component;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Component
@RequiredArgsConstructor
@Slf4j
public class JobExecutor {

private final JobLauncher jobLauncher;
private final JobLocator jobLocator;

public void executeJob(String jobName, Map<String, Object> params) {
log.info("Starting the batch job: {}", jobName);
try {
var job = jobLocator.getJob(jobName);
var builder = new JobParametersBuilder();
params.forEach((key, value) -> builder.addString(key, value.toString()));

JobParameters jobParameters = new JobParametersBuilder()
.addString("jobID", String.valueOf(System.currentTimeMillis()))
.toJobParameters();

final JobExecution execution = jobLauncher.run(job, jobParameters);
log.info("Job {} executed with status: {}", jobName, execution.getStatus());
} catch (final Exception e) {
log.error("Failed to execute job {}: {}", jobName, e.getMessage(), e);
}
}
}
30 changes: 0 additions & 30 deletions yp-batch/src/main/java/kr/co/yourplanet/batch/job/JobRunner.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package kr.co.yourplanet.batch.repository;

import java.time.LocalDateTime;
import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;

import kr.co.yourplanet.core.entity.file.FileMetadata;

public interface FileMetadataRepository extends JpaRepository<FileMetadata, Long> {

List<FileMetadata> findByUploadedFalseAndCreateDateBefore(LocalDateTime dateTime);
}
2 changes: 1 addition & 1 deletion yp-batch/src/main/resources/application-dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ spring:

jpa:
hibernate:
ddl-auto: update # flyway 도입 전까지
ddl-auto: validate
15 changes: 15 additions & 0 deletions yp-online/src/test/resources/db/setup.sql
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
-- MEMBER --

-- ID: 0
-- 관리자
INSERT INTO member (id, email, name, tel, password, privacy_policy_agreed_time, terms_of_service_agreed_time)
VALUES (0,
'admin@gmail.com',
'관리자',
'01012345678',
'2CJn2ppvaleyrs3bZk+dP1Pe2DfoO5eKD+1h1rnI/kQ=',
NOW(),
NOW());

INSERT INTO member_salt (id, member_id, create_date, update_date, salt)
VALUES (0, 0, '2025-02-24 13:07:45.755085', '2025-02-24 13:07:45.755085',
'ici1vf8rgNYbn5s0n9ik3cFM492EQUIwlxcveOV9//k=');

-- ID: 1
-- 작가: 사업자
INSERT INTO member (id, email, password, name, gender_type, member_type, tel, birth_date,
Expand Down