[英]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.