To use the default BatchConfigurer the context must contain no more thanone DataSource, found 2

来源:互联网 发布:淘宝的手办店 编辑:程序博客网 时间:2024/05/06 06:49

1、问题背景:

项目中用@Configuration配置了两个DataSource数据源Bean。

两个dataSource也分别指定了name,并用@Primary标注了其中一个数据源,代码如下:

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.core.env.Environment;import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;@Configurationpublic class SourceConfiguration {    @Autowired    private Environment env;    @Primary    @Bean(name = "originalDataSource")    public DataSource originalDataSource() {        return DataSourceBuilder.create()                .url(env.getProperty("original.datasource.url"))                .driverClassName(env.getProperty("original.datasource.driverClassName"))                .username(env.getProperty("original.datasource.username"))                .password(env.getProperty("original.datasource.password"))                .build();    }    @Bean(name = "destDataSource")    public DataSource destDataSource() {        return DataSourceBuilder.create()                .url(env.getProperty("dest.datasource.url"))                .driverClassName(env.getProperty("dest.datasource.driverClassName"))                .username(env.getProperty("dest.datasource.username"))                .password(env.getProperty("dest.datasource.password"))                .build();    }    @Bean    public JdbcTemplate originalJdbcTemplate() {        return new JdbcTemplate(originalDataSource());    }    @Bean    public JdbcTemplate destJdbcTemplate() {        return new JdbcTemplate(destDataSource());    }}
2、报错信息:

程序执行时出现报错:Caused by: java.lang.IllegalStateException: To use the default BatchConfigurer the context must contain no more thanone DataSource, found 2

3、问题解决:

新增如下BatchConfigurer的Bean,返回DefaultBatchConfigurer(dataSource)对象,则程序运行正常

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.core.env.Environment;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer;import org.springframework.batch.core.configuration.annotation.BatchConfigurer;import javax.sql.DataSource;@Configurationpublic class SourceConfiguration {    @Autowired    private Environment env;    @Primary    @Bean(name = "originalDataSource")    public DataSource originalDataSource() {        return DataSourceBuilder.create()                .url(env.getProperty("original.datasource.url"))                .driverClassName(env.getProperty("original.datasource.driverClassName"))                .username(env.getProperty("original.datasource.username"))                .password(env.getProperty("original.datasource.password"))                .build();    }    @Bean(name = "destDataSource")    public DataSource destDataSource() {        return DataSourceBuilder.create()                .url(env.getProperty("dest.datasource.url"))                .driverClassName(env.getProperty("dest.datasource.driverClassName"))                .username(env.getProperty("dest.datasource.username"))                .password(env.getProperty("dest.datasource.password"))                .build();    }    @Bean    public JdbcTemplate originalJdbcTemplate() {        return new JdbcTemplate(originalDataSource());    }    @Bean    public JdbcTemplate destJdbcTemplate() {        return new JdbcTemplate(destDataSource());    }    @Bean    BatchConfigurer configurer(DataSource dataSource) {        return new DefaultBatchConfigurer(dataSource);    }}



0 0
原创粉丝点击