spring boot 2(spring批处理应用程序)无法启动失败,beancreationexception:创建名为“h2console”的bean时出错

z9smfwbn  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(661)

我正在尝试运行一个spring批处理应用程序,它从sqlserverdb读取数据并写入csv文件。下面是sql server db的数据库配置文件:-

@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的一个片段file:-

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

以及以下属性file:-

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

当我尝试启动应用程序时,它无法从以下内容开始error:-

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批处理使用内存数据库。这是一个多数据源场景吗?我没有为h2的数据源配置做任何编码,因为它应该是自动配置的。我拥有pom-sprign批处理核心、devtools、h2数据库、jpa等中包含的所有必需依赖项。

7fyelxc5

7fyelxc51#

您必须在.m2 maven本地存储库中删除h2的相关jar文件,它必须已损坏。
之后,您必须运行“mvn spring”-boot:run“再说一次,可能不止一个jar被损坏了,所以检查它并重新获取配方(每次需要在删除jar之后运行该命令时)。

nbysray5

nbysray52#

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

z31licg0

z31licg03#

我通过设置

spring.h2.console.enabled=false

在我的spring boot application.properties文件中。
该属性的文档说,您可以通过删除springbootdevtools的pom依赖项来摆脱这个问题(这里详细介绍)。

相关问题