由于无法找到'javax.sql.DataSource'而无法启动我的Spring启动应用程序

时间:2017-08-14 15:45:59

标签: mysql spring hibernate spring-boot

我是春季启动的初学者,我正在尝试编写一个简单的Spring启动应用程序。 我的文件夹结构如下:

  -> Project

       -> build.gradle

       -> settings.gradle

       -> src/main/java

           -> package

               -> Main.java

               -> UserController.java

               -> UserRespository.java

           -> dto

               -> User.java

       ->src/main/resouces

               -> application.properties

我的build.gradle如下:

    buildscript {
            repositories {
                          jcenter()
                         }
    dependencies {
           classpath(
                  'org.springframework.boot:spring-boot-gradle- plugin:1.5.6.RELEASE'

                     )
          classpath('mysql:mysql-connector-java:5.1.34')
                 }
           }

    apply plugin: 'java'
    apply plugin: 'spring-boot'

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    repositories {
              mavenCentral()
                 }

   dependencies {
         compile(
              'org.springframework.boot:spring-boot-starter-actuator',
              'org.springframework.boot:spring-boot-starter-web',
              'org.springframework.boot:spring-boot-starter-data-jpa'       
                )
        compile('mysql:mysql-connector-java')
        testCompile('org.springframework.boot:spring-boot-starter-test')
               }

application.properties如下:

   spring.jpa.hibernate.ddl-auto=create
   spring.datasource.url=jdbc:mysql://localhost:3306/user
   spring.datasource.username=root
   spring.datasource.password=root
   spring.datasource.driver-class-name=com.mysql.jdbc.Driver
   spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect  
   spring.jpa.database=MYSQL
   spring.jpa.show-sql = true

My Main.java如下: -

  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

  @SpringBootApplication
  @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
   public class Main {

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

  }

我能够成功构建应用程序。如果我运行应用程序,我将无法使用以下stacktrace启动应用程序:

     2017-08-14 20:43:02.976  WARN 27205 --- [           main]  ationConfigEmbeddedWebApplicationContext : Exception encountered during context  initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
   2017-08-14 20:43:02.978  INFO 27205 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
   2017-08-14 20:43:03.007  INFO 27205 --- [           main] utoConfigurationReportLoggingInitializer : 

   Error starting ApplicationContext. To display the auto-configuration   report re-run your application with 'debug' enabled.
   2017-08-14 20:43:03.198 ERROR 27205 --- [           main]         o.s.b.d.LoggingFailureAnalysisReporter   : 

    ***************************
     APPLICATION FAILED TO START
    ***************************

    Description:

    Parameter 0 of constructor in  org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration required a bean of type 'javax.sql.Data Source' that could not be found.
         - Bean method 'dataSource' not loaded because @ConditionalOnProperty (spring.datasource.jndi-name) did not find property 'jndi-name'
         - Bean method 'dataSource' not loaded because @ConditionalOnBean (types: org.springframework.boot.jta.XADataSourceWrapper; SearchStrategy: all) did not find any beans


     Action:

       Consider revisiting the conditions above or defining a bean of type 'javax.sql.DataSource' in your configuration.

我已经检查了依赖树,并且可以在其中找到hibernate和mysql连接器。 尝试删除@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}),在这种情况下我得到无法加载驱动程序类:com.mysql.jdbc.Driver

1 个答案:

答案 0 :(得分:0)

您应该将dto包内移到Main.java类包中,在您的情况下,它应该像src/main/java/package/dto

因此,当弹簧启动扫描时,扫描仪可以看到您的实体。

确保已添加MySQL驱动程序依赖性

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
</dependency>