Не удается автоматически подключить репозиторий из внешнего Jar-файла в приложение Spring Boot - PullRequest
0 голосов
/ 08 мая 2018

Я упаковал все сущности приложения и интерфейсы репозитория в одну банку. Репозитории написаны с аннотацией @Repository:

@Repository
public interface InternalUserRepository extends JpaRepository<InternalUser, Long>{

}

Я включил этот jar-файл в мое приложение весенней загрузки и пытаюсь выполнить автоматическое подключение интерфейса с контроллера:

@RestController
public class AuthenticationController {

    @Autowired
    AuthenticationService authenticationService;

    @Autowired
    InternalUserRepository internalUserRepository;


    @GetMapping("/")
    public String home() {
        return "Hello World!";
    }

}

Класс моего основного приложения написан так:

@SpringBootApplication
@EnableJpaRepositories
@ComponentScan("com.cdac.dao.cdacdao.*")
public class CdacAuthenticationMgntApplication {

public static void main(String[] args) {
    SpringApplication.run(CdacAuthenticationMgntApplication.class, args);
}
}

Хранилище не подключается автоматически. Когда я запускаю приложение Spring boor, я получаю следующую ошибку:

***************************
APPLICATION FAILED TO START
***************************

Description:

Field internalUserRepository in 
com.cdac.user.cdacauthenticationmgnt.controller.AuthenticationController required a bean of type 'com.cdac.dao.cdacdao.repository.InternalUserRepository' that could not be found.


Action:

Consider defining a bean of type 'com.cdac.dao.cdacdao.repository.InternalUserRepository' in your configuration.

Кто-нибудь пробовал подобную архитектуру, подобную этой?

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Если ваши репозитории JPA находятся в другом пакете, чем класс приложения Spring Boot, вы должны указать этот пакет в аннотации EnableJpaRepositories, а не Component:

@EnableJpaRepositories("com.cdac.dao.cdacdao")

Пакет, указанный вами в ComponentScan, предназначен для определения классов как обычных компонентов Spring, а не интерфейсов репозитория.

0 голосов
/ 11 мая 2018

Аннотация @SpringBootApplication поддерживает все функции Поэтому нам не нужно настраивать вручную

@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
0 голосов
/ 08 мая 2018

Насколько я помню, @ComponentScan должен указывать полный путь к пакету, поэтому я думаю, что ваш package.* не работает.

Попробуйте вместо этого использовать типобезопасное сканирование компонентов:

// You refer to your packages of your base project and your module here. 
// Choose the class so that their package is cover all child package
@SpringBootApplication(scanBasePackageClasses = {xxx. InternalUserRepository.class, xxx.CdacAuthenticationMgntApplication.class}) 

@EnableJpaRepositories
// No need to explicit @ComponentScan
public class CdacAuthenticationMgntApplication {

Или вы можете попробовать @EnableJpaRepositories("com.cdac.dao.cdacdao")

В любом случае, вы должны выбрать класс в самом внешнем пакете (Spring также попытается найти bean в подпакете этих пакетов сканирования компонентов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...