【问题标题】:Spring Boot 2 datasource by configuration does not work通过配置的 Spring Boot 2 数据源不起作用
【发布时间】:2021-03-11 16:06:31
【问题描述】:

我有一个 application.yml(!) 用于包含以下内容的配置:

spring:
  datasource:
    url: "jdbc:h2:file:./camunda-h2-database"
    driverClassName: "org.h2.Driver"
    username: "sa"
    password: ""

这给了我错误消息:

2021-03-11T17:02:48,600 WARN  [main] o.s.c.s.AbstractApplicationContext: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.camunda.bpm.spring.boot.starter.CamundaBpmAutoConfiguration$ProcessEngineConfigurationImplDependingConfiguration': Unsatisfied dependency expressed through field 'processEngineConfigurationImpl'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'processEngineConfigurationImpl' defined in class path resource [org/camunda/bpm/spring/boot/starter/CamundaBpmConfiguration.class]: Unsatisfied dependency expressed through method 'processEngineConfigurationImpl' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'camundaDatasourceConfiguration': Unsatisfied dependency expressed through field 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

这样做是有效的:

public DriverManagerDataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();

    dataSource.setDriverClassName("org.h2.Driver");
    dataSource.setUrl("jdbc:h2:file:./camunda-h2-database");
    dataSource.setUsername("sa");
    dataSource.setPassword("");

    return dataSource;
}

@Bean
public PlatformTransactionManager transactionManager() {
    return new DataSourceTransactionManager(dataSource());
}

想法? :-)

【问题讨论】:

  • 确保您没有在代码中排除 DataSourceAutoConfiguration。像这样@SpringBootApplication(exclude = [DataSourceAutoConfiguration::class])
  • 并尝试在您的 application.yml 中将 driverClassName 重命名为 driver-class-name
  • @NikolaiShevchenko,您的第二条评论解决了我的问题。请添加它作为答案,以便我可以选择它作为“解决方案”(只需添加两个想法)。谢了!

标签: java spring-boot yaml datasource camunda


【解决方案1】:

driverClassName 重命名为 driver-class-name,因为在 Spring Boot 自动配置属性中 Kebab 大小写优于 Camel 大小写。

如果这没有帮助,请确保您没有关闭 DataSourceAutoConfiguration 功能。它通常看起来像

@SpringBootApplication(exclude = [DataSourceAutoConfiguration::class])
public class BootApplication { ... }

【讨论】:

    猜你喜欢
    • 2016-12-02
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2016-01-17
    • 2015-01-26
    • 1970-01-01
    相关资源
    最近更新 更多