无法配置数据源:未指定'url'属性,并且无法配置任何嵌入式数据源


120

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

在此处输入图片说明

Answers:


82

检查您的application.properties

改变

spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

为我工作。完整配置:

spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=
spring.datasource.password=   
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update

1
intelij ide中的application.properties在哪里?
GhostDede

5
@GhostDede请检入src / main / resources / application.properties
kayesh parvez

谢谢!它帮助我弄清楚代码中正在发生什么。
萨克斯管演奏者

52

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

我遇到了相同的错误,@EnableAutoConfiguration(exclude=...)但无法正常工作。


这对我有用。谢谢
Jason

当我知道我需要在某个时候使用数据源但又不需要立即使用时,它可以完美地工作。
alex

也为我工作。
sak

37

您的问题是spring-boot-starter-batch具有批处理spring-boot-starter-jdbcMaven依赖的spring batch的依赖。

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

为了解决这个问题,你必须包括像一些数据库驱动程序mysqlh2等配置url

更新:只是为了开始,您可以像下面这样配置application.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>

动机(因为您不能为此目的使用mongo)是因为mongo的使用仅提供给项目读取器和写入器,而不是用于管理作为内部模式而非业务模式的Spring Batch内部数据库。该查询是普通的SQL查询,内部抽象依赖于关系数据库。必须具有一个具有ACID功能的数据库,因为每个批处理都会读写大量的工作并保存该信息,以便重新启动作业。NoSql解决方案不适用于此。

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

我希望这可以帮助您清除疑虑。


这是我的问题-如果使用MongoDB,我们仍然需要使用H2吗?我用过H2,但是问题还是一样的!
杰夫·库克

我更新答案。我尝试了一个简单的入门,并使用此配置可​​以正常工作。我能够启动我的应用程序
Valerio Vaudi,

9
您可以从spring-batch依赖项中排除spring-jdbc,或者在应用程序类中排除数据源Bean加载@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
TecHunter

在mongo项目中安装h2浪费时间和不合逻辑。此解决方案为我工作。.@ValerioVaudi感谢您的澄清
Arun3x3

26

并不是问题的重点(尽管可以关联),但是,如果您引导一个新项目并想知道为什么会出现相同的错误,则可能是依赖项中的artifactIdof引起spring-boot-starter-data-jpa的。我在下面给出了依赖性。您将需要定义数据库来摆脱这种情况。

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

4
以我为例,我在pom.xml中注释了spring-boot-starter-data-jdbc依赖关系,问题就消失了!我猜只有在您准备好驱动程序和其他凭据之后才能包括这些依赖关系,然后可以在application.properties中对其进行更新以使项目成功构建。
raikumardipak

我在这里遇到了类似的问题。我在玩JPA,而不是直接使用Mongo,所以我在上面添加了依赖项(通过Intellij)。我决定不喜欢JPA方式,因此从pom.xml中将其注释掉。那是我必须开始获取顶部问题中指出的错误的时候。我需要运行mvn clean install,然后从Intellij重新加载所有Maven项目,以消除错误。
Mike

14

不包括DataSourceAutoConfiguration.class为我工作的内容:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

非基于数据库的应用程序的最佳解决方案。
Doogle

10

此链接有所帮助。

Spring Boot自动配置尝试根据添加到类路径的依赖项自动配置Bean。并且由于我们在类路径上具有JPA依赖项(spring-data-starter-jpa),因此它将尝试对其进行配置。

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

  1. 提供JDBC连接属性(最佳)
  2. 通过排除某些AutoConfig类来推迟提供连接属性(临时-最终应删除)

上面的链接不包括DataSourceAutoConfiguration.class

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

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

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

为我工作,但我仍然不明白为什么我需要明确将其排除在外
Saurabh Verma

嘿@SaurabhVerma,我已经编辑了答案以解释排除AutoConfig类的基本原理。
bibangamba

不包括仅对DataSourceAutoConfiguration我有效2.2.1.RELEASEspring-boot-starter-parent
user2918640 '19

7

“无法配置数据源”错误。首先,我们通过定义数据源来解决此问题。接下来,我们讨论了如何解决此问题而不需要完全配置数据源。

https://www.baeldung.com/spring-boot-failed-to-configure-data-source


您能否扩展这个答案?
英镑射手

1
我宁愿在这里解释答案。
Chaklader Asfak Arefe

如果使用任何其他方法来配置数据连接,请在application.properties中使用以下排除项:spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Anurag

4

通过Spring Initializr创建项目时,可能是您的资源目录未添加到classpath中。因此,您的应用程序永远不会加载已配置的application.properties文件。

要进行快速测试,请将以下内容添加到application.properties文件中:

server.port=8081

现在,在运行应用程序时,您应该在spring boot控制台中看到如下输出:

INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): **8081** (http) with context path ''

如果您的端口仍然是默认的8080并且未更改为8081,则显然不会加载application.properties文件。

您还可以检查您的应用程序是否gradle bootRun从命令行运行。哪一个最有可能会工作。

解:

  1. 关闭IntelliJ,然后在项目文件夹中删除“ .idea”文件夹
  2. 将您的项目重新导入到IntelliJ中,如下所示:“导入项目”->“仅选择要导入的build.gradle文件”。(IntelliJ将自动抓住其余部分)
  3. 再次构建并运行您的应用程序

请参阅IntelliJ支持人员的官方答复: IDEA-221673


对我来说,右键单击Resources文件夹,然后选择“将目录标记为”->“资源根”就足够了。
Balazs F.

3

对于2.X.X下面的配置,Spring Boot版本对我有用。

spring.datasource.url=jdbc:mysql://localhost:3306/rest
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update 

不建议使用旧的jdbc驱动程序。在上面的配置中提到了新的配置。请使用相同的名称,然后重新启动项目。



2

我已经在我的Spring Boot应用程序的主类上添加了此批注,并且一切正常

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

您指出了将代码段放在何处,所以
Setmax

2

可能是因为您拥有jpa依赖项和插件...

如果不使用就对其进行评论(build.gradle或pom文件)

例如

// kotlin("plugin.jpa") version "1.3.61"

// implementation("org.springframework.boot:spring-boot-starter-data-jpa")

1

这仅表示您已下载了具有数据库相关性的spring starter代码,而未配置数据库。因此它不知道如何连接。对于Spring引导版本,2.18请执行以下步骤进行修复。

  1. 为您已下载的驱动程序(mysql/mongo例如etc)创建数据库。
  2. applications.properties文件中添加数据库连接信息。mysql如果您的数据库mongo更改为,则给出示例mongo

    spring.datasource.url=jdbc:mysql://localhost:3306/db_name_that_you_created spring.datasource.username=your_db_username_here spring.datasource.password=your_db_pass_here spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto = update

  3. 重新启动将要运行的服务器。


1

如果您使用的是Gradle,则重建Gradle可以解决此问题。



0

这是因为@ valerio-vaudi说的。

您的问题是spring批处理spring-boot-starter-batch的依赖项,该依赖项具有spring-boot-starter-jdbc传递Maven依赖项。

但是您可以解决它,并根据您的配置设置主数据源

 @Primary
 @Bean(name = "dataSource")
 @ConfigurationProperties(prefix = "spring.datasource")
 public DataSource getDataSource() {
      return DataSourceBuilder.create().build();
 }

 @Bean
 public JdbcTemplate jdbcTemplate(DataSource dataSource) {
      return new JdbcTemplate(dataSource);
 }

0

我有同样的问题,并尝试了上述所有建议,但没有解决。我将我的答案发布给未来的读者。在它工作正常之前,它又以某种方式终止了。我通过从pom.xml中删除一些不必要的插件和依赖来解决了这个问题

  1. 首先,我将默认包装类型更改为jar(Spring Boot Initializer在包装中提供pom

    <packaging>jar</packaging>

  2. 我无意中添加了一些插件:

    <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <attachClasses>true</attachClasses> <webXml>target/web.xml</webXml> <webResources> <resource> <directory>src/main/webapp</directory> <filtering>true</filtering> </resource> </webResources> </configuration> </plugin>

希望我的回答对您有所帮助。


0

这个对我有用,对于MySQL :(应用程序属性)

spring.datasource.url=jdbc:mysql://localhost:3306/db?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&
useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=admin
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true

0

我在pom.xml中删除了对mybatis的过时依赖,以使我的运行。



0

如果您在pom.xml中添加了“ spring-boot-starter-data-jpa”依赖项,请在h2等依赖项中添加相应的数据库。


0

启动新项目时遇到相同的错误。使用命令行对我有用。

./gradlew bootRun

-1

我认为在导入模块时,您已经导入了另一个软件包,请转到模块并删除其中的所有模块。之后,从项目包中导入模块


-1

对我来说,资源文件夹在Maven更新/构建中被排除在外。我转到“构建路径”>“源”,发现src / main / resources具有“已排除的**”。我删除了该条目(单击“排除的**”>“删除”>“应用并关闭”)。

然后工作正常。

在此处输入图片说明



-8

就我而言

spring.profiles = production // remove it to fix

application.properties中是原因


5
无关,太具体。您的主要配置很可能仅限于production配置文件,因此激活此配置文件也可以解决您的问题。问题在于spring.datasource活动配置中缺少配置
TecHunter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.