[spring-projects/spring-boot]Spring boot 2.6.0'integrationDataSourceInitializer'抛出的是java.lang.IllegalStateException:无法检测数据库类型

2024-05-14 278 views
8

将 Spring boot 版本从 2.4.5 升级到 2.6.0 后,我观察到 Sybase 数据库出现以下错误。

引起:org.springframework.beans.BeanInstantiationException:无法实例化[org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer]:工厂方法“integrationDataSourceInitializer”抛出异常;嵌套异常是 java.lang.IllegalStateException:无法检测数据库类型

应用程序.yaml

spring:
  jpa:
    hibernate:
      ddl-auto: none
      generate-ddl: false
      naming.physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    databasePlatform: org.hibernate.dialect.SybaseDialect
    database: sybase

  datasource:
    url: jdbc:sybase:Tds:_host_:_port_/_database_
    driverClassName: com.sybase.jdbc4.jdbc.SybDriver
    username: _username_
    password: _password_

异常堆栈跟踪:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-12-03 14:38:12.106 ERROR 25344 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'integrationDataSourceInitializer' defined in class path resource [org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration$IntegrationJdbcConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer]: Factory method 'integrationDataSourceInitializer' threw exception; nested exception is java.lang.IllegalStateException: Unable to detect database type
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[spring-context-5.3.13.jar!/:5.3.13]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) ~[spring-context-5.3.13.jar!/:5.3.13]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.13.jar!/:5.3.13]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.0.jar!/:2.6.0]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-2.6.0.jar!/:2.6.0]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) ~[spring-boot-2.6.0.jar!/:2.6.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.0.jar!/:2.6.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.0.jar!/:2.6.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) ~[spring-boot-2.6.0.jar!/:2.6.0]

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer]: Factory method 'integrationDataSourceInitializer' threw exception; nested exception is java.lang.IllegalStateException: Unable to detect database type
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.13.jar!/:5.3.13]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.13.jar!/:5.3.13]
        ... 29 common frames omitted
Caused by: java.lang.IllegalStateException: Unable to detect database type
        at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.3.13.jar!/:5.3.13]
        at org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver.determinePlatform(PlatformPlaceholderDatabaseDriverResolver.java:114) ~[spring-boot-2.6.0.jar!/:2.6.0]
        at org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver.resolveAll(PlatformPlaceholderDatabaseDriverResolver.java:103) ~[spring-boot-2.6.0.jar!/:2.6.0]
        at org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer.getSettings(IntegrationDataSourceScriptDatabaseInitializer.java:70) ~[spring-boot-autoconfigure-2.6.0.jar!/:2.6.0]
        at org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer.<init>(IntegrationDataSourceScriptDatabaseInitializer.java:43) ~[spring-boot-autoconfigure-2.6.0.jar!/:2.6.0]
        at org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration$IntegrationJdbcConfiguration.integrationDataSourceInitializer(IntegrationAutoConfiguration.java:244) ~[spring-boot-autoconfigure-2.6.0.jar!/:2.6.0]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.13.jar!/:5.3.13]
        ... 30 common frames omitted

回答

7

感谢您的报告。问题是,我们正在尝试解析@@platform@@架构位置中的占位符,即使架构脚本由于初始化模式为 而永远不会实际使用EMBEDDED

我认为您可以通过使用空设置定义自己的数据库初始化程序 bean 来解决该问题:

@Bean
public IntegrationDataSourceScriptDatabaseInitializer customIntegrationDataSourceInitializer(DataSource dataSource) {
    return new IntegrationDataSourceScriptDatabaseInitializer(dataSource, new DatabaseInitializationSettings());
}
9

我们应该检查其他各种初始化程序,看看它们是否也受到影响。看了代码,我觉得Spring Batch也会出现类似的问题。

0

我们在整合各种初始化器时造成了一些尴尬的情况DataSource

在 2.4 中,我们处理了DataSourceInitializer将用户模式和数据脚本应用到DataSource.我们还有AbstractDataSourceInitializer一个单独的基类,用于与 Spring Integration、Quartz 等一起使用的数据库初始化。DataSourceInitializer检查它是否有任何要首先应用的脚本,但AbstractDataSourceInitializer首先检查数据库的类型(嵌入式或非嵌入式)。

