1. RedisConfig basePackages 설정
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 1 of constructor in com.example.common_module.domain.coolsms.service.SmsServiceImpl required a bean of type 'com.example.common_module.domain.coolsms.repository.SmsRepository' that could not be found.
Action:
Consider defining a bean of type 'com.example.common_module.domain.coolsms.repository.SmsRepository' in your configuration. Process finished with exit code 1
SmsRepository는 Redis DB의 Repository로 폴더 위치의 변경 이후에 오류 발생
Redis 재실행 -> 실패
ChatGPT
!!!!!!!!
@Configuration
@RequiredArgsConstructor
@EnableRedisRepositories(basePackages = "com.example.common_module") // Redis 레포지토리 기능 활성화
public class RedisConfig {
private final RedisProperties redisProperties; // Redis 속성 정보 주입
@Bean // 스프링 컨텍스트에 RedisConnectionFactory 빈 등록
public RedisConnectionFactory redisConnectionFactory(){
// LettuceConnectionFactory를 사용하여 Redis 연결 팩토리 생성, 호스트와 포트 정보를 사용
return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); // RedisTemplate 인스턴스 생성
redisTemplate.setConnectionFactory(redisConnectionFactory()); // Redis 연결 팩토리 설정
redisTemplate.setKeySerializer(new StringRedisSerializer()); // 키를 문자열로 직렬화하도록 설정
redisTemplate.setValueSerializer(new StringRedisSerializer()); // 값을 문자열로 직렬화하도록 설정
return redisTemplate; // 설정이 완료된 RedisTemplate 인스턴스를 반환
}
}
basePackages설정 이후 잘 실행됨 ㅇㅇㅇㅇ ㅋ
2. GlobalHandler 동일한 예외 두번 설정
Ambiguous @ExceptionHandler method mapped for [class org.springframework.dao.DataIntegrityViolationException]
@ExceptionHandler(DataIntegrityViolationException.class)
protected ResponseEntity<ErrorResponse> handleDuplicateInfoException(DataIntegrityViolationException ex) {
log.error("handleDuplicateInfoException", ex);
final ErrorResponse response = ErrorResponse.of(ErrorCode.DUPLICATE_INFO_ERROR, ex.getMessage());
return new ResponseEntity<>(response, HTTP_STATUS_OK);
}
@ExceptionHandler(DataIntegrityViolationException.class)
protected ResponseEntity<ErrorResponse> handleDataIntegrityViolationException(DataIntegrityViolationException e){
log.error("handleDataIntegrityViolationException", e);
final ErrorResponse response = ErrorResponse.of(ErrorCode.DUPLICATE_REQUEST_ERROR, e.getMessage());
return new ResponseEntity<>(response, HTTP_STATUS_OK);
}
Error Code 새로 설정하다가 밑에 있는거 못봄 -> 주석처리
3. LogoutRepsitory 오류
Logout.java
@Setter
@Getter
@AllArgsConstructor
@Builder
@RedisHash("logout")
//@NoArgsConstructor
public class Logout {
@Id
private String id; // access_token
private String data;
@TimeToLive(unit= TimeUnit.SECONDS)
private Integer expiration;
}
LogoutRepository
@Repository
public interface LogoutRepository extends JpaRepository<Logout, String> {
}
***************************
APPLICATION FAILED TO START
***************************
Description:
The bean 'logoutRepository', defined in com.example.common_module.domain.member.repository.LogoutRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration, could not be registered. A bean with that name has already been defined in com.example.common_module.domain.member.repository.LogoutRepository defined in @EnableRedisRepositories declared on RedisConfig and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
Process finished with exit code 0
Chatgpt
: @RedisHash를 사용한 엔티티의 레포지토리를 JpaRepository로 만들면 정상적으로 동작하지 않습니다. @RedisHash는 Redis 데이터베이스에 엔티티를 저장할 때 사용되는 어노테이션이고, JpaRepository는 관계형 데이터베이스(RDBMS)와 상호작용하기 위해 사용하는 Spring Data JPA의 레포지토리입니다.
두 가지의 핵심 차이점을 정리하자면:
- @RedisHash: 이 어노테이션은 Redis와 상호작용하기 위해 엔티티를 Redis에 저장할 수 있게 해줍니다.
- JpaRepository: JPA를 사용하여 관계형 데이터베이스에서 엔티티를 관리하는데 사용됩니다.
따라서, @RedisHash가 적용된 엔티티는 RedisRepository나 CrudRepository와 같은 Redis에 특화된 인터페이스를 사용해야 합니다.
@Repository
public interface LogoutRepository extends CrudRepository<Logout, String> {
}
CrudRepository 인터페이스로 변경하니 정상적으로 작동
'오류' 카테고리의 다른 글
[Postman] Invisible Character 오류 (0) | 2024.09.04 |
---|---|
JWT 로그아웃 구현 시 [Redis parameter 오류] (0) | 2024.09.02 |
[Springboot] mysql List, null 에러 @Builder.Default (0) | 2023.08.25 |
[Swagger] Failed to fetch (http → https) (0) | 2023.08.17 |
[SpringBoot] gson 추가 후 오류 + 해결 (0) | 2023.08.16 |