我正在用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)


当前回答

只需添加:@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) 对我有用。

我得到相同的错误,我尝试@EnableAutoConfiguration(排除=…)没有工作。

对于那些想知道在哪里添加@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})的人,因为它已经被用户问到了。你需要把它添加到主应用程序类,它在src>main>java下。默认情况下,它被设置为@SpringBootApplication

其他回答

当我在IDE / STS(弹簧工具套装)运行项目时,一切都很好。 但这是我做罐子时扔的。

应用程序中不必要的空格。“Yml”文件会导致这种情况。

server:
  port: 8085


spring:
 datasource:
  url: jdbc:mysql://localhost:3306/studentdb
  username: root
  password: root
  driver-class-name: com.mysql.cj.jdbc.Driver
 jpa:
   hibernate:
    ddl-auto: update
   show-sql: true
   database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
 application:
  name: STUDENT-SERVICE

而不是调整我的“应用程序”。yml”文件 我只是在“应用程序”中移动了所有的语句。Yml "文件到 ”应用程序。“Properties”文件,并按照“. Properties”中的要求格式化语句。

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/studentdb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format.sql=true

spring.application.name=student-service

server.port=8085

(你可以在url的末尾添加参数) (spring.datasource.url = jdbc: mysql: / / localhost: 3306 / studentdb ? allowPublicKeyRetrieval = true&useSSL = false)

and瞧

您的问题是spring批处理spring-boot-starter-batch的依赖关系,它具有spring-boot-starter-jdbc传递maven依赖关系。

Spring Batch是一个用于构建可靠和容错的企业批处理作业的框架。它支持许多特性,如重新启动失败的批处理、记录批处理执行的状态等等。为了实现此目的,Spring Batch使用数据库模式存储已注册作业的状态,自动配置已经为您提供了所需数据源的基本配置,并且正是此配置需要关系数据库配置。

要解决这个问题,你必须包括一些数据库驱动程序,如mysql, h2等来配置url。

更新: 作为开始,您可以配置应用程序。Yml如下:

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:localhost;DB_CLOSE_ON_EXIT=FALSE
    username: admin
    password:

当然,在你的pom.xml中包括这样的h2驱动程序:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
       ....
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>

....
    </dependencies>
...

</project>

The motivation, because you can not use mongo for this purpose, is that the usage of mongo is provided only for item readers and writers and not for managing the internal database of Spring Batch that is an internal schema, not a business schema. The query is plain SQL query and the internal abstraction relies on a relational database. It is necessary to have a database with ACID capability because every batch reads and writes a chunk of work and saves that information in order to restart the job. A NoSql solution is not suitable for this.

最后,您已经配置了一个关系数据库,以便为Spring Batch的内部功能做好准备,内部抽象不依赖于mongo,只依赖于jdbc。然后mongo可以通过项目读取器/写入器用于批处理的业务方面。

我希望这能帮助你消除疑虑。

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

作为对最新的2021年春季引导2.5.0版本的总结

如果你在你的application.properties中有最少的这些条目

spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

这些依赖项在pom。xml中

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

你不应该有这样的错误:

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

在我的例子中是IDE

无论您使用的是eclipse还是intellij,应用程序在实际环境中都必须在linux上运行。所以验证是否是IDE问题,使用shell运行你的应用程序

mvn spring-boot:run

如果启动时没有出现错误,那么问题出在IDE上

Eclipse

Eclipse IDE for Enterprise Java and Web Developers
Version: 2021-03 (4.19.0)
Build id: 20210312-0638

在我的情况下,我用右键单击spring boot项目中的经典application .java来运行项目,然后作为java应用程序运行

经过几个小时的研究,解决方案是:

右键单击根spring引导项目,然后作为Java应用程序运行。Eclipse向我展示了几个带有主方法的类。我选择我的Application.java然后运行

长解释

如果你检查准确的方法错误DataSourceProperties.determineDriverClassName,你会看到只有driverClassName或driver -class-name和url是必需的。

在pom.xml文件中始终保持更新后的spring框架版本。 我用spring框架2.5.5版本创建了一个项目,当时运行得很好。几个月后,我发现它不能正常工作。然后我放了最新版本的spring框架。这样就有用了。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>Updated version</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>