2015-10-20 10 views
5

Ho un'applicazione di avvio Spring e voglio importare una dipendenza scritta in spring boot che definisce alcuni controller.Avvio a molla e controller nei moduli importati

Forse è semplice, ma come posso rendere l'applicazione principale in grado di inizializzare tutti questi controller nel modulo importato? Quando provo ad accedere al percorso di questi controller, viene visualizzato un errore per il metodo di gestione mancante per il percorso specificato. Ho provato come segue:

@SpringBootApplication 
@ComponentScan(basePackages = {"com.main.project", "com.imported.dependency"}) 
public class MyApplication 
    implements CommandLineRunner { 

    public static void main(final String... args) { 
     SpringApplication app = new SpringApplication(MyApplication.class); 
     app.setWebEnvironment(true); 
     app.run(args); 

    } 
} 

cioè Ho provato con @ComponentScan, ma non succede nulla.

Ho anche provato a vedere se i controller sono caricati:

ApplicationContext ctx = SpringApplication.run(FrontendApplication.class, args); 

System.out.println("Let's inspect the beans provided by Spring Boot:"); 

String[] beanNames = ctx.getBeanDefinitionNames(); 
Arrays.sort(beanNames); 
for (String beanName : beanNames) { 
    System.out.println(beanName); 
} 

Essi non sono. Ho provato a rimuovere @SpringBootApplication e utilizzare @EnableAutoConfiguration e @ComponentScan, ma questo non funziona.

Suggerimenti?

+0

si è errata la "dipendenza" su ComponentScan. –

+0

Ok, questo è un errore di battitura nel mio esempio. Non è il vero nome del pacchetto. Quello che sto usando funziona bene –

+0

Hai provato ad elencarli nel costruttore SpringApplication? per esempio. App SpringApplication = new SpringApplication (MyApplication.class, MyAnnotatedBean.class); –

risposta

1

dopo la discussione sul thread principale ho provato a configurare un piccolo progetto simile al tuo e l'ho messo su github, non vedo alcun problema.

dare un aspetto https://github.com/e-ivaldi/mat_boy_test

Questo è dal registro 2015/10/24 17: 22: 02,900 INFO 31901 --- [principale] swsmmaRequestMappingHandlerMapping: mappato "{[/ **]}" sul pubblico java.lang.String com.somethingelse.controllers.SimpleController.xxx()

0

Forse hai un conflitto tra:

@SpringBootApplication e @ComponentScan.

In primavera documentazione Boot possiamo leggere

L'annotazione @SpringBootApplication equivale a utilizzare @Configuration, @EnableAutoConfiguration e @ComponentScan con i loro attributi di default

Il link: @SpringBootApplication documentation

È possibile rimuovere @SpringBootApplication e sostituirlo con @Configuration e @EnableAutoConfiguration?

0

Utilizzare annotazione @Configuration e @EnableAutoConfiguration.

+0

È la stessa risposta di Kuroro, ma data tre ore dopo! –

0

Il @SpringBootApplication esegue automaticamente la scansione di ogni classe che ha uno spazio dei nomi di sottoprocesso da ogni jar nel classpath. Quell'annotazione è tutto ciò di cui hai bisogno, dato che il tuo progetto segue la struttura delle directory consigliata da Spring. Vedi: Spring Boot's Documentation on Structuring your code.

provare quanto segue:

  1. Rimuovere questa riga di codice:

    @ComponentScan(basePackages = {"com.main.project", "com.imported.dependency"}) 
    
  2. Spostare MyApplication in modo che si trova nella directory principale. La directory root dovrebbe seguire questa convenzione di denominazione, com.example.project. Pertanto, il percorso completo per la classe principale dell'applicazione di avvio a molla potrebbe essere: com.example.project.MyApplication, mentre si sostituiscono example e project con il nome host e il nome del progetto dell'azienda.

  3. Inserisci i controller in un sotto-pacchetto di questo (anche se imballato in un vaso separato).Così il loro spazio dei nomi dovrebbe essere qualcosa di simile: com.example.project.controllers.

  4. Inoltre, non dimenticate di aggiungere l'annotazione @Controller o @RestController alle vostre classi controller.

Spero che questo aiuti!