在 2.5 中,初始化器被合并到AbstractScriptDatabaseInitializer.最初,它首先检查数据库的类型(嵌入式或非嵌入式)。这在 2.5.2 中进行了更改,以检查首先应用的脚本。这样做是为了使其与DataSourceInitializer.

不幸的是,这种与 的一致性DataSourceInitializer导致了事情与 的不一致AbstractDataSourceInitializer。首先检查要应用的脚本意味着@@platform@@即使由于未启用初始化程序而永远不会应用脚本,也需要解决该问题。

5

我已经打开#28932 和#28931 来解决与此相关的问题。一旦这些问题得到解决,我们将再次审查这个问题,看看我们还需要做什么(如果有的话)。

1

感谢您对此进行调查。这个问题有可能很快得到解决吗?

2

如果时间允许,我们希望在下一个 2.6.x 版本中至少修复一些问题,但我们不能做出任何承诺。您尝试过上面的解决方法吗?

1

解决方法没有帮助。

1

这太令人惊讶了。它似乎对我有用。使用 Spring Boot 2.6.1 且没有解决方法的应用程序无法按照您报告的方式启动:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.1)

2021-12-09 09:34:00.384  INFO 35105 --- [           main] com.example.demo.Gh28897Application      : Starting Gh28897Application using Java 1.8.0_252 on wilkinsona-a01.vmware.com with PID 35105 (/Users/awilkinson/dev/workspaces/spring-projects/spring-boot/2.6.x/gh-28897/bin/main started by awilkinson in /Users/awilkinson/dev/workspaces/spring-projects/spring-boot/2.6.x/gh-28897)
2021-12-09 09:34:00.386  INFO 35105 --- [           main] com.example.demo.Gh28897Application      : No active profile set, falling back to default profiles: default
2021-12-09 09:34:00.870  INFO 35105 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created.
2021-12-09 09:34:00.879  INFO 35105 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created.
2021-12-09 09:34:01.112  INFO 35105 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.integration.config.IntegrationManagementConfiguration' of type [org.springframework.integration.config.IntegrationManagementConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-12-09 09:34:01.120  INFO 35105 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'integrationChannelResolver' of type [org.springframework.integration.support.channel.BeanFactoryChannelResolver] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-12-09 09:34:01.121  INFO 35105 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'integrationDisposableAutoCreatedBeans' of type [org.springframework.integration.config.annotation.Disposables] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-12-09 09:34:01.330  INFO 35105 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-12-09 09:34:01.339  INFO 35105 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-12-09 09:34:01.340  INFO 35105 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.55]
2021-12-09 09:34:01.387  INFO 35105 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-12-09 09:34:01.387  INFO 35105 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 961 ms
2021-12-09 09:34:01.774  INFO 35105 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2021-12-09 09:34:01.779  WARN 35105 --- [           main] com.zaxxer.hikari.util.DriverDataSource  : Registered driver with driverClassName=com.sybase.jdbc4.jdbc.SybDriver was not found, trying direct instantiation.
2021-12-09 09:34:01.780  WARN 35105 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'integrationDataSourceInitializer' defined in class path resource [org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration$IntegrationJdbcConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer]: Factory method 'integrationDataSourceInitializer' threw exception; nested exception is java.lang.IllegalStateException: Unable to detect database type
2021-12-09 09:34:01.784  INFO 35105 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2021-12-09 09:34:01.793  INFO 35105 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-12-09 09:34:01.844 ERROR 35105 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'integrationDataSourceInitializer' defined in class path resource [org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration$IntegrationJdbcConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer]: Factory method 'integrationDataSourceInitializer' threw exception; nested exception is java.lang.IllegalStateException: Unable to detect database type
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.13.jar:5.3.13]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.13.jar:5.3.13]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.1.jar:2.6.1]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) [spring-boot-2.6.1.jar:2.6.1]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) [spring-boot-2.6.1.jar:2.6.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) [spring-boot-2.6.1.jar:2.6.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) [spring-boot-2.6.1.jar:2.6.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) [spring-boot-2.6.1.jar:2.6.1]
    at com.example.demo.Gh28897Application.main(Gh28897Application.java:15) [main/:na]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer]: Factory method 'integrationDataSourceInitializer' threw exception; nested exception is java.lang.IllegalStateException: Unable to detect database type
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.13.jar:5.3.13]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.13.jar:5.3.13]
    ... 19 common frames omitted
