web-dev-qa-db-fra.com

Spring Boot - EnableAutoConfiguration avec Exclude ne fonctionne pas

J'utilise la dernière version de démarrage printanier et j'essaie de configurer une application, mais je souhaite désactiver la configuration de DataSource. Ma classe de configuration ressemble à ceci:

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

mais quand je lance l'application, j'obtiens le stacktrace suivant:

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

Me manque-t-il quelque chose dans ma configuration pour désactiver complètement la configuration de la source de données? Je vais configurer manuellement une source de données, donc je ne veux pas que Spring gère cela pour moi.

12
Thiago

Cela semble être une situation étrange où DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition trouve un chargeur de classe DataSource, mais aucun DataSource. Nous avons eu ce problème avec spring-boot 1.2.2 lors de l'exécution d'un test d'intégration.

Quoi qu'il en soit, nous avons exécuté gradle dependencies pour savoir ce qui se passait dans Tomcat-jdbc et avons fini par remplacer notre dépendance spring-boot-jdbc par plain spring-jdbc. Si vous n'avez pas Tomcat-jdbc dans vos dépendances, il peut être utile de définir un point d'arrêt dans DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition.getDataSourceClassLoader() pour savoir quel pilote il trouve.

4
Jason

La seule chose qui ait aidé mon problème d'exclusion a été d'exclure la dépendance de Tomcat jdbc de la configuration de printemps:

<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>
3
Andreas Guther

Lorsque vous configurez manuellement votre source de données, Spring Boot utilisera votre configuration et ne tentera pas d’initialiser la source de données intégrée.

BTW, Spring Boot utilise par défaut ces propriétés de application.properties pour créer un bean de source de données:

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

Consultez cette section de la documentation Spring Boot pour plus de détails sur la configuration automatique de la source de données

3
luboskrnac

J'ai eu un problème lors de l'utilisation de @Configuration, @EnableAutoConfiguration et @ComponentScan lors de la tentative d'exclusion de classes de configuration spécifiques. 

Finalement, j'ai résolu le problème en utilisant @SpringBootApplication , qui, selon la documentation de Spring, offre les mêmes fonctionnalités que les trois précédentes en une seule annotation.

@SpringBootApplication(exclude= {Foo.class})
public class MySpringConfiguration {}
1
dorony
@Configuration

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

En utilisant cela, nous pouvons désactiver la configuration de la base de données intégrée Spring Boot.

0
sambed pattanaik