После добавления @ComponentScan для загрузки бобов из банки мои контроллеры не сканируются, и я получаю 404 - PullRequest
1 голос
/ 31 мая 2019

У меня есть приложение для весенней загрузки (Java8, spring-boot 2.1.4-RELEASE).

Одной из служб на бизнес-уровне необходимо @Autowire bean-компонент из определенных банок в моем classpath. Для этого мне пришлось добавить @ComponentScan ({"package.to.my.bean.inside.the.jar"}), и он был волшебным образом отсканирован и успешно подключен (это было добавлено к основному классу весенней загрузки, который объявить основной метод).

Однако с тех пор мои контроллеры не сканируются, поэтому DispatcherServlet возвращает 404 для каждого запускаемого мной запроса (диспетчер по умолчанию). На самом деле все мои аннотации весенних загрузочных приложений игнорируются - сканирование не выполняется. Просто чтобы подчеркнуть - приложение работало отлично до добавления @ ComponentScan.

Класс основного весенне-загрузочного приложения:

package com.liav.ezer;

// This is the problematic addition that cause the endpoints to stop
// inside a jar in the classpath, in com.internal.jar package resides an 
// object which i need to wire at run time
@ComponentScan({"com.internal.jar"})
@SpringBootApplication
public class JobsApplication {
    public static void main(String[] args) {
        SpringApplication.run(JobsApplication .class, args);
        }
}

Пример контроллера:

package com.liav.ezer.controller;

@RestController
@EnableAutoConfiguration
@RequestMapping(path = "/jobs")
public class JobController {

    @GetMapping(path="/create", produces = "application/json")
    @ResponseStatus(HttpStatus.OK)
    String createJob(@RequestParam() String jobName) String jobName){       
        return "job created...";
    }
}

Я безуспешно пытался добавить базовый пакет приложения для весенней загрузки в список пакетов в @ComponentScan. Я попытался сузить область действия объявления пакета до класса, который мне нужен, но не повезло. Вот код

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Согласно Весенняя документация

Конфигурирует директивы сканирования компонентов для использования с @Configuration классы. Обеспечивает поддержку параллельно с Spring XML элемент. Либо basePackageClasses (), либо basePackages () (или его псевдоним ()) может быть указан для определения конкретные пакеты для сканирования. Если конкретные пакеты не определены, сканирование будет происходить из пакета класса, который объявляет это аннотаций.

В вашем случае, когда вы добавляете

@ ComponentScan ({ "com.internal.jar"}) вы отключаете сканирование com.liav.ezer.controller

Чтобы исправить это, вы можете сделать следующую конфигурацию

@ ComponentScan (basePackages = {"com.internal.jar", "com.liav.ezer.controller"})

0 голосов
/ 31 мая 2019

Если это так, удалите @ComponentScan, можете объявить этот бин в своей конфигурации.попробуйте ниже

@SpringBootApplication
public class JobsApplication {
    public static void main(String[] args) {
        SpringApplication.run(JobsApplication .class, args);
        }
     @Bean
     public BeanInOtherJar xxBean(){
        return new com.internal.jar.XXX();
     }
}
...