Caused by: java.lang.IllegalStateException: Unable to detect database type
    at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.3.13.jar:5.3.13]
    at org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver.determinePlatform(PlatformPlaceholderDatabaseDriverResolver.java:114) ~[spring-boot-2.6.1.jar:2.6.1]
    at org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver.resolveAll(PlatformPlaceholderDatabaseDriverResolver.java:103) ~[spring-boot-2.6.1.jar:2.6.1]
    at org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer.getSettings(IntegrationDataSourceScriptDatabaseInitializer.java:70) ~[spring-boot-autoconfigure-2.6.1.jar:2.6.1]
    at org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer.<init>(IntegrationDataSourceScriptDatabaseInitializer.java:43) ~[spring-boot-autoconfigure-2.6.1.jar:2.6.1]
    at org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration$IntegrationJdbcConfiguration.integrationDataSourceInitializer(IntegrationAutoConfiguration.java:244) ~[spring-boot-autoconfigure-2.6.1.jar:2.6.1]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_252]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_252]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_252]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_252]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.13.jar:5.3.13]
    ... 20 common frames omitted

然后,我修改了主应用程序类以添加解决方法的 bean:

package com.example.demo;

import javax.sql.DataSource;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Gh28897Application {

    public static void main(String[] args) {
        SpringApplication.run(Gh28897Application.class, args);
    }

    @Bean
    public IntegrationDataSourceScriptDatabaseInitializer customIntegrationDataSourceInitializer(DataSource dataSource) {
        return new IntegrationDataSourceScriptDatabaseInitializer(dataSource, new DatabaseInitializationSettings());
    }

}

应用程序现在成功启动:


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.1)

2021-12-09 09:36:25.435  INFO 35140 --- [           main] com.example.demo.Gh28897Application      : Starting Gh28897Application using Java 1.8.0_252 on wilkinsona-a01.vmware.com with PID 35140 (/Users/awilkinson/dev/workspaces/spring-projects/spring-boot/2.6.x/gh-28897/bin/main started by awilkinson in /Users/awilkinson/dev/workspaces/spring-projects/spring-boot/2.6.x/gh-28897)
2021-12-09 09:36:25.437  INFO 35140 --- [           main] com.example.demo.Gh28897Application      : No active profile set, falling back to default profiles: default
2021-12-09 09:36:25.938  INFO 35140 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created.
2021-12-09 09:36:25.948  INFO 35140 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created.
2021-12-09 09:36:26.204  INFO 35140 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.integration.config.IntegrationManagementConfiguration' of type [org.springframework.integration.config.IntegrationManagementConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-12-09 09:36:26.213  INFO 35140 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'integrationChannelResolver' of type [org.springframework.integration.support.channel.BeanFactoryChannelResolver] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-12-09 09:36:26.215  INFO 35140 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'integrationDisposableAutoCreatedBeans' of type [org.springframework.integration.config.annotation.Disposables] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-12-09 09:36:26.421  INFO 35140 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-12-09 09:36:26.430  INFO 35140 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-12-09 09:36:26.430  INFO 35140 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.55]
2021-12-09 09:36:26.474  INFO 35140 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-12-09 09:36:26.474  INFO 35140 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 993 ms
2021-12-09 09:36:27.032  INFO 35140 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
2021-12-09 09:36:27.032  INFO 35140 --- [           main] o.s.i.channel.PublishSubscribeChannel    : Channel 'application.errorChannel' has 1 subscriber(s).
2021-12-09 09:36:27.033  INFO 35140 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : started bean '_org.springframework.integration.errorLogger'
2021-12-09 09:36:27.051  INFO 35140 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-12-09 09:36:27.060  INFO 35140 --- [           main] com.example.demo.Gh28897Application      : Started Gh28897Application in 1.955 seconds (JVM running for 2.264)

