【问题标题】:SpringBoot Datasource AutoConfiguration Not WorkingSpring Boot 数据源自动配置不起作用
【发布时间】:2016-12-02 02:32:57
【问题描述】:

我有一个简单的 SpringBoot 应用程序,我想使用 AutoConfiguration 来配置 Tomcat jdbc 池数据源。

我正在使用这些 Spring 依赖项:

// Spring Boot
compile 'org.springframework.boot:spring-boot-starter-web:1.3.5.RELEASE'
compile 'org.springframework.boot:spring-boot-starter-jdbc:1.3.5.RELEASE'

这是我的 application.yml 文件中的数据源属性:

spring:
    datasource:
        url: jdbc:mysql://my.host/mydb
        username: user
        password: pwd
        driver-class-name: com.mysql.jdbc.Driver
        initialSize: 5

我确定属性正在加载,因为该应用正在获取其他值。

我将配置文件中的 bean 定义为:

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

然后我像这样将数据源注入我的 DAO:

@Slf4j
@Repository
class MyDAO {

    @Autowired
    DataSource dataSource

    public void getFoo() {
        log.info("DB URL: ${dataSource.getUrl()}")
    }
}

如果我在 getDataSource() 方法中设置断点,DataSourceBuilder 将创建一个 DataSource 实例。但是,该对象的所有属性(如 URL、用户和密码)都为空。此外,当我调用 getFoo() 时,dataSource 变量为空。我尝试在我的 AppConfig 中注释掉 bean 定义。数据源仍然为空。有什么建议吗?

我查看了 Spring Boot 文档和我的 Spring book,但没有看到任何这样的示例。我看到了我自己创建数据源的示例。但我希望 Spring 的自动配置会自动将这些东西联系在一起。

提前感谢您提供的任何帮助。

【问题讨论】:

    标签: spring-boot datasource


    【解决方案1】:

    通过创建您自己的 bean,您实际上关闭了 Boot 对 DataSource 的自动配置。你可以删除你的 getDataSource 方法,让 Boot 自动配置一个。

    【讨论】:

    • 我已更新问题以包括我如何注入 bean。我尝试在我的 Java 配置中注释掉 bean 的创建。这样做,注入的 DataSource 为空。
    • Spring 注入的东西不应该为空。您如何获取具有空数据源的 MyDAO 实例?
    • 你很准。我正在新建 DAO 对象。一旦我改变了它并添加了 SpringBoot JPA 依赖项,它就可以工作了。我正在努力获得足够的分数来标记您的答案有用。一旦我上去,我会给你打勾。再次感谢。
    【解决方案2】:

    根据 Andy 的 cmets,我发现我有两个问题。首先,我需要在项目中包含 JPA 依赖项。我将此行添加到我的 build.gradle 文件中:

    compile 'org.springframework.boot:spring-boot-starter-data-jpa:1.3.5.RELEASE'
    

    其次,我正在使用 new() 创建 MyDAO 的实例。我通过创建一个使用 @Autowired 注入 MyDAO 实例的服务类来解决此问题。一旦 DAO 成为 Spring 托管的 bean,它就能够从 Tomcat 连接池中注入 DataSource 的实例。

    【讨论】:

      猜你喜欢
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      相关资源
      最近更新 更多