Spring Boot 2(Spring 批处理应用程序)无法启动。失败并出现 BeanCreation异常:创建名称为 'h2Console' 的 Bean 时出错



我正在尝试运行一个Spring Batch应用程序,该应用程序从SQL Server数据库读取数据并写入csv文件。以下是SQL Server数据库的数据库配置文件:-

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = {"com.sample.repository"},
entityManagerFactoryRef = "sampleEntityManagerFactory",
transactionManagerRef = "transManager"
)
public class CompensationConfiguration
{
@Primary
@Bean(name="cmpnDS")
@ConfigurationProperties(prefix = "sample.datasource.compensation")
public DataSource sampleDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "sampleEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean sampleEntityManagerFactory(EntityManagerFactoryBuilder builder,
     @Qualifier("cmpnDS") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.opencodez.entity")
.build();
}
@Primary
@Bean(name = "transManager")
public PlatformTransactionManager hrprdTransactionManager(@Qualifier("sampleEntityManagerFactory")
EntityManagerFactory entityManagerFactoryBean) {
return new JpaTransactionManager(entityManagerFactoryBean);
}
}

以下是pom文件中的一个片段:-

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>mybat</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mybat</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven-jar-plugin.version>2.6</maven-jar-plugin.version>
<spring-cloud.version>Hoxton.RC2</spring-cloud.version>
</properties>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>

以及属性文件中的以下内容:-

spring:
datasource:
url: jdbc:h2:mem:testdb
username: sa
password:
driver-class-name: org.h2.Driver

当我尝试启动应用程序时,它无法启动,出现以下错误:-

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'h2Console' defined in class path resource [org/springframework/boot/autoconfigure/h2/H2ConsoleAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.web.servlet.ServletRegistrationBean]: Factory method 'h2Console' threw exception; nested exception is java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.

此应用程序读取SQL Server数据库以处理记录。spring批处理使用内存中的DB H2Database。这是一个多数据源场景吗?我没有为H2的数据源配置做任何编码,因为它应该是自动配置的。我在pom-sprign批处理核心、devtools、h2数据库、jpa等中都包含了所有必需的依赖项。

我通过设置解决了这个问题

spring.h2.console.enabled=false

在我的spring-bootapplication.properties文件中。

该属性的文档表示,您可以通过删除spring boot devtools的pom依赖项来消除此问题(此处详细介绍(。

您必须在.m2maven本地存储库中删除h2的相关jar文件,它必须已损坏。

在那之后,你必须再次运行"mvn-spring-boot:run",也许不止一个罐子被破坏了,所以请检查它并获取配方(每次你需要在删除那个罐子后运行该命令(。

我创建了两个数据源配置类,每个数据库一个,并将h2数据源标记为主数据源。此更改后应用程序启动良好。

最新更新