Spring 创建Bob命名时引导错误 'dataSource', 在课堂上定义 path resource

我有 Spring Boot Web应用程序。 它集中在方法周围 RESTful. 整个配置似乎到位,但出于某种原因 MainController 无法处理请求。 它导致错误 404. 如何解决它?


@Controller
public class MainController {

@Autowired
ParserService parserService;

@RequestMapping/value="/", method= RequestMethod.GET/
public @ResponseBody String displayStartPage//{
return "{hello}";
}
}


应用


@Configuration
@ComponentScan/basePackages = ""/
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer{
public static void main/final String[] args/ {
SpringApplication.run/Application.class, args/;
}

@Override
protected final SpringApplicationBuilder configure/final SpringApplicationBuilder application/ {
return application.sources/Application.class/;
}
}


ParserController


@RestController
public class ParserController {

@Autowired
private ParserService parserService;

@Autowired
private RecordDao recordDao;

private static final Logger LOG = Logger.getLogger/ParserController.class/;

@RequestMapping/value="/upload", method= RequestMethod.POST/
public @ResponseBody String fileUploadPage/
}
}


UPDATE

看起来 MySQL 无法初始化 Spring....


Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; 

nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource;

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed;

nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource//] threw exception;

nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.


更新 2

application.properties


spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/logparser
spring.datasource.username=root
spring.datasource.password=root

spring.jpa.database = MYSQL
spring.jpa.show-sql = true

# Hibernate
hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql: true
hibernate.hbm2ddl.auto: update
entitymanager.packagesToScan: /


UPDATE4

似乎控制器 lite 不要回答
@RequestMapping

放。 为什么不?

PS. 它发生在我发射生命周期时 Maven
test

.
在模式下工作时 degub 在 IntelliJ 没有显示错误。

UPDATE5

我也用这个 DAO, 如教科书中所述....


public interface RecordDao extends CrudRepository<record, long=""> {
}


http://blog.netgloo.com/2014/1 ... nate/
/

UPDATE6

我真的更改了应用程序属性。 我尝试了每个组合,但它拒绝工作。 ;/

Maven 出口

:


-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running IntegrationTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.365 sec &lt;&lt;&lt; FAILURE! - in IntegrationTest
saveParsedRecordsToDatabase/IntegrationTest/ Time elapsed: 2.01 sec &lt;&lt;&lt; ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext/CacheAwareContextLoaderDelegate.java:99/
at org.springframework.test.context.DefaultTestContext.getApplicationContext/DefaultTestContext.java:101/
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies/DependencyInjectionTestExecutionListener.java:109/
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance/DependencyInjectionTestExecutionListener.java:75/
at org.springframework.test.context.TestContextManager.prepareTestInstance/TestContextManager.java:331/
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest/SpringJUnit4ClassRunner.java:213/
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall/SpringJUnit4ClassRunner.java:290/
at org.junit.internal.runners.model.ReflectiveCallable.run/ReflectiveCallable.java:12/
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock/SpringJUnit4ClassRunner.java:292/
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild/SpringJUnit4ClassRunner.java:233/
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild/SpringJUnit4ClassRunner.java:87/
at org.junit.runners.ParentRunner$3.run/ParentRunner.java:238/
at org.junit.runners.ParentRunner$1.schedule/ParentRunner.java:63/
at org.junit.runners.ParentRunner.runChildren/ParentRunner.java:236/
at org.junit.runners.ParentRunner.access$000/ParentRunner.java:53/
at org.junit.runners.ParentRunner$2.evaluate/ParentRunner.java:229/
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate/RunBeforeTestClassCallbacks.java:61/
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate/RunAfterTestClassCallbacks.java:71/
at org.junit.runners.ParentRunner.run/ParentRunner.java:309/
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run/SpringJUnit4ClassRunner.java:176/
at org.apache.maven.surefire.junit4.JUnit4Provider.execute/JUnit4Provider.java:264/
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet/JUnit4Provider.java:153/
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke/JUnit4Provider.java:124/
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader/ForkedBooter.java:200/
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess/ForkedBooter.java:153/
at org.apache.maven.surefire.booter.ForkedBooter.main/ForkedBooter.java:103/
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource//] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.


</record,>
已邀请:

卫东

赞同来自:

似乎初始问题与自动设置相关。

如果您不需要数据源,只需从自动设置过程中删除它:


@EnableAutoConfiguration/exclude={DataSourceAutoConfiguration.class}/

窦买办

赞同来自:

显然,你没有给予足够的数据 Spring Boot, 配置数据源

创建/在你现有的
application.properties

添加以下内容


spring.datasource.driverClassName=
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=


确保为每个属性添加值。

石油百科

赞同来自:

也许你忘了 MySQL JDBC 司机。


<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>5.1.34</version>
</dependency>

二哥

赞同来自:

我收到了同样的错误,发现它与我缺少的一些依赖关系有关 pom.xml, 例如,在 Spring JPA, Hibernate, Mysql 或者也许是杰克逊。
所以确保依赖项不会缺失 pom.xml 并检查他们与版本的兼容性。


 Jpa and hibernate 
<dependency>
<groupid>org.springframework</groupid>
<artifactid>spring-orm</artifactid>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupid>org.hibernate</groupid>
<artifactid>hibernate-entitymanager</artifactid>
<version>5.0.3.Final</version>
</dependency>
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>5.1.6</version>
</dependency>

帅驴

赞同来自:

特性
hibernate.*

无用,他们必须是属性
spring.jpa.*

. 更不用说你试图覆盖已经使用属性安装的事实
spring.jpa.*

. /要解释每个属性,我强烈建议阅读
http://docs.spring.io/spring-b ... -data
Spring Boot .


spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql = true

# Hibernate
spring.jpa.hibernate.ddl-auto=update


此外,扫描袋基于类的基本包自动确定。
Application

. 如果要指定其他内容,请使用注释
@EntityScan

. 此外,顶级包本身的指示不是相当合理的,因为它将一直扫描到类,这将严重影响性能。

窦买办

赞同来自:

测试期间发生此问题。
添加瘾


testCompile group: 'com.h2database', name: 'h2', version: '1.4.197'


将文件夹资源添加到测试源添加文件 bootstrap.yml
并提供内容。


spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:h2:mem:TEST
driver-class-name: org.h2.Driver
username: username
password: password
hikari:
idle-timeout: 10000


这将允许您配置数据源。

小明明

赞同来自:

更改代码行下方


spring.datasource.driverClassName





spring.datasource.driver-class-name

八刀丁二

赞同来自:

如果您正在使用 application.properties 在申请中 spring boot, 那只是把线放在下面 application.properties, 她应该工作:

spring.datasource.url: jdbc:mysql://google/?cloudSqlInstance=&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=*** * &password=

****

郭文康

赞同来自:

检查时间组中的数据库依赖项

执行

在 build.gradle


runtime group: 'com.h2database', name: 'h2', version: '1.4.194'


或从测试中更改域

执行

, 如果您正在使用 Maven


<dependency>
<groupid>com.h2database</groupid>
<artifactid>h2</artifactid>
<version>1.4.194</version>
<scope>runtime</scope>
</dependency>

郭文康

赞同来自:

在我的情况下,发生这种情况是因为org.springframework.boot.autoconfigure.rm.jpa.jpabaseConfiguration.dataSource是一个没有限定符的自动字段,我使用具有限定名称的多个数据源。 我解决了这个问题 @Primary 在我的一个Bob配置中任意 dataSource, 例如


@Primary
@Bean/name="oneOfManyDataSources"/
public DataSource dataSource// { ... }


我想他们希望你实现 AbstractRoutingDataSource, 然后,此自动配置只需工作,因为不需要限定符,您只需有一个数据源,允许您的鲍勃允许适当的源 DataSource 如所须。 然后你根本不需要注释。 @Primary 或者 @Qualifier, 因为你只有一个 DataSource.

无论如何,我的决定工作了,因为我的豆子问道 DataSource 通过限定符和材料 JPA auto config 因为他有一个主要的 DataSource. 我不推荐这一点 "right" 做事的方式,但在我的情况下它已经解决了这个问题并且没有任何明显的方式阻碍我的申请的行为。 让我们希望有一天能够实现 AbstractRoutingDataSource 并重构需要混凝土的所有豆类 DataSource, 然后,也许它将是一个更准确的解决方案。

八刀丁二

赞同来自:

即使在提供所有必要的数据源属性之后,我也遇到了这个问题 application.properties. 然后我意识到未扫描属性的配置类 Spring boot, 因为他与我的另一个包层次结构相比 Spring boot Application.java, 因此没有应用于对象的属性 datasource.
我更改了属性的类配置包的名称,它开始工作。

风见雨下

赞同来自:

在我的情况下,我忽略了文件中的以下内容 application.properties:

# Hibernate

#spring.jpa.hibernate.ddl-auto=update

这个对我有用 ....

奔跑吧少年

赞同来自:

它对原始问题没有直接的态度,但它对某人有用。 此错误发生在两个项目的简单结构中。 一个项目处理了一些数据库操作 spring jdbc/让我们说 A/, 而另一个没有运营 jdbc /让我们说 B/. 但是当我开始服务时仍然出现此错误 B. 说必须正确初始化数据源。

正如我所知,我向父母添加了这个瘾 pom 两个模块


<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-jdbc</artifactid>
</dependency>


这造成了这一点 spring 初始化 jdbc 依赖于项目 B 还。 所以,我用庞康搬到了项目,一切都很好。

我希望这将有助于某人

二哥

赞同来自:

您将应用程序运行为 jar? / java -jar xxxx.jar/

如果是这样,那么你有 application.properties, 存储在此内容中 jar ?

如果没有,请尝试弄清楚为什么 :

自动包装在 jar, 文件可以在: src/main/resources/application.properties

插入 maven 在 pom.xml 您也可以配置

冰洋

赞同来自:

它为我工作。你可以尝试你的手:
加入它 VM 选项B. Tomcat


-DdevBaseDir="C:\Your_Project_Dir_Path"

卫东

赞同来自:

当你遇到这种错误时,请给你别的东西无法创造
数据源 bean 在测试用例中。

这可能是由于某种原因引起的:

无数据源,您需要创建数据源,数据源 h2 在记忆中或其他东西,或者你可以选择一种方式
exclude={datasource··}

.

例如,您有自己的数据源 MySQL, 但他仍然不起作用。 它是由班级造成的
AutoConfigureTestDatabase

, 他将为您选择一个数据源,这可能会导致歧义。

解决方案:添加
@AutoConfigureTestDatabase/replace = AutoConfigureTestDatabase.Replace.NONE/

, 避免替换默认数据源。

裸奔

赞同来自:

我解决了父母依赖的变化问题 Spring Boot.


<parent>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-parent</artifactid>
<version>2.1.0.RELEASE</version>
</parent>





<parent>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-parent</artifactid>
<version>2.0.6.RELEASE</version>
</parent>


有关更多信息,请参阅发行说明:
https://github.com/spring-proj ... Notes

冰洋

赞同来自:

我遇到了几天的同样的问题,最后,问题不是代码,问题开始了 maven, 您必须删除他从硬盘下载的所有文件。 "C:\Users\username.m2\repository", 并再次更新 maven 对于您的项目,这将纠正您的问题。

要回复问题请先登录注册