Приложение запускается локально без проблем, но в докер контейнере No qualifying bean of type 'org.example.repositories.UserRepository
Я написал java приложение на java 17 и запускаю его с помощью Tomcat 10
Запуская мое приложение локально все прекрасно работает но как только я пытаюсь запустить приложение внутри докер контейнера я получаю ошибку:
No qualifying bean of type 'org.example.repositories.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Вот как выглядит мой класс UserRepository:
package org.example.repositories;
import org.example.entities.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByUsername(String username);
boolean existsByUsername(String username);
boolean existsByEmail(String email);
}
А вот как выглядит единственный класс, в котором он используется:
package org.example.services.impl;
import lombok.RequiredArgsConstructor;
import org.example.entities.User;
import org.example.enums.ERole;
import org.example.repositories.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl {
@Autowired
private UserRepository repository;
public User save(User user) {
return repository.save(user);
}
public User create(User user) {
if (repository.existsByUsername(user.getUsername())) {
// Заменить на свои исключения
throw new RuntimeException("Пользователь с таким именем уже существует");
}
if (repository.existsByEmail(user.getEmail())) {
throw new RuntimeException("Пользователь с таким email уже существует");
}
return save(user);
}
public User getByUsername(String username) {
return repository.findByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException("Пользователь не найден"));
}
public UserDetailsService userDetailsService() {
return this::getByUsername;
}
public User getCurrentUser() {
// Получение имени пользователя из контекста Spring Security
var username = SecurityContextHolder.getContext().getAuthentication().getName();
return getByUsername(username);
}
@Deprecated
public void getAdmin() {
var user = getCurrentUser();
user.setRole(ERole.ROLE_ADMIN);
save(user);
}
}
В чем может быть проблема и какие могут быть варианты решения?