2015-01-26 16 views
11

Sto usando l'ultima versione di avvio di primavera e sto provando a configurare un'applicazione ma voglio disabilitare la configurazione di DataSource. La mia classe di configurazione si presenta così:Spring Boot - EnableAutoConfiguration con Exclude non funzionante

@Configuration 
@ComponentScan 
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) 
public class ApiApplicationConfig { } 

ma quando faccio funzionare l'applicazione, sto ottenendo il seguente stacktrace:

Caused by: org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath. 
at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.getDriverClassName(DataSourceProperties.java:137) 
at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource(DataSourceAutoConfiguration.java:116) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
... 31 more 

Mi sto perdendo qualcosa nella mia configurazione per disabilitare completamente la configurazione di origine dati? Creerò manualmente un DataSource, quindi non voglio che Spring lo gestisca per me.

+0

direi che hai un'altra classe nella vostra applicazione che è annotato con 'EnableAutoConfiguration' e non ha il esclude –

+2

Stai usando' SpingBootApplication' annotazione @ anche per caso? L'aggiunta all'elenco di esclusioni su '@ SpingBootApplication' ha funzionato per me. Come da [documentazione di configurazione automatica] (http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html): "È necessario scegliere -in alla configurazione automatica aggiungendo le annotazioni @EnableAutoConfiguration o @SpringBootApplication a una delle classi @Configuration. Dovresti sempre aggiungere solo un'annotazione @EnableAutoConfiguration.Generalmente raccomandiamo di aggiungerlo alla classe @Configuration primaria. " –

risposta

2

Quando si configura manualmente l'origine dati, spring Boot utilizzerà la configurazione e non tenterà di inizializzare l'origine dati incorporata.

BTW, Stivale Primavera di default usa questi oggetti di application.properties per creare origine dati di fagioli:

spring.datasource.url=jdbc:mysql://localhost/test 
spring.datasource.username=dbuser 
spring.datasource.password=dbpass 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

Date un'occhiata a this section of Spring Boot docs for more details about data source auto-configuration

+0

Non sto configurando la mia origine dati usando l'annotazione @ -Bean, ho un altro metodo su cui devo fare affidamento per creare la mia origine dati. non è un'origine dati nel contesto primaverile (ecco perché sto cercando di escludere DataSource da @ -EnableAutoConfiguration), una volta eseguito il mio lavoro (annotazione pianificata), verrà impostato il mio datasource e verrà inserito nel contesto di primavera – Thiago

+0

Hmm, piuttosto insolito AFAIK la tua unica opzione è di non usare @EnableAutoConfiguration a tutti – luboskrnac

4

Questo sembra essere una situazione strana in cui DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition trova un DataSource caricatore di classi, ma nessun DataSource. Abbiamo avuto questo problema con spring-boot 1.2.2 durante l'esecuzione di un test di integrazione.

In ogni caso, abbiamo eseguito gradle dependencies per scoprire cosa stava tirando in tomcat-jdbc e abbiamo finito per sostituire la nostra dipendenza jdbc spring-boot con plain-jdbc. Se non si dispone di tomcat-jdbc nelle dipendenze, potrebbe essere utile impostare un punto di interruzione in DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition.getDataSourceClassLoader() per scoprire quale driver trova.

+0

grazie per le informazioni Jason. – Thiago

+0

quando ho escluso tomcat-jdb.jar nel maven pom.xml, funziona bene. –

0
@Configuration 

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) 

Utilizzando questa funzione è possibile disabilitare la configurazione del database incorporato di avvio a molla.

2

L'unica cosa che ha aiutato il mio problema di esclusione è stato quello di escludere la Tomcat dipendenze JDBC dalla configurazione di primavera:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jdbc</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.apache.tomcat</groupId> 
       <artifactId>tomcat-jdbc</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
0

ho avuto un problema quando si utilizza @Configuration, @EnableAutoConfiguration e @ComponentScan durante il tentativo di escludere specifiche classi di configurazione, il fatto è che non ha funzionato!

Alla fine ho risolto il problema utilizzando @SpringBootApplication, che in base alla documentazione di Spring ha la stessa funzionalità dei tre precedenti in un'annotazione.

@SpringBootApplication(exclude= {Foo.class}) 
public class MySpringConfiguration {} 
Problemi correlati