当前位置: 首页 > 知识库问答 >
问题:

Spring批处理-未找到产品名[Informix Dynamic Server]的DatabaseType

廉高邈
2023-03-14
@Bean
public DataSource dataSource() throws SQLException {
   BasicDataSource dataSource = new BasicDataSource();
   dataSource.setDriverClassName(dataSourceProperties.getDriverClassName());
    dataSource.setUrl(dataSourceProperties.getDbUrl());
    dataSource.setUsername(dataSourceProperties.getDbUsername());
    dataSource.setPassword(dataSourceProperties.getDbPassword())
    return dataSource;
}


@Bean
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource){

    DataSourceTransactionManager manager=new DataSourceTransactionManager(dataSource);
    return manager;
}

@Bean
public JobRepositoryFactoryBean jobRepositoryFactoryBean( DataSourceTransactionManager txManager,DataSource dataSource ) throws Exception{

    JobRepositoryFactoryBean job=new JobRepositoryFactoryBean();
    job.setDataSource(dataSource);
    job.setDatabaseType("oracle");
    job.setTransactionManager(txManager);
    job.afterPropertiesSet();
    return job;
}


@Bean
public ItemReader<Person> reader() {
    FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>();
    reader.setResource(new ClassPathResource("sample-data.csv"));
    reader.setLineMapper(new DefaultLineMapper<Person>() {{
        setLineTokenizer(new DelimitedLineTokenizer() {{
            setNames(new String[] { "firstName", "lastName" });
        }});
        setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
            setTargetType(Person.class);
        }});
    }});
    return reader;
}

@Bean
public ItemProcessor<Person, Person> processor() {
    return new PersonItemProcessor();
}

@Bean
public ItemWriter<Person> writer(DataSource dataSource) {
    JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<Person>();
    writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<Person>());
    writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
    writer.setDataSource(dataSource);
    writer.afterPropertiesSet();
    return writer;
}

@Bean
public Job importUserJob(JobBuilderFactory jobs, Step s1, JobExecutionListener listener,JobRepositoryFactoryBean jobRepositoryFactoryBean) throws Exception {


    return jobs.get("importUserJob")
             .repository(jobRepositoryFactoryBean.getObject())
            .incrementer(new RunIdIncrementer())
            .listener(listener)
            .flow(s1)
            .end()
            .build();
}

@Bean
public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<Person> reader,
        ItemWriter<Person> writer, ItemProcessor<Person, Person> processor) {
    return stepBuilderFactory.get("step1")
            .<Person, Person> chunk(10)
            .reader(reader)
            .processor(processor)
            .writer(writer)
            .build();
}

原因:java.lang.IllegalArgumentException:未找到产品名称[Informix Dynamic Server]的DatabaseType.FromProductName(DatabaseType.java:79)的Org.SpringFramework.Botch.Support.DatabaseType.FromMetadata(DatabaseType.java:110)的Org.SpringFramework.Boot.AutoConfigure.Batch.BatchDatabaseInitializer.GetDatabaseType(BatchDatabaseInitializer.71)的ns.factory.annotation.InitDestroyNotationBeanPostProcessor.java$LifeCycleMetadata.InvokeInitMethods(InitDestroyNotationBeanPostProcessor.java:300)位于org.springframework.beans.factory.annotation.InitroyNotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyNotationBeanPostProcessor.java:133)

共有1个答案

鲁博赡
2023-03-14

Spring批处理似乎并不直接支持Informix。

org.springframework.batch.support.databaseType:

DERBY("Apache Derby"), 
DB2("DB2"), 
DB2ZOS("DB2ZOS"), 
HSQL("HSQL Database Engine"),
SQLSERVER("Microsoft SQL Server"),
MYSQL("MySQL"),
ORACLE("Oracle"),
POSTGRES("PostgreSQL"),
SYBASE("Sybase"), H2("H2");

但是,正如这里所说的:http://forum.spring.io/forum/spring-projects/batch/61097-why-spring-batch-dost-t-support-informix-database,似乎您可以将数据库类型设置为Oracle并且它将支持Informix。

 类似资料:
  • 我想用Spring boot实现Spring批处理,因为我们使用的是informix数据库,所以当我的Spring boot应用程序启动时,我遇到了以下异常。 配置: 例外 原因:java。lang.IllegalArgumentException:在组织中找不到产品名称:[Informix动态服务器]的DatabaseType。springframework。一批支持数据库类型。位于org的fr

  • 我有一个简单的Spring启动应用程序,它带有一个enpoint,通过JobLauncher bean中配置的SimpleAsynctaskeExecutor异步调用Spring批处理作业。 Spring批处理作业异步启动,工作正常,但没有任何内容保存到数据库中。 如果我删除SimpleAsyncTaskExecutor,数据就会保存。 这是我的批处理配置程序。我用SimpleAsyncTaskE

  • 在尝试设置Spring Boot-Spring批处理项目时,我遇到了一个错误,说明: 完整堆栈跟踪如下: 我的属性设置如下: 你知道为什么会这样吗?

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 我有一个compositeItemWriter,它有2个代理编写器:1。HeaderWriter将一些字段从我的对象写入头表2。DetailWriter将文件写入详细表。 context.xml:

  • 在尝试设置Spring Boot-Spring批处理项目时,我遇到了一个错误,说明: 我已经检查了spring batch支持的数据库,但Tibero不在列表中。 有没有其他方法可以让Tibero DB。。。 请参阅以下错误日志。