我正在用MongoDB做一个Spring Boot Batch示例,我已经启动了mongod服务器。

当我启动我的应用程序时,我得到下面的错误。

对这个问题有什么建议吗?

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

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
    If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

application.properties:

# Mongo database URI. Cannot be set with host, port and credentials.
spring.data.mongodb.uri=mongodb://localhost/test 

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

我已经启动了mongod,输出如下:

C:\Users\pc>mongod
2018-07-07T14:39:39.223+0530 I JOURNAL  [initandlisten] journal dir=C:\data\db\journal
2018-07-07T14:39:39.230+0530 I JOURNAL  [initandlisten] recover : no journal files present, no recovery needed
2018-07-07T14:39:39.478+0530 I JOURNAL  [durability] Durability thread started
2018-07-07T14:39:39.589+0530 I CONTROL  [initandlisten] MongoDB starting : pid=11992 port=27017 dbpath=C:\data\db\ 64-bit host=DESKTOP-NQ639DU
2018-07-07T14:39:39.589+0530 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2018-07-07T14:39:39.591+0530 I CONTROL  [initandlisten] db version v3.0.5
2018-07-07T14:39:39.592+0530 I CONTROL  [initandlisten] git version: 8bc4ae20708dbb493cb09338d9e7be6698e4a3a3
2018-07-07T14:39:39.592+0530 I CONTROL  [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
2018-07-07T14:39:39.592+0530 I CONTROL  [initandlisten] allocator: tcmalloc
2018-07-07T14:39:39.593+0530 I CONTROL  [initandlisten] options: {}
2018-07-07T14:39:39.595+0530 I JOURNAL  [journal writer] Journal writer thread started
2018-07-07T14:39:40.485+0530 I NETWORK  [initandlisten] waiting for connections on port 27017
2018-07-07T14:40:39.140+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51340 #1 (1 connection now open)
2018-07-07T14:40:41.663+0530 I NETWORK  [conn1] end connection 127.0.0.1:51340 (0 connections now open)
2018-07-07T14:45:12.421+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51578 #2 (1 connection now open)
2018-07-07T14:45:12.870+0530 I NETWORK  [conn2] end connection 127.0.0.1:51578 (0 connections now open)
2018-07-07T14:46:21.734+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51591 #3 (1 connection now open)
2018-07-07T14:46:22.041+0530 I NETWORK  [conn3] end connection 127.0.0.1:51591 (0 connections now open)
2018-07-07T14:57:47.523+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:52534 #4 (1 connection now open)
2018-07-07T14:57:47.910+0530 I NETWORK  [conn4] end connection 127.0.0.1:52534 (0 connections now open)


当前回答

我通过添加<scope>提供</scope>解决了同样的问题

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <scope>provided</scope>
        </dependency>

来源: https://github.com/spring-projects/spring-boot/issues/13796#issuecomment-413313346

其他回答

根本原因

JPA (Java持久性API)是ORM(对象-关系映射)工具的Java规范。spring-boot-starter-data-jpa依赖项在spring引导框架的上下文中启用ORM。

spring引导应用程序的JPA自动配置特性尝试使用JPA Datasource建立数据库连接。JPA DataSource bean需要数据库驱动程序连接到数据库。

数据库驱动程序应该作为pom.xml文件中的依赖项可用。对于外部数据库如Oracle、SQL Server、MySql、DB2、Postgres、MongoDB等都需要数据库的JDBC连接属性来建立连接。

您需要配置数据库驱动程序和JDBC连接属性来修复此异常。配置数据源失败:没有指定' url '属性,无法配置嵌入式数据源。原因:无法确定合适的驱动程序类别。

application.properties

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 

application.yaml

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

通过编程

@SpringBootApplication(exclude =  {DataSourceAutoConfiguration.class })

我认为当导入模块时,你已经导入了另一个包,去模块并删除它们。之后,从项目包中导入模块

这个链接很有帮助。

Spring Boot自动配置尝试配置bean 根据添加到类路径中的依赖项自动执行。和 因为我们的类路径上有一个JPA依赖项(spring-data-starter-jpa),所以它会尝试配置它。

问题:Spring引导没有配置JPA数据源所需的所有信息,即JDBC连接属性。 解决方案:

提供JDBC连接属性(最好) 通过排除一些AutoConfig类来延迟提供连接属性(临时的-最终应该删除)

上面的链接不包括DataSourceAutoConfiguration.class

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

但这对我不起作用。相反,我必须排除2个AutoConfig类:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, XADataSourceAutoConfiguration.class})

这并不是问题的关键(虽然可能是相关的),但是,如果您引导一个新项目,并想知道为什么会得到相同的错误,它可能来自依赖项部分spring-boot-start -data-jpa的artifactId。我在下面给出了依赖关系。您将需要定义数据库来消除这种情况。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

步骤1)将下列依赖项放在pom.xml文件中。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

步骤2)将以下代码放入应用程序。属性文件。

spring.datasource.url=jdbc:mysql://localhost:3306/employee_directory? 
 useSSL=false&allowPublicKeyRetrieval=true
 spring.datasource.username=springstudent
  spring.datasource.password=springstudent

步骤3)仔细检查是否适用。属性文件放在src/main/resources文件夹中。

步骤4)步骤3非常关键,因为你可以花一整天的时间在代码中寻找错误,但真正的问题是应用程序的位置。属性文件。