如果您看到不同的行为,那么我们似乎没有完全理解您所看到的问题。您能否提供一个完整但最小的示例来重现您所描述的行为,以便我们可以确保我们准确理解您的案例中发生的情况?

8

如果您希望我们查看此问题,请提供所需的信息。如果在接下来的 7 天内未提供信息,此问题将被关闭。

3

因此,我们添加了对指定平台的支持,并且选择退出初始化不会尝试解决任何问题。鉴于安迪上述的顺序,我认为这是我们能做的最好的事情。

在 2.6.2 中,添加以下属性应该可以防止这种情况发生:

spring.integration.jdbc.initialize-schema=never

如果您不想让门敞开,您可以指定平台:

spring.integration.jdbc.platform=sybase

我将继续解决这个问题,因为您已经提到解决方法没有帮助。您能帮我们找出我们错过了什么吗?

5

对于延迟回复表示歉意。当我们应用版本 2.6.0 或 2.6.1 的解决方法时,会出现此错误。我还没有尝试使用推荐的配置 2.6.2。

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

???????
|  messagingService (field private org.springframework.cloud.stream.function.StreamBridge <package path>.streamBridge)
?     ?
|  streamBridgeUtils defined in class path resource [org/springframework/cloud/stream/function/FunctionConfiguration.class]
?     ?
|  functionCatalog defined in class path resource [org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.class]
???????

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.
2

@evanjas77 这看起来像是 Spring Cloud Function 或 Spring Cloud Stream 的问题。您能否在https://github.com/spring-cloud/spring-cloud-stream/issues提出问题。与此同时,添加spring.main.allow-circular-references=true到您的内容是否application.properties可以让您继续?

8

因此,我们添加了对指定平台的支持,并且选择退出初始化不会尝试解决任何问题。鉴于安迪上述的顺序,我认为这是我们能做的最好的事情。

在 2.6.2 中,添加以下属性应该可以防止这种情况发生:

spring.integration.jdbc.initialize-schema=never

如果您不想让门敞开,您可以指定平台:

spring.integration.jdbc.platform=sybase

我将继续解决这个问题,因为您已经提到解决方法没有帮助。您能帮我们找出我们错过了什么吗?

因此,我们添加了对指定平台的支持,并且选择退出初始化不会尝试解决任何问题。鉴于安迪上述的顺序,我认为这是我们能做的最好的事情。

在 2.6.2 中,添加以下属性应该可以防止这种情况发生:

spring.integration.jdbc.initialize-schema=never

如果您不想让门敞开,您可以指定平台:

spring.integration.jdbc.platform=sybase

我将继续解决这个问题,因为您已经提到解决方法没有帮助。您能帮我们找出我们错过了什么吗?

你好,mvncentral 已经有 2.6.2 版本了吗?

6

main.allow-circular-references=true

此设置以及建议的解决方法有效。这是我所做的所有更改的列表

  • 用过的2.6.0</spring-boot.version>

  • 在应用程序 yaml spring 中添加了以下内容:main:allow-circular-references:true

  • 在 Spring Boot 应用程序类中添加了以下内容 @Bean public IntegrationDataSourceScriptDatabaseInitializer customIntegrationDataSourceInitializer(DataSource dataSource) { return new IntegrationDataSourceScriptDatabaseInitializer(dataSource, new DatabaseInitializationSettings()); }

4

@evanjas77 正如 Phil 所说,请提出 Spring Cloud Stream prioject 的问题,因为设置该属性只是一种解决方法。 Spring Boot 2.6.2 尚未发布,但您可以2.6.2-SNAPSHOT尝试一下。对于配置,请使用该版本和您正在使用的构建系统在 start.spring.io 上创建一个项目。

5

如果您希望我们查看此问题,请提供所需的信息。如果在接下来的 7 天内未提供信息,此问题将被关闭。

3

