我正在用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)
您的问题是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可以通过项目读取器/写入器用于批处理的业务方面。
我希望这能帮助你消除疑虑。
这个链接很有帮助。
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 Initializr创建一个项目时,你的资源目录可能没有添加到类路径中。所以你的应用永远不会加载这个应用。已配置的属性文件。
如果是这种情况,请将以下内容添加到应用程序中进行快速测试。属性文件:
server.port=8081
现在,当运行你的应用程序时,你应该在spring引导控制台中看到类似这样的输出:
INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): **8081** (http) with context path ''
如果您的端口仍然是默认的8080,而没有更改为8081,则您的应用程序。属性文件显然没有加载。
你也可以从命令行检查你的应用程序是否使用gradle bootRun运行。这很可能是工作。
解决方案:
关闭IntelliJ,然后在项目文件夹中删除“。想法”文件夹
重新导入您的项目到IntelliJ,如下所示:“导入项目”->“选择仅您的构建。Gradle文件导入”。(IntelliJ会自动抓取剩下的)
重新构建并运行应用程序
详见IntelliJ Support的官方回答:
想法- 221673
根本原因
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 })
作为对最新的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是必需的。
当我在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瞧
一个选项解决方案,如果已经测试了所有最后的答案
如果你有title之类的错误
验证的.properties连接字符串是正确的。
然后在.pom文件中添加关于maven插件的代码块
...
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
...
和更新项目。对我有用!!
我希望这能帮助你。
这一步你在这个链接页面找到。
执行goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources失败
https://exerror.com/failed-to-execute-goal-org-apache-maven-pluginsmaven-resources-plugin3-2-0resources/
在这里:
Maven clean install: Failed to execute goal org.apache.maven.plugins: Maven -resources-plugin:3.2.0:resources