Skip to content

Commit

Permalink
YEL-214 [setting] YEL-214 [fix] 스프링 배치이슈
Browse files Browse the repository at this point in the history
  • Loading branch information
hyeonjeongs committed Feb 28, 2024
1 parent 4b94592 commit a127d97
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 38 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
package com.yello.server.infrastructure.batch;


import com.yello.server.domain.user.entity.User;
import lombok.RequiredArgsConstructor;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.context.annotation.Configuration;

@RequiredArgsConstructor
@Configuration
public class ChunkProcessor {
public ItemProcessor<User, User> lunchEventProcessor() {
ItemProcessor<User, User> item = user -> {
System.out.println(user.getId() + ", "+ user.getName() + " dds121212");
return user;
};
return item;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@
import com.yello.server.domain.user.entity.User;
import com.yello.server.domain.user.repository.UserJpaRepository;
import jakarta.persistence.EntityManagerFactory;
import java.util.Collections;
import javax.sql.DataSource;
import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.data.RepositoryItemReader;
import org.springframework.batch.item.data.builder.RepositoryItemReaderBuilder;
import org.springframework.batch.item.database.JdbcCursorItemReader;
import org.springframework.batch.item.database.JdbcPagingItemReader;
import org.springframework.batch.item.database.JpaPagingItemReader;
import org.springframework.batch.item.database.Order;
import org.springframework.batch.item.database.PagingQueryProvider;
import org.springframework.batch.item.database.builder.JdbcCursorItemReaderBuilder;
import org.springframework.batch.item.database.builder.JdbcPagingItemReaderBuilder;
import org.springframework.batch.item.database.builder.JpaPagingItemReaderBuilder;
import org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean;
Expand All @@ -19,14 +23,10 @@
import org.springframework.data.domain.Sort;
import org.springframework.jdbc.core.BeanPropertyRowMapper;

import javax.sql.DataSource;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

@RequiredArgsConstructor
@Configuration
public class ChunkReader {

private final UserJpaRepository userRepository;
private final EntityManagerFactory entityManagerFactory;
private final DataSource dataSource;
Expand All @@ -36,50 +36,59 @@ public class ChunkReader {
public RepositoryItemReader<User> usersDataRepositoryItemReader() {

return new RepositoryItemReaderBuilder<User>()
.name("userDataReader")
.repository(userRepository)
.methodName("findAllByPageable")
.pageSize(100)
.sorts(Collections.singletonMap("id", Sort.Direction.ASC))
.build();
.name("userDataReader")
.repository(userRepository)
.methodName("findAllByPageable")
.pageSize(100)
.sorts(Collections.singletonMap("id", Sort.Direction.ASC))
.build();
}

public JdbcCursorItemReader<User> jdbcCursorItemReader() {
return new JdbcCursorItemReaderBuilder<User>()
.fetchSize(10)
.dataSource(dataSource)
.rowMapper(new BeanPropertyRowMapper<>(User.class))
.sql("SELECT u.id, u.name FROM user u WHERE u.deleted_at is NULL ORDER BY u.id")
.name("jdbcCursorItemReader")
.build();
}

@Bean
@StepScope
public JpaPagingItemReader<User> userDataJpaPagingItemReader() {

return new JpaPagingItemReaderBuilder<User>()
.name("userDataReader")
.pageSize(100)
.queryString("SELECT u FROM USER u ORDER BY id")
.entityManagerFactory(entityManagerFactory)
.build();
.name("userDataReader")
.pageSize(100)
.queryString("SELECT u FROM USER u ORDER BY id")
.entityManagerFactory(entityManagerFactory)
.build();
}

@Bean
@StepScope
public JdbcPagingItemReader<User> userDataJdbcPagingItemReader() throws Exception {

return new JdbcPagingItemReaderBuilder<User>()
.pageSize(100)
.fetchSize(100)
.dataSource(dataSource)
.rowMapper(new BeanPropertyRowMapper<>(User.class))
.queryProvider(createUserDataQueryProvider())
.name("jdbcPagingItemReader")
.build();
.pageSize(100)
.fetchSize(100)
.dataSource(dataSource)
.queryProvider(createUserDataQueryProvider())
.rowMapper(new BeanPropertyRowMapper<>(User.class))
.name("jdbcPagingItemReader")
.build();
}

@Bean
public PagingQueryProvider createUserDataQueryProvider() throws Exception {
SqlPagingQueryProviderFactoryBean queryProvider = new SqlPagingQueryProviderFactoryBean();
queryProvider.setDataSource(dataSource);
queryProvider.setSelectClause("id");
queryProvider.setSelectClause("*");
queryProvider.setFromClause("from user");
queryProvider.setWhereClause("where deleted_at is null");

Map<String, Order> sortKeys = new HashMap<>();
sortKeys.put("id", Order.ASCENDING);
queryProvider.setSortKeys(sortKeys);
queryProvider.setSortKeys(Collections.singletonMap("id", Order.ASCENDING));

return queryProvider.getObject();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,32 @@
package com.yello.server.infrastructure.batch;

import com.yello.server.domain.user.entity.User;
import com.yello.server.domain.user.entity.UserData;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.transaction.PlatformTransactionManager;

@Slf4j
@RequiredArgsConstructor
@Configuration
public class StepConfiguration {

private final ChunkReader chunkReader;
private final ChunkProcessor chunkProcessor;
private final ChunkWriter chunkWriter;

@Bean
public Step lunchEventAlarmStep(JobRepository jobRepository, PlatformTransactionManager transactionManager) throws Exception {
public Step lunchEventAlarmStep(JobRepository jobRepository,
PlatformTransactionManager transactionManager) throws Exception {
return new StepBuilder("lunchEventStep", jobRepository)
.<User, User>chunk(100, transactionManager)
.reader(chunkReader.userDataJdbcPagingItemReader())
.writer(chunkWriter.lunchEventWriter())
.build();
.<User, User>chunk(10, transactionManager)
.reader(chunkReader.userDataJdbcPagingItemReader())
.processor(chunkProcessor.lunchEventProcessor())
.writer(chunkWriter.lunchEventWriter())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ public EmptyObject adminSendCustomNotification(Long adminId, NotificationCustomM

@Override
public void sendLunchEventNotification(User user) {
System.out.println(user.getId() + " asfsfsdfsd");
final User receiver = userRepository.getById(user.getId());

NotificationMessage notificationMessage =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package com.yello.server.infrastructure.scheduler;


import com.yello.server.domain.user.entity.User;
import com.yello.server.domain.user.entity.UserData;
import com.yello.server.domain.user.entity.UserDataType;
import com.yello.server.domain.user.repository.UserDataRepository;
import com.yello.server.infrastructure.batch.JobConfiguration;
import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.JobParameter;
Expand Down Expand Up @@ -28,14 +32,16 @@ public class EventScheduler {
private final JobConfiguration jobConfiguration;
private final JobRepository jobRepository;
private final PlatformTransactionManager transactionManager;
private final UserDataRepository userDataRepository;

@Scheduled(cron="0 0 12 * * ?")
@Scheduled(cron="0 19 2 * * ?")
public void lunchEventRunJob() {

//JobParamter의 역할은 반복해서 실행되는 Job의 유일한 ID임, 동일한 값이 세팅되면 두번째부터 실행안됨)
JobParameters jobParameters = new JobParametersBuilder()
.addString("uuid", UUID.randomUUID().toString())
.toJobParameters();
System.out.println("hye!!!!!!!!!!!!");

try {
jobLauncher.run(jobConfiguration.lunchEventJob(jobRepository, transactionManager), jobParameters);
Expand Down

0 comments on commit a127d97

Please sign in to comment.