【问题标题】:Spring Boot 2.3 DataSource injectionSpring Boot 2.3 数据源注入
【发布时间】:2020-05-18 15:00:58
【问题描述】:

我对最近的 Springboot 2.3 版本有疑问。

我有以下配置类:

package name.defance.springbootdemo.security;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class SampleConfig {

    @Autowired
    public SampleConfig(DataSource dataSource) {
        System.out.println("DATASOURCE: " + dataSource);
        this.dataSource = dataSource;
    }

    final private DataSource dataSource;
}

使用版本 2.2.7 我有以下输出:

<... truncated output ...>
2020-05-18 17:57:33.872  INFO 2081 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-05-18 17:57:33.873  INFO 2081 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.34]
2020-05-18 17:57:33.950  INFO 2081 --- [  restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-05-18 17:57:33.950  INFO 2081 --- [  restartedMain] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2113 ms
2020-05-18 17:57:34.511  INFO 2081 --- [  restartedMain] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-05-18 17:57:34.555  INFO 2081 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.15.Final
2020-05-18 17:57:34.686  INFO 2081 --- [  restartedMain] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-05-18 17:57:34.801  INFO 2081 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-05-18 17:57:34.901  INFO 2081 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-05-18 17:57:34.922  INFO 2081 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL10Dialect
2020-05-18 17:57:35.405  INFO 2081 --- [  restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-05-18 17:57:35.411  INFO 2081 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-05-18 17:57:35.463  WARN 2081 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : Unable to start LiveReload server
DATASOURCE: HikariDataSource (HikariPool-1)
<... truncated output ...>

使用版本 2.3.0.RELEASE 我有以下内容:

<... truncated output ...>
2020-05-18 17:52:02.183  INFO 352 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-05-18 17:52:02.184  INFO 352 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.35]
2020-05-18 17:52:02.249  INFO 352 --- [  restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-05-18 17:52:02.249  INFO 352 --- [  restartedMain] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2453 ms
2020-05-18 17:52:02.669  INFO 352 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
DATASOURCE: HikariDataSource (null)
2020-05-18 17:52:02.720  INFO 352 --- [         task-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-05-18 17:52:02.755  INFO 352 --- [         task-1] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.15.Final
2020-05-18 17:52:02.862  INFO 352 --- [         task-1] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-05-18 17:52:02.957  INFO 352 --- [         task-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-05-18 17:52:03.066  INFO 352 --- [         task-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-05-18 17:52:03.081  INFO 352 --- [         task-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL10Dialect
2020-05-18 17:52:03.526  INFO 352 --- [         task-1] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-05-18 17:52:03.534  INFO 352 --- [         task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-05-18 17:52:03.736  WARN 352 --- [         task-2] o.s.b.d.a.OptionalLiveReloadServer       : Unable to start LiveReload server
<... truncated output ...>

它们之间的唯一区别是(pom.xml):

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

因此,随着新版本的数据源 bean 被配置在一个单独的线程中,我的配置 bean 接收到尚未配置的数据源 bean (null)。

我在发行说明中找不到任何有关配置流程更改的参考。这里出了什么问题,为什么我的代码停止工作?

更新。我用 Spring 初始化程序再次重现了这个问题。选择的选项:Java 14、执行器、jdbc、web、devtools、postgres db 驱动程序

应用程序属性包含所有正确的连接数据(已在其他旧项目中验证)。它的唯一内容是:

spring.datasource.url=jdbc:postgresql://localhost:15432/insurance-demo
spring.datasource.username=postgres
spring.datasource.password=postgresPWD
server.port=8080

更新:项目回购https://github.com/defance/datasource-demo

【问题讨论】:

  • 你是否配置了application.properties和数据库驱动类在类路径中是否可用?
  • 我还看到了一个单独的线程,但在我的情况下它打印 DATASOURCE: HikariDataSource (HikariPool-1) 你还有其他配置吗?
  • 在问题中添加了一些细节。
  • @LakshmanMiani,是的,数据源本身是有效的,我可以连接到它。使用 2.2.7,我还可以通过 DAO 等做一些事情......
  • @SimonMartinelli 我创建了最小配置来重现该问题,通过初始化程序添加了一些库:执行器、jdbc、web、devtools、postgres db 驱动程序。除了数据源没有额外的配置

标签: java spring-boot jdbc


【解决方案1】:

看起来可以将“spring-boot-starter-data-jpa”添加到依赖项集中,以使 hikari 池启动恢复到之前的状态。

使用您的存储库,我将此部分添加到 pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

结果:

2020-05-18 09:58:17.046  INFO 60543 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-05-18 09:58:17.094  INFO 60543 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
DATASOURCE: HikariDataSource (HikariPool-1)

这是我遵循的有关数据源配置的文档部分:

【讨论】:

    猜你喜欢
    • 2018-01-27
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多