我正在使用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)
答案 0 :(得分:15)
您的问题是弹簧批处理spring-boot-starter-batch
的依赖关系,该依赖关系具有spring-boot-starter-jdbc可传递maven依赖关系。
Spring Batch是用于构建可靠且具有容错能力的企业批处理的框架。它支持许多功能,例如重试失败的批处理,记录批处理执行的状态等。为了实现该春季批处理,使用数据库模式存储已注册作业的状态,自动配置已经为您提供了所需数据源的基本配置,并且该配置需要关系数据库的配置。
为此,您提供了一些数据库驱动程序,例如mysql,h2等,并配置了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,其动机是mongo的使用仅提供给项目读/写器,而不用于管理作为内部模式而非业务模式的spring batch内部数据库。该查询是普通的sql查询,内部抽象依赖于关系数据库。必须拥有一个具有ACID功能的数据库,因为每个批处理都需要读写大量工作并保存信息才能重新启动NoSql。
最后,您已经配置了一个关系数据库以便为内部功能准备好Spring批处理,内部抽象仅在jdbc上不依赖于mongo。然后,可以通过项目读取器/写入器将mongo用于批处理的业务,但仅用于商业方面。
我希望这种思考可以帮助您清除疑虑。
答案 1 :(得分:14)
排除DataSourceAutoConfiguration.class
对我有用:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
答案 2 :(得分:12)
检查您的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
答案 3 :(得分:7)
不是问题的重点(尽管可以联系),但是,如果您引导一个新项目并想知道为什么会得到相同的错误,则可能是{{1}的artifactId
}部分中。我在下面给出了依赖性。您将需要定义数据库来摆脱这种情况。
spring-boot-starter-data-jpa
答案 4 :(得分:5)
只需添加:@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
为我工作。
我遇到与@EnableAutoConfiguration(exclude = ...)尝试的相同错误,但不起作用。
答案 5 :(得分:4)
可能是通过Spring Initializr创建项目时,您的资源目录未添加到类路径中。因此,您的应用程序永远不会加载已配置的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
运行。哪个最有可能会工作。
解决方案:
请参阅IntelliJ支持人员的官方答复: IDEA-221673
答案 6 :(得分:3)
根本原因
JPA(Java持久性API)是ORM(对象关系映射)工具的Java规范。 spring-boot-starter-data-jpa依赖性在spring boot框架的上下文中启用ORM。
spring boot应用程序的JPA自动配置功能尝试使用JPA数据源建立数据库连接。 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 })
答案 7 :(得分:2)
作为 2021 年 spring-boot 最新版本的摘要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
无论你使用的是eclipse还是intellij,在真实环境中应用程序都必须在linux上运行。因此,要验证是否是 IDE 问题,请使用 shell 运行您的应用
mvn spring-boot:run
如果启动没有错误,问题出在你的 IDE
Eclipse IDE for Enterprise Java and Web Developers
Version: 2021-03 (4.19.0)
Build id: 20210312-0638
就我而言,我在 spring boot 项目中的经典 Application.java 上右键单击运行该项目,然后作为 java 应用程序运行强>
经过数小时的研究,解决方案是:
右键单击root spring boot 项目,然后作为 java 应用程序运行。 Eclipse 向我展示了几个带有主要方法的类。我选择我的 Application.java 然后运行
如果您检查确切的方法错误 DataSourceProperties.determineDriverClassName,您将看到只需要 driverClassName 或 dirver-class-name 和 url。
答案 8 :(得分:2)
我在我的代码中遇到了同样的问题,在 Application.java 文件中添加这段代码帮了我 -
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
答案 9 :(得分:2)
如果您使用的是Gradle,则重建Gradle可以解决此问题。
答案 10 :(得分:2)
可能是因为您具有jpa依赖项和插件...
仅在不使用时对其进行评论(build.gradle或pom文件)
e。 g。
// kotlin("plugin.jpa") version "1.3.61"
// implementation("org.springframework.boot:spring-boot-starter-data-jpa")
答案 11 :(得分:2)
This link帮助了。
Spring Boot自动配置尝试配置Bean 自动根据添加到类路径的依赖项。和 因为我们在类路径上有一个JPA依赖项(spring-data-starter-jpa),所以它将尝试对其进行配置。
问题:Spring Boot并没有配置JPA数据源所需的所有信息,即JDBC连接属性。 解决方案:
上面的链接不包括DataSourceAutoConfiguration.class
和
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
但这对我不起作用。相反,我不得不排除2个AutoConfig类:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, XADataSourceAutoConfiguration.class})
答案 12 :(得分:1)
“无法配置数据源”错误。首先,我们通过定义数据源来解决此问题。接下来,我们讨论了如何解决此问题而完全不配置数据源。
https://www.baeldung.com/spring-boot-failed-to-configure-data-source
答案 13 :(得分:1)
我也遇到了同样的问题,可以通过添加<scope>provided</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
答案 14 :(得分:1)
在主Java文件中添加此批注
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
答案 15 :(得分:1)
如果pom.xml中具有JPA依赖项,则将其删除。这个解决方案对我有用。
答案 16 :(得分:0)
如果数据源在application.resources
中定义,请确保它位于src/main
下,并将其添加到构建路径中。
答案 17 :(得分:0)
在pom文件中添加h2依赖项可以解决此类问题。 ...... com.h2数据库 h2 ......
答案 18 :(得分:0)
您需要配置数据库驱动程序和 JDBC 连接属性来修复此异常 Failed to configure a DataSource: ‘url’ attribute is not specified and no embedding datasource can be configured。原因:未能确定合适的驱动程序类别。
application.properties
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
答案 19 :(得分:0)
检查您的 application.properties 文件。 可能的原因之一是
datastore details in application.properties file.
答案 20 :(得分:0)
启动新项目时遇到相同的错误。使用命令行对我有用。
./gradlew bootRun
答案 21 :(得分:0)
如果在pom.xml中添加了“ spring-boot-starter-data-jpa”依赖项,请分别添加与h2等类似的依赖项数据库。
答案 22 :(得分:0)
对于下面的春季启动版本2.X.X
来说,它对我有用。
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驱动程序已弃用。在上面的配置中提到了新的。 请使用相同的名称,然后重新启动项目。
答案 23 :(得分:0)
我删除了pom.xml中对mybatis的过时依赖,以使我的运行。
答案 24 :(得分:0)
这仅表示您已经下载了具有数据库相关性的spring starter代码,而没有配置数据库。所以它不知道如何连接。对于Spring引导版本2.18
,请执行以下步骤对其进行修复。
mysql/mongo
等)创建数据库。在您的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
答案 25 :(得分: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
答案 26 :(得分:0)
我遇到了同样的问题,并尝试了上述所有建议,但没有解决。我将我的答案发布给未来的读者。在它工作正常之前,它又以某种方式终止了。我通过从pom.xml中删除一些不必要的插件和依赖来解决了这个问题
首先,我将默认包装类型更改为 jar (Spring Boot Initializer在包装中提供了 pom )
<packaging>jar</packaging>
我无意中添加了一些插件:
<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>
我希望我的回答可以对某人有所帮助。
答案 27 :(得分:0)
我已经在Spring Boot应用程序的主类中添加了此批注,并且一切运行正常
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
答案 28 :(得分:0)
这是因为@ valerio-vaudi所说。
您的问题是春季批处理的依赖性 具有spring-boot-starter-jdbc的spring-boot-starter-batch 传递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);
}
答案 29 :(得分:-1)
我认为在导入模块时,您已经导入了另一个软件包,请转到模块并删除其中的所有模块。之后,从项目包中导入模块
答案 30 :(得分:-1)
对我来说,资源文件夹在Maven更新/构建中被排除在外。我转到“构建路径”>“源”,发现src / main / resources具有“已排除的**”。我删除了该条目(点击排除的**>删除>应用并关闭)。
然后工作正常。
答案 31 :(得分:-4)
就我而言
val background= object :Thread() {
override fun run() {
try {
try {
AWSMobileClient.getInstance().initialize(baseContext)
credentials = BasicAWSCredentials(AWSutils().KEY,AWSutils().SECRET)
s3Client = AmazonS3Client(credentials)
val response = s3Client.getObject(AWSutils().bucket_name,"jsa3/NewParentData")
println("Checking the respose" + response.objectContent.toString())
Log.i(response.objectContent.toString(),"checking if response successful")
response.close()
} catch(e:AmazonServiceException) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
}
catch(e:AmazonClientException) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}catch (e:Exception){
e.printStackTrace()
}
}
}
background.start()
原因是 application.properties 中的