Pourquoi la source de données ne peut pas être autocâblés au printemps de démarrage de l'application?

Je sais que le printemps de démarrage permettra de créer un dataSource Bean automatiquement si configurations associées sont définies dans application.properties, comme:

spring.datasource.url = jdbc:mysql://192.168.10.103:3306/hms?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=test@123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Le code de l'Application:

package com.synline.mdataserver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.apache.tomcat.jdbc.pool.DataSource;

@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    AnnotationConfigApplicationContext context;

    /*@Autowired
    DataSource dataSource;*/

    public static void main(String[] args) throws InterruptedException {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        DataSource dataSource = (DataSource)context.getBean("dataSource");
        System.out.println(dataSource);

        while (true) {
           Thread.sleep(5000);
        }

    }
}

Si l' @Autocâblés source de données est commenté, le Haricot informations seront imprimées:

org.apache.tomcat.jdbc.pool.DataSource@1800a575{ConnectionPool[defaultAutoCommit=null; defaultReadOnly=null; ....}

Donc je pense que le Printemps de Démarrage a vraiment créé le Haricot.

Mais si @Autowried source de données est utilisé, à l'exception se plaignent Pas de Ces Bean

Error creating bean with name 'application': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.apache.tomcat.jdbc.pool.DataSource com.synline.mdataserver.Application.dataSource; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.apache.tomcat.jdbc.pool.DataSource] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Veuillez signaler les cas qui ne fonctionne pas, non seulement un extrait. En outre, vous devriez être en utilisant un javax.sql.DataSource pas spécifiques tomcat type.
Merci. Je l'ai ré-éditer le post et ajouter le code complet.
Ah, Deinum, vous obtenez le point. Après je " import javax.sql.Source de données", au lieu de "import org.apache.tomcat.jdbc.piscine.Source de données;", pas de problèmes, pas plus!
Pourriez-vous expliquer un peu plus, pourquoi le Autocâblés a échoué, si j'ai utilisé le spécifique tomcat type, mais getBean() a été OK? Merci beaucoup!

OriginalL'auteur Zhengqiang Zhu | 2015-10-12