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

Spring Batch“无效的对象名BATCH_JOB_INSTANSE”

花俊雄
2023-03-14
    null
@Configuration
public class SpringBatchConfig extends DefaultBatchConfigurer{

@Override
    public void setDataSource(DataSource datasource) {

    }
...

我的application.properties文件如下所示:

spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

spring-batch-initialize-schema=never
spring.batch.job.enabled=false

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect

共有1个答案

解宏扬
2023-03-14

我用两个数据源创建了一个演示。批处理元数据将存储在H2数据库中,作业数据源是Azure SQL。

下面是项目结构:

  1. 我们需要定义一个DataSourceConfig类,并为DataSource bean使用@primary注释:
@Configuration
public class DataSourceConfig {

    @Bean(name = "mssqlDataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource appDataSource(){
        return DataSourceBuilder.create().build();
    }
    
    @Bean(name = "h2DataSource")
    @Primary
    // @ConfigurationProperties(prefix="spring.datasource.h2")
    public DataSource h2DataSource() {
        return DataSourceBuilder.create()
                .url("jdbc:h2:mem:thing:H2;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE")
                .driverClassName("org.h2.Driver")
                .username("sa")
                .password("")                   
                .build();
    }
    
}
@Configuration
public class ItemReaderDbDemo {
    
    //generate task Object
    @Autowired
    private JobBuilderFactory jobBuilderFactory;
    
    //Step exec tasks
    //generate step Object
    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    @Qualifier("mssqlDataSource")
    private DataSource dataSource;

    @Autowired
    @Qualifier("dbJdbcWriter")
    private ItemWriter<? super Todo> dbJdbcWriter;
    
    @Bean
    public Job itemReaderDbDemoJob() {
        return jobBuilderFactory.get("itemReaderDbDemoJob").start(itemReaderDbStep()).build();
    }

    @Bean
    public Step itemReaderDbStep() {
        return stepBuilderFactory.get("itemReaderDbStep")
                .<Todo,Todo>chunk(2)
                .reader(dbJdbcReader())
                .writer(dbJdbcWriter)
                .build();
    }

    @Bean
    @StepScope
    public JdbcPagingItemReader<Todo> dbJdbcReader() {
        JdbcPagingItemReader<Todo> reader = new JdbcPagingItemReader<Todo>();
        reader.setDataSource(dataSource);
        reader.setFetchSize(2);
        reader.setRowMapper(new  RowMapper<Todo>() {
            @Override
            public Todo mapRow(ResultSet rs, int rowNum) throws SQLException {
                Todo todo = new Todo();
                todo.setId(rs.getLong(1));
                todo.setDescription(rs.getString(2));
                todo.setDetails(rs.getString(3));
                return todo;
            }   
            
        });
        SqlServerPagingQueryProvider provider = new  SqlServerPagingQueryProvider();
        provider.setSelectClause("id,description,details");
        provider.setFromClause("from dbo.todo");
        
        //sort
        Map<String,Order> sort = new HashMap<>(1);
        sort.put("id", Order.DESCENDING);
        provider.setSortKeys(sort);
        
        reader.setQueryProvider(provider);
        return reader;
    }
}

logging.level.org.springframework.jdbc.core=DEBUG

spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.jdbcUrl=jdbc:sqlserver://josephserver2.database.windows.net:1433;database=<Your-Database-Name>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
spring.datasource.username=<Your-UserName>
spring.datasource.password=<Your-Password>
spring.datasource.initialization-mode=always
 类似资料:
  • 问题内容: 在SQL Server 2016中,我收到带有STRING_SPLIT函数的错误 错误: 无效的对象名称“ STRING_SPLIT”。 问题答案: 确保数据库兼容性级别为 130 您可以使用以下查询对其进行更改:

  • 我创建了一个spring批处理来查询Azure SQL server数据库并将数据写入CSV文件。我没有数据库的权限。运行批处理时,我得到以下错误。我不希望在主数据库中创建spring批处理元数据表。或者,如果我可以将它们放在另一个本地或内存中的db中,比如h2db,也会很有帮助。我还添加了,这里的大多数类似问题的答案都是这样的,但这没有帮助。 编辑: 我通过扩展类并重写方法,从而在内存映射存储库

  • 用例:步骤1:ItemReader:从数据库中读取1000个ItemProcessor块中的数据:处理这些数据。ItemWriter:将数据写入地图,以便下一步使用 步骤2:ItemReader:读取地图ItemProcessor:处理地图数据并获取新对象。ItemWriter:将新的进程对象持久化到数据库中。 现在我希望Map在整个作业中保持不变,目前我已经为Map创建了一个不同的POJO类,并

  • 我正在学习一门在线课程,当我试图运行我的服务器时,我遇到了这个错误,但我不知道为什么: /applications/xampp/xamppfiles/htdocs/projects/distdesign/node_modules/webpack/lib/webpack.js:19抛出新的WebpackOptionsValidationError(WebpackOptionsValidationEr

  • 问题内容: 我正在尝试找出对javascript对象的属性名称有效的内容。例如 b [‘-^ colour’]无效,但在所有浏览器中都存在古怪的现象,我不应该相信它会继续向前发展 b [‘-^ colour’]是完全有效的,但它的形式只能以这种方式访问​​-(受支持,所以对象也许可以用作地图?) 还有别的 顺便说一句,在javascript中,全局变量可能在顶层声明为 但也可以(据我所知)与 以下

  • 问题内容: 请帮我。我不知道为什么这段代码不起作用。 它给我一个错误:“对象作为React子对象无效(找到:带有键{itemss}的对象)。如果要渲染子对象的集合,请改用数组。” 为什么{i.title}是对象。这只是一个字符串。我怎样才能解决这个问题?以及实际上如何迭代嵌套对象? 问题答案: 问题是因为你回来了 这是的等效即 您将返回具有键和的对象。你可以写 要么 要么 PS请注意,前两种方法将