2013-06-13 1 views
2

Я пытаюсь получить Spring Batch 2.2, работающий с JavaConfig.Весенняя партия 2.2 JavaConfig

В настоящее время у них есть аннотация @EnableBatchProcessing, которая устанавливает множество вещей. По умолчанию в аннотации используется источник данных для данных задания, но мы не хотим сохранять эти данные и не хотим создавать таблицу для него. В документации сказано что-то о настройке, но я не смог заставить его работать:

  • пользователь должен предоставить DataSource как бина в контексте, или же реализовать BatchConfigurer в самом классе конфигурации, например:

public class AppConfig extends DefaultBatchConfigurer {

в нашей старой версии мы смогли использовать MapJobRepositoryFactoryBean класс так, чтобы он хранит все свои данные в памяти. Нужно ли использовать полный способ JavaConfig и не определять DataSource? Я не смог заставить его работать.

Даже если я определяю два источника данных (один HSQL в памяти, который никогда не используется), а наш реальный источник данных Oracle не работает, потому что он находит два источника данных, а не один.

У кого-нибудь есть идея, как заставить это работать? Или это единственное решение, возвращающееся к настройке этого в XML-способе?

ответ

6

Предполагая, что никакие другие артефакты не требуют DataSource, вы можете использовать java config для создания контекста без DataSource. Чтобы сделать это, ваша конфигурация должна будет расширить функцию DefaultBatchConfigurer, как вы указываете. Там вы переопределите два метода: createJobRepository() и setDataSource(). Ниже приведен пример контекста (он не определяет задание или шаги, но он правильно загружает все связанные бобы).

@Configuration 
@EnableBatchProcessing 
public static class BatchConfiguration extends DefaultBatchConfigurer { 

    @Override 
    protected JobRepository createJobRepository() throws Exception { 
     MapJobRepositoryFactoryBean factory = 
      new MapJobRepositoryFactoryBean(); 
     factory.afterPropertiesSet(); 
     return (JobRepository) factory.getObject(); 
    } 

    @Override 
    @Autowired 
    public void setDataSource(DataSource dataSource) { 
     if(dataSource != null) { 
      super.setDataSource(dataSource); 
     } 
    } 

    @Bean 
    public DataSource dataSource() { 
     return null; 
    } 
} 

Я действительно думаю, что упрощение этого было бы полезной функцией и добавило его в Jira. Вы можете отслеживать его прогресс здесь: https://jira.springsource.org/browse/BATCH-2048

+0

В нашем случае проблема в том, что нам нужен другой источник данных для нашей бизнес-логики. Как уже упоминалось в вопросе, если вы сделаете это, будет выбрано исключение, потому что есть два найденных источника данных. –

+0

Просто для подтверждения ... вы ищете javaconfig с двумя источниками данных и с помощью репозитория задания карты, правильно? –

+0

То, что мы пытались сделать, это использовать наш источник данных для бизнес-логики и использовать встроенный репозиторий для самой весенней партии. Это было слишком много хлопот, поэтому мы пошли с XML-способом для самой конфигурации задания. Спасибо за ваш ответ, хотя! –

-1

Просто определить метод DataSource() в BatchConfig класса Вот как

@Bean 
public DataSource dataSource() { 
    BasicDataSource dataSource = new BasicDataSource(); 
    dataSource.setDriverClassName(driverClassName); 
    dataSource.setUrl(driverUrl); 
    dataSource.setUsername(driverUsername); 
    dataSource.setPassword(driverPassword); 
    return dataSource; 
} 

Это будет автоматически вызываться при настройке TransactionManager