@evanjas77 正如 Phil 所说,请提出 Spring Cloud Stream prioject 的问题,因为设置该属性只是一种解决方法。 Spring Boot 2.6.2 尚未发布,但您可以2.6.2-SNAPSHOT尝试一下。对于配置,请使用该版本和您正在使用的构建系统在 start.spring.io 上创建一个项目。

你好,

我直接尝试了最新的2.6.2 spring boot版本。仍然看到同样的错误。请注意,我恢复了上面建议的解决方法。再次提到 2.4.5 版本可以工作,但 2.6.2 版本不行

2021-12-29 10:11:49.363  INFO 16024 --- [           main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-12-29 10:11:49.425 ERROR 16024 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'integrationDataSourceInitializer' defined in class path resource [org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration$IntegrationJdbcConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer]: Factory method 'integrationDataSourceInitializer' threw exception; nested exception is java.lang.IllegalStateException: Unable to detect database type
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[spring-context-5.3.14.jar!/:5.3.14]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) ~[spring-context-5.3.14.jar!/:5.3.14]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.14.jar!/:5.3.14]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) ~[spring-boot-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) ~[spring-boot-2.6.2.jar!/:2.6.2]
        at <internal class> ~[classes!/:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[internal.jar:na]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) ~[internal.jar:na]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[internal.jar:na]
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) ~[internal.jar:na]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer]: Factory method 'integrationDataSourceInitializer' threw exception; nested exception is java.lang.IllegalStateException: Unable to detect database type
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.14.jar!/:5.3.14]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.14.jar!/:5.3.14]
        ... 29 common frames omitted
Caused by: java.lang.IllegalStateException: Unable to detect database type
        at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.3.14.jar!/:5.3.14]
        at org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver.determinePlatform(PlatformPlaceholderDatabaseDriverResolver.java:132) ~[spring-boot-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver.lambda$resolveAll$0(PlatformPlaceholderDatabaseDriverResolver.java:96) ~[spring-boot-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver.resolveAll(PlatformPlaceholderDatabaseDriverResolver.java:121) ~[spring-boot-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver.resolveAll(PlatformPlaceholderDatabaseDriverResolver.java:96) ~[spring-boot-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer.resolveSchemaLocations(IntegrationDataSourceScriptDatabaseInitializer.java:83) ~[spring-boot-autoconfigure-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer.getSettings(IntegrationDataSourceScriptDatabaseInitializer.java:72) ~[spring-boot-autoconfigure-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.autoconfigure.integration.IntegrationDataSourceScriptDatabaseInitializer.<init>(IntegrationDataSourceScriptDatabaseInitializer.java:46) ~[spring-boot-autoconfigure-2.6.2.jar!/:2.6.2]
        at org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration$IntegrationJdbcConfiguration.integrationDataSourceInitializer(IntegrationAutoConfiguration.java:246) ~[spring-boot-autoconfigure-2.6.2.jar!/:2.6.2]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.14.jar!/:5.3.14]
        ... 30 common frames omitted
2

@evanjas77 看起来您希望能够将应用程序更新到 2.6.x,而无需更改任何代码。不幸的是,目前的情况并非如此。我已经分享了两个选项,用于避免 Spring Boot 尝试解析数据库平台。

正如安迪最初所说,我不确定我们还可以做很多其他事情,因此我请您尝试看看这是否适合您。我们添加了一项功能,仅当特定于平台的架构文件存在时才触发数据库初始化。为此,如果未指定平台,我们需要解析平台,除非已显式禁用初始化。这是一项新功能,意味着您必须指定平台,或者在您使用我们无法检测到的数据库时禁用初始化。

上面说的清楚了吗?

9

如果您希望我们查看此问题,请提供所需的信息。如果在接下来的 7 天内未提供信息,此问题将被关闭。

8

由于缺乏所需的反馈而关闭。如果您希望我们查看此问题,请提供所需的信息,我们将重新打开该问题。

2

你好,

我有同样的问题。使用 Spring Boot 2.6.1 + MySQL 我注意到我们有 2 个数据库 1 位于 Linux 上,第二位于 Windows Server 上 - 两者都具有非标准端口。当我连接到 Linux 机器时,我收到错误,但如果我连接 Windows Server 数据库,一切正常。

你能帮我吗?

9

@ikoko7我认为你没有同样的问题。此问题不适用于 MySQL,因为与 Sybase 不同,Spring Boot 的 DatabaseDriver 能够识别 MySQL 及其 JDBC URL 的形式。如果您需要帮助,请在 Stack Overflow 上提问或在 Gitter 上与社区聊天。正如贡献指南中提到的,我们更喜欢仅使用 GitHub 问题来解决错误和增强功能。

8

因此,我们添加了对指定平台的支持,并且选择退出初始化不会尝试解决任何问题。鉴于安迪上述的顺序,我认为这是我们能做的最好的事情。

在 2.6.2 中,添加以下属性应该可以防止这种情况发生:

spring.integration.jdbc.initialize-schema=never

如果您不想让门敞开,您可以指定平台:

spring.integration.jdbc.platform=sybase

我将继续解决这个问题,因为您已经提到解决方法没有帮助。您能帮我们找出我们错过了什么吗?

谢谢@snicoll 它对我有用。我面临着 Factory method 'batchDataSourceInitializer' threw exception; nested exception is java.lang.IllegalStateException: Unable to detect database type ,但添加 spring.batch.jdbc.initialize-schema=never解决了它。

0

嘿!在 QA 环境中部署期间,我在版本 2.6.8 中遇到了类似的问题。它不会在本地发生(并且属性之间的区别仅在于sslmodesslspring.datasource.url等一些参数,我在本地不使用这些参数)。

即使有像spring.jpa.hibernate.ddl-auto=none和 之类的属性spring.sql.init.mode=never,hibernate 似乎仍然在指向默认模式名称的位置寻找模式初始化脚本(schema.sql 和 data.sql)。

已解决:无论如何,通过创建 @wilkinsona的答案建议的 bean 解决了问题。

这是我之前遇到的异常(架构和用户名是“test_qa”):

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scriptDataSourceInitializer' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceInitializationConfiguration$SharedCredentialsDataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No schema scripts found at location 'test_qa'
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:745)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:420)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1317)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
    at br.com.my.example.Application.main(Application.java:10)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: java.lang.IllegalStateException: No schema scripts found at location 'test_qa'
    at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.getScripts(AbstractScriptDatabaseInitializer.java:128)
    at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:105)
    at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:97)
    at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:75)
    at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:65)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
... 26 common frames omitted
2

@franciscolimazup 这看起来像是一个不同的问题。此问题主要与使用 Sybase 时无法检测数据库类型有关。您的错误“在位置‘test_qa’找不到架构脚本”对我来说看起来像是一些配置错误。看起来,在您的 QA 环境中,某些东西已经配置了脚本的位置,这些脚本应该使用架构的名称来初始化数据库的架构。也许有一个环境变量或某些特定于配置文件的配置仅在您的 QA 环境中有效?您可以使用执行器的env端点来诊断这一点。

4

@wilkinsona是的,它看起来确实是一个不同的问题,因为异常和消息不同。但我认为核心问题可能是无法检测和设置应用程序属性文件指定的配置,因为我尝试设置几个属性(阅读并遵循文档)以防止 Hibernate 初始化数据库,但它没有做任何不同之处。

该文档表示,Hibernate 根据模式管理器检测以及数据库是否嵌入而采用不同的默认值,并且它会查看连接类型和 JDBC URL。由于 URL 是 QA 和本地配置属性之间的主要区别,我认为它可能会影响或覆盖某些配置。

这里还有许多其他项目在其 QA 和 Prod 环境中具有类似的属性,但在版本 2.3.x 中,它们不会出现此问题!假定的故障可能是数据库类型检测和模式脚本检测失败的原因。

尽管如此,我还是会仔细检查环境变量。

1

看来,当 db 不工作时也会引发此错误,例如,当 minikube (以及 k8s 中的 DB pod)未启动时。

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.batch.BatchDataSourceScriptDatabaseInitializer]: Factory method 'batchDataSourceInitializer' threw exception with message: Unable to detect database type
Caused by: java.lang.IllegalStateException: Unable to detect database type