简体   繁体   English

Spring Boot 2.3 数据源注入

[英]Spring Boot 2.3 DataSource injection

I have issues with recent Springboot 2.3 release.我对最近的 Springboot 2.3 版本有疑问。

I have the following config class:我有以下配置 class:

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;
}

With version 2.2.7 I have the following output:对于2.2.7版,我有以下 output:

<... 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 ...>

With version 2.3.0.RELEASE I have the following:使用版本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 ...>

The only difference between those is (in pom.xml ):它们之间的唯一区别是(在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>

vs对比

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

So with the new release datasource bean is configured in a separate thread, and my configuration bean received not-yet configured DataSource bean (null).因此,随着新版本的数据源 bean 被配置在一个单独的线程中,我的配置 bean 接收到尚未配置的数据源 bean (null)。

I cannot find any reference to configuration flow changes in release notes.我在发行说明中找不到任何有关配置流程更改的参考。 What is wrong here, and why my code stopped working?这里有什么问题,为什么我的代码停止工作?

UPDATE .更新 I reproduced this issue once more with Spring initializer.我用 Spring 初始化程序再次重现了这个问题。 Options selected: Java 14, actuator, jdbc, web, devtools, postgres db driver选择的选项:Java 14、执行器、jdbc、web、devtools、postgres db 驱动程序

Application properties contains all the correct connection data (verified on other old-spring project).应用程序属性包含所有正确的连接数据(在其他旧项目中验证)。 Its only contents is:它的唯一内容是:

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

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

It looks like 'spring-boot-starter-data-jpa' can be added to the dependency set to bring the hikari pool start back to the same point it was before.看起来可以将“spring-boot-starter-data-jpa”添加到依赖项集中,以使 hikari 池启动恢复到之前的状态。

Using your repository, I added this section to the pom.xml:使用您的存储库,我将此部分添加到 pom.xml:

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

and the result:结果:

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)

Here is the doc section about data source configuration that I followed:这是我遵循的有关数据源配置的文档部分:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM