Skip to content

Commit

Permalink
Merge pull request #79 from HappyScrolls/feature
Browse files Browse the repository at this point in the history
fix: 코드 수정
  • Loading branch information
chs98412 authored Sep 26, 2023
2 parents c304718 + 24e81a3 commit 273233b
Show file tree
Hide file tree
Showing 19 changed files with 310 additions and 176 deletions.
144 changes: 72 additions & 72 deletions src/main/java/com/HappyScrolls/config/DatabaseConfig.java
Original file line number Diff line number Diff line change
@@ -1,72 +1,72 @@
package com.HappyScrolls.config;

import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.HappyScrolls.config.ReplicationRoutingDataSource.DATASOURCE_SOURCE_KEY;


@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
@EnableTransactionManagement
@EnableConfigurationProperties(Replicas.class)
@EnableJpaRepositories(basePackages = {"com.HappyScrolls"})
public class DatabaseConfig {

private final Replicas replicas;

public DatabaseConfig(Replicas replicas) {
this.replicas = replicas;
}

@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari.source")
public DataSource sourceDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}

@Bean
public Map<String, DataSource> replicaDataSources() {
return replicas.replicaDataSources(HikariDataSource.class);
}

@Bean
public DataSource routingDataSource(@Qualifier("sourceDataSource") DataSource source,
@Qualifier("replicaDataSources") Map<String, DataSource> replicas) {
ReplicationRoutingDataSource routingDataSource = new ReplicationRoutingDataSource();

Map<Object, Object> dataSources = new HashMap<>();
dataSources.put(DATASOURCE_SOURCE_KEY, source);
dataSources.putAll(replicas);

routingDataSource.setTargetDataSources(dataSources);
routingDataSource.setDefaultTargetDataSource(source);
List<String> replicaDataSourceNames = new ArrayList<>(replicas.keySet());
routingDataSource.setReplicaDataSourceNames(replicaDataSourceNames);

return routingDataSource;
}

@Primary
@Bean
public DataSource dataSource(@Qualifier("routingDataSource") DataSource routingDataSource) {
return new LazyConnectionDataSourceProxy(routingDataSource);
}
}
//package com.HappyScrolls.config;
//
//import com.zaxxer.hikari.HikariDataSource;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
//import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
//import org.springframework.boot.context.properties.ConfigurationProperties;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.boot.jdbc.DataSourceBuilder;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Primary;
//import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
//import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy;
//import org.springframework.transaction.annotation.EnableTransactionManagement;
//
//import javax.sql.DataSource;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import static com.HappyScrolls.config.ReplicationRoutingDataSource.DATASOURCE_SOURCE_KEY;
//
//
//@Configuration
//@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
//@EnableTransactionManagement
//@EnableConfigurationProperties(Replicas.class)
//@EnableJpaRepositories(basePackages = {"com.HappyScrolls"})
//public class DatabaseConfig {
//
// private final Replicas replicas;
//
// public DatabaseConfig(Replicas replicas) {
// this.replicas = replicas;
// }
//
// @Bean
// @ConfigurationProperties(prefix = "spring.datasource.hikari.source")
// public DataSource sourceDataSource() {
// return DataSourceBuilder.create().type(HikariDataSource.class).build();
// }
//
// @Bean
// public Map<String, DataSource> replicaDataSources() {
// return replicas.replicaDataSources(HikariDataSource.class);
// }
//
// @Bean
// public DataSource routingDataSource(@Qualifier("sourceDataSource") DataSource source,
// @Qualifier("replicaDataSources") Map<String, DataSource> replicas) {
// ReplicationRoutingDataSource routingDataSource = new ReplicationRoutingDataSource();
//
// Map<Object, Object> dataSources = new HashMap<>();
// dataSources.put(DATASOURCE_SOURCE_KEY, source);
// dataSources.putAll(replicas);
//
// routingDataSource.setTargetDataSources(dataSources);
// routingDataSource.setDefaultTargetDataSource(source);
// List<String> replicaDataSourceNames = new ArrayList<>(replicas.keySet());
// routingDataSource.setReplicaDataSourceNames(replicaDataSourceNames);
//
// return routingDataSource;
// }
//
// @Primary
// @Bean
// public DataSource dataSource(@Qualifier("routingDataSource") DataSource routingDataSource) {
// return new LazyConnectionDataSourceProxy(routingDataSource);
// }
//}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse

String email = jwtTokenUtil.getUid(token);


System.out.println(email);
Member member = memberService.memberFind(email);


Expand Down
Original file line number Diff line number Diff line change
@@ -1,48 +1,48 @@
package com.HappyScrolls.config;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.transaction.support.TransactionSynchronizationManager;

import java.util.List;

public class ReplicationRoutingDataSource extends AbstractRoutingDataSource {

public static final String DATASOURCE_SOURCE_KEY = "source";

private ReplicaDataSourceNames replicaDataSourceNames;

public void setReplicaDataSourceNames(List<String> names) {
this.replicaDataSourceNames = new ReplicaDataSourceNames(names);
}

@Override
protected Object determineCurrentLookupKey() {
final boolean isReadOnly = TransactionSynchronizationManager.isCurrentTransactionReadOnly();
if (isReadOnly) {
String nextReplicaDataSourceName = replicaDataSourceNames.getNextName();
System.out.print("Using Replica DB Name : ");
System.out.println(nextReplicaDataSourceName);

return nextReplicaDataSourceName;
}
System.out.println("Using Source DB");
return DATASOURCE_SOURCE_KEY;
}

public static class ReplicaDataSourceNames {

private final List<String> values;
private int counter = 0;

public ReplicaDataSourceNames(List<String> values) {
this.values = values;
}

public String getNextName() {
if (counter == values.size()) {
counter = 0;
}
return values.get(counter++);
}
}
}
//package com.HappyScrolls.config;
//
//import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
//import org.springframework.transaction.support.TransactionSynchronizationManager;
//
//import java.util.List;
//
//public class ReplicationRoutingDataSource extends AbstractRoutingDataSource {
//
// public static final String DATASOURCE_SOURCE_KEY = "source";
//
// private ReplicaDataSourceNames replicaDataSourceNames;
//
// public void setReplicaDataSourceNames(List<String> names) {
// this.replicaDataSourceNames = new ReplicaDataSourceNames(names);
// }
//
// @Override
// protected Object determineCurrentLookupKey() {
// final boolean isReadOnly = TransactionSynchronizationManager.isCurrentTransactionReadOnly();
// if (isReadOnly) {
// String nextReplicaDataSourceName = replicaDataSourceNames.getNextName();
// System.out.print("Using Replica DB Name : ");
// System.out.println(nextReplicaDataSourceName);
//
// return nextReplicaDataSourceName;
// }
// System.out.println("Using Source DB");
// return DATASOURCE_SOURCE_KEY;
// }
//
// public static class ReplicaDataSourceNames {
//
// private final List<String> values;
// private int counter = 0;
//
// public ReplicaDataSourceNames(List<String> values) {
// this.values = values;
// }
//
// public String getNextName() {
// if (counter == values.size()) {
// counter = 0;
// }
// return values.get(counter++);
// }
// }
//}
9 changes: 2 additions & 7 deletions src/main/java/com/HappyScrolls/entity/CommentEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,8 @@
@AllArgsConstructor
public class CommentEvent {

private String category;
private String memberEmail;
private Comment parent;
private Comment child;

private String email;

private Long refId;

private String msg;

}
15 changes: 11 additions & 4 deletions src/main/java/com/HappyScrolls/entity/Product.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@


import lombok.*;
import org.springframework.data.annotation.Version;

import javax.persistence.*;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
@Builder
Expand All @@ -25,4 +24,12 @@ public class Product {
private Integer quantity;



// @Version
private Long version;
public void decreaseQuantity() {
this.quantity -= 1;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

import com.HappyScrolls.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Lock;

public interface ProductRepository extends JpaRepository<Product,Long> {
import javax.persistence.LockModeType;
import java.util.Optional;

public interface ProductRepository extends JpaRepository<Product, Long> {

@Lock(LockModeType.PESSIMISTIC_WRITE)
Optional<Product> findById(Long id);
}
4 changes: 4 additions & 0 deletions src/main/java/com/HappyScrolls/service/BuyService.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ public List<Long> buyCreate(Member member, BuyDTO.RequestCart request) {
}

for (Cart cart : cartList) {
cart.getProduct().decreaseQuantity();

Buy buy = new Buy();
buy.setCreateDate(LocalDateTime.now());
buy.setMember(member);
Expand All @@ -57,6 +59,8 @@ public List<Long> buyCreate(Member member, BuyDTO.RequestCart request) {
response.add(buy);
}



applicationEventPublisher.publishEvent(new BuyEvent(member,requirePoints,cartList));//어떻게테스트??


Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/HappyScrolls/service/CommentService.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public Long commentChildCreate(Member member, CommentDTO.ChildRequest request) {
commentRepository.save(makeComment);


applicationEventPublisher.publishEvent(new CommentEvent("test",parentComment.getMember().getEmail(), member.getEmail(), makeComment.getId(),"댓글생성이벤트" ));//어떻게테스트??
applicationEventPublisher.publishEvent(new CommentEvent(parentComment,makeComment ));



Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/HappyScrolls/service/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public void test(BuyEvent event) {
}
@EventListener
public void commentEvent(CommentEvent event) {
Member member = memberFind(event.getEmail());
Member member = event.getChild().getMember();
member.increasePoint(77);
memberRepository.save(member);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,10 @@ public class NotificationService {

@EventListener
public void notificationCreate(CommentEvent event) {
Notification notification = Notification.builder().msg(event.getMsg()).refId(event.getRefId()).category(event.getCategory()).build();
Member member = memberService.memberFind(event.getMemberEmail());
Notification notification2 = Notification.builder().msg("포인트 추가되었음!").build();
Member member2 = memberService.memberFind(event.getEmail());
Notification notification = Notification.builder().msg("포인트가 지급되었습니다.").category("포인트").member(event.getParent().getMember()).build();

Notification notification2 = Notification.builder().msg("포인트 추가되었음!").member(event.getChild().getMember()).build();

notification2.setMember(member2);
notification.setMember(member);
notificationRepository.save(notification);
notificationRepository.save(notification2);
}
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/com/HappyScrolls/service/ProductService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;
Expand All @@ -32,4 +33,14 @@ public List<Long> productAllRetrieve() {

return products.stream().map(product -> product.getId()).collect(Collectors.toList());
}


@Transactional
public synchronized void test() {
Product product= productRepository.findById(1l).get();
if (product.getQuantity() > 0) {
product.decreaseQuantity();
productRepository.saveAndFlush(product);
}
}
}
Loading

0 comments on commit 273233b

Please sign in to comment.