2015-01-26 3 views
11

Я использую последнюю версию загрузки весны, и я пытаюсь настроить приложение, но я хочу отключить конфигурацию DataSource. Мой класс конфигурация выглядит следующим образом:Spring Boot - EnableAutoConfiguration с Исключением не работает

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

но при запуске приложения, я получаю следующую трассировку стека:

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 

я упускаю что-то в моей конфигурации, чтобы полностью отключить настройки источника данных? Я буду вручную настраивать DataSource, поэтому я не хочу, чтобы весна справлялась с этим для меня.

+0

Я предполагаю, что у вас есть еще один класс в своем приложении, который аннотированный с 'EnableAutoConfiguration' и не имеет исключающий –

+2

Вы используете' @ SpingBootApplication' аннотацию также случайно? Добавление в список исключений на '@ SpingBootApplication' сработало для меня. В соответствии с [автоматической конфигурационной документацией] (http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html): «Вам нужно выбрать - в автоматическую настройку, добавив аннотации @EnableAutoConfiguration или @SpringBootApplication к одному из ваших классов @Configuration. Вы должны только добавлять одну аннотацию @EnableAutoConfiguration.Мы обычно рекомендуем вам добавить его в свой основной класс @Configuration. » –

ответ

2

Когда вы вручную настраиваете источник данных, Spring Boot будет использовать вашу конфигурацию и не будет пытаться инициализировать встроенный источник данных.

КСТАТИ загрузки Spring по умолчанию использует эти свойства из application.properties для создания источника данных боб:

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

Взгляните на this section of Spring Boot docs for more details about data source auto-configuration

+0

Я не настраиваю свой источник данных с помощью аннотации @ -Bean, у меня есть другой метод, на который я должен положиться, чтобы создать свой источник данных. Когда мое приложение запускается, не являйтесь источником данных в контексте весны (вот почему я пытаюсь исключить DataSource из @ -EnableAutoConfiguration), как только моя работа (Запланированная аннотация) запускается, она будет настраивать мой источник данных и вводить в весенний контекст. – Thiago

+0

Хм, довольно необычно AFAIK ваш единственный вариант - не использовать @EnableAutoConfiguration на всех – luboskrnac

4

Это, кажется, странное положение, когда DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition находит DataSource загрузчик классов, но не DataSource. У нас была эта проблема с spring-boot 1.2.2 во время тестирования интеграции.

В любом случае, мы побежали gradle dependencies, чтобы узнать, что вытаскивали в tomcat-jdbc, и в итоге заменили нашу зависимость spring-boot-jdbc на простой spring-jdbc. Если в ваших зависимостях нет tomcat-jdbc, это может помочь установить точку останова в DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition.getDataSourceClassLoader(), чтобы узнать, какой драйвер он находит.

+0

спасибо за информацию Jason. – Thiago

+0

, когда я исключил tomcat-jdb.jar в maven pom.xml, он отлично работает. –

0
@Configuration 

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

Используя эту функцию, мы можем отключить конфигурацию базы данных с пружинной загрузкой.

2

Единственное, что помогло моей проблеме исключения было исключить котом зависимость от JDBC конфигурации пружинной:

<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

у меня была проблема при использовании @Configuration, @EnableAutoConfiguration и @ComponentScan при попытке исключить определенные классы конфигурации, дело в том, что это не сработало!

В конце концов я решил проблему, используя @SpringBootApplication, который согласно документации Spring имеет ту же функциональность, что и три выше в одной аннотации.

@SpringBootApplication(exclude= {Foo.class}) 
public class MySpringConfiguration {} 
Смежные вопросы