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,69 @@
package woojooin.planitbatch.batch.job.investreturn;

import lombok.RequiredArgsConstructor;

import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.batch.MyBatisPagingItemReader;
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.core.configuration.annotation.StepScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import woojooin.planitbatch.batch.writer.InvestMentWriter;
import woojooin.planitbatch.domain.vo.InvestmentReturn;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;

@Slf4j
@Configuration
@EnableBatchProcessing
@RequiredArgsConstructor
public class DailyBatch {

private final JobBuilderFactory jobs;
private final StepBuilderFactory steps;
private final SqlSessionFactory sqlSessionFactory;
private final InvestMentWriter writer;


@Bean
@StepScope
public MyBatisPagingItemReader<InvestmentReturn> dailyReturnReader(
@Value("#{jobParameters['today']}") String todayStr)
{
MyBatisPagingItemReader<InvestmentReturn> reader = new MyBatisPagingItemReader<>();
reader.setSqlSessionFactory(sqlSessionFactory);
reader.setQueryId("woojooin.planitbatch.domain.mapper.InvestmentReturnMapper.findDailyReturn");
Map<String, Object> parameters = new HashMap<>();
parameters.put("today", LocalDate.parse(todayStr));

reader.setParameterValues(parameters);
reader.setPageSize(100);

return reader;
}

@Bean
public Step dailybatchStep(MyBatisPagingItemReader<InvestmentReturn> dailyReturnReader) {
return steps.get("dailybatchStep")
.<InvestmentReturn, InvestmentReturn>chunk(100)
.reader(dailyReturnReader)
.writer(writer)
.build();
}

@Bean
public Job dailybatchJob(Step dailybatchStep) {
return jobs.get("dailybatchJob")
.start(dailybatchStep)
.build();
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package woojooin.planitbatch.batch.job.investreturn;

import lombok.RequiredArgsConstructor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.batch.MyBatisPagingItemReader;
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.core.configuration.annotation.StepScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//import woojooin.planitbatch.batch.reader.DailyReturnReader;
import woojooin.planitbatch.batch.writer.DailyReturnWriter;
import woojooin.planitbatch.domain.mapper.DailyReturnMapper;
import woojooin.planitbatch.domain.vo.DailyReturn;
import org.springframework.beans.factory.annotation.Value;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;

@EnableBatchProcessing
@RequiredArgsConstructor
@Configuration
public class DailyReturnBatchJob {

private final JobBuilderFactory jobs;
private final StepBuilderFactory steps;
// private final DailyReturnReader dailyReturnReader;
private final DailyReturnWriter writer;
private final SqlSessionFactory sqlSessionFactory;


@Bean
@StepScope
public MyBatisPagingItemReader<DailyReturn> reader(
@Value("#{jobParameters['date']}") String dateStr) {
MyBatisPagingItemReader<DailyReturn> reader = new MyBatisPagingItemReader<>();

reader.setSqlSessionFactory(sqlSessionFactory);
reader.setQueryId("woojooin.planitbatch.domain.mapper.DailyReturnMapper.findAllForToday");
Map<String, Object> parameters = new HashMap<>();
parameters.put("date", LocalDate.parse(dateStr));
reader.setParameterValues(parameters);
reader.setPageSize(100);

return reader;
}


@Bean
public Job dailyReturnJob(Step dailyReturnStep) {
return jobs.get("dailyReturnJob")
.start(dailyReturnStep)
.build();
}

@Bean
public Step dailyReturnStep(MyBatisPagingItemReader<DailyReturn> reader) {
return steps.get("dailyReturnStep")
.<DailyReturn, DailyReturn>chunk(100)
.reader(reader)
.writer(writer)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package woojooin.planitbatch.batch.job.investreturn;

import lombok.RequiredArgsConstructor;

import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.batch.MyBatisPagingItemReader;
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.core.configuration.annotation.StepScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import woojooin.planitbatch.batch.writer.InvestMentWriter;
import woojooin.planitbatch.batch.writer.InvestMonthlyWriter;
import woojooin.planitbatch.domain.vo.InvestmentReturn;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;

@Slf4j
@Configuration
@EnableBatchProcessing
@RequiredArgsConstructor
public class MonthlyBatch {

private final JobBuilderFactory jobs;
private final StepBuilderFactory steps;
private final SqlSessionFactory sqlSessionFactory;
private final InvestMonthlyWriter writer;

@Bean
@StepScope
public MyBatisPagingItemReader<InvestmentReturn> monthlyReturnReader(
@Value("#{jobParameters['today']}") String todayStr)
{
MyBatisPagingItemReader<InvestmentReturn> reader = new MyBatisPagingItemReader<>();
reader.setSqlSessionFactory(sqlSessionFactory);
reader.setQueryId("woojooin.planitbatch.domain.mapper.InvestmentReturnMapper.findMonthlyReturn");
log.info(" Reader 생성 - today={} " , todayStr );
Map<String, Object> parameters = new HashMap<>();
parameters.put("today", LocalDate.parse(todayStr));

reader.setParameterValues(parameters);
reader.setPageSize(100);

return reader;
}

@Bean
public Step monthlybatchStep(MyBatisPagingItemReader<InvestmentReturn> monthlyReturnReader) {
return steps.get("monthlybatchStep")
.<InvestmentReturn, InvestmentReturn>chunk(100)
.reader(monthlyReturnReader)
.writer(writer)
.build();
}

@Bean
public Job monthlybatchJob(Step monthlybatchStep) {
return jobs.get("monthlybatchJob")
.start(monthlybatchStep)
.build();
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package woojooin.planitbatch.batch.job.investreturn;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.batch.MyBatisPagingItemReader;
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.core.configuration.annotation.StepScope;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import woojooin.planitbatch.batch.writer.DailyReturnWriter;
import woojooin.planitbatch.domain.vo.DailyReturn;

import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;

@Configuration
@EnableBatchProcessing
@Slf4j
@RequiredArgsConstructor
public class PastBatch {
private final JobBuilderFactory jobs;
private final StepBuilderFactory steps;
private final DailyReturnWriter writer;
private final SqlSessionFactory sqlSessionFactory;


@Bean
@StepScope
public MyBatisPagingItemReader<DailyReturn> etfDailyReader(
@Value("#{jobParameters['startDate']}") String startDate,
@Value("#{jobParameters['endDate']}") String endDate) {

MyBatisPagingItemReader<DailyReturn> reader = new MyBatisPagingItemReader<>();
log.info("Reader 생성됨 - startDate={}, endDate={}", startDate, endDate); // 추가 로그
reader.setSqlSessionFactory(sqlSessionFactory);
reader.setQueryId("woojooin.planitbatch.domain.mapper.DailyReturnMapper.findpast");

Map<String, Object> parameters = new HashMap<>();
parameters.put("startDate", LocalDate.parse(startDate));
parameters.put("endDate", LocalDate.parse(endDate));
reader.setParameterValues(parameters);
reader.setPageSize(100);

return reader;
}


@Bean
public Job etfDailyReturnJob(Step etfDailyReturnStep) {
return jobs.get("etfDailyReturnJob")
.start(etfDailyReturnStep)
.build();
}

@Bean
public Step etfDailyReturnStep(MyBatisPagingItemReader<DailyReturn> etfDailyReader) {
return steps.get("etfDailyReturnStep")
.<DailyReturn, DailyReturn>chunk(100)
.reader(etfDailyReader)
.writer(writer)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package woojooin.planitbatch.batch.job.investreturn;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.batch.MyBatisPagingItemReader;
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.core.configuration.annotation.StepScope;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import woojooin.planitbatch.batch.writer.InvestMentWriter;
import woojooin.planitbatch.domain.vo.InvestmentReturn;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Configuration
@EnableBatchProcessing
@RequiredArgsConstructor
public class WeeklyBatch {
private final JobBuilderFactory jobs;
private final StepBuilderFactory steps;
private final SqlSessionFactory sqlSessionFactory;
private final InvestMentWriter writer;

@Bean
@StepScope
public MyBatisPagingItemReader<InvestmentReturn> weeklyReturnReader(
@Value("#{jobParameters['today']}") String todayStr ){

MyBatisPagingItemReader<InvestmentReturn> reader = new MyBatisPagingItemReader<>();
reader.setSqlSessionFactory(sqlSessionFactory);
reader.setQueryId("woojooin.planitbatch.domain.mapper.InvestmentReturnMapper.findWeeklyReturn");
Map<String, Object> parameters = new HashMap<>();
parameters.put("today", LocalDate.parse(todayStr));
reader.setParameterValues(parameters);
reader.setPageSize(100);

return reader;
}

@Bean

public Job WeeklyBatchJob(Step WeeklyBatchStep) {
return jobs.get("WeeklyBatchJob")
.start(WeeklyBatchStep)
.build();

}

@Bean

public Step WeeklyBatchStep(MyBatisPagingItemReader<InvestmentReturn> weeklyReturnReader) {
return steps.get("WeeklyBatchStep")
.<InvestmentReturn, InvestmentReturn>chunk(100)
.reader(weeklyReturnReader)
.writer(writer)
.build();
}

}


Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package woojooin.planitbatch.batch.scheduler.investreturn;


import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDate;

@Component
@RequiredArgsConstructor
public class DailyReturnScheduler {

private final JobLauncher jobLauncher;
private final Job dailyReturnJob;

@Scheduled(cron = "0 10 00 * * ?")
public void runDailyReturnJob() throws Exception {
JobParameters jobParameters = new JobParametersBuilder()
.addString("date", LocalDate.now().toString())
// .addString("date", "2025-08-05") // 목데이터 날짜
.addLong("time", System.currentTimeMillis())
.toJobParameters();

jobLauncher.run(dailyReturnJob, jobParameters);
}
}

Loading