小编ama*_*der的帖子

如何java为Spring批量数据和业务数据配置单独的数据源?我应该这样做吗?

我的主要工作只是读取操作而另一个人写了一些但MyISAM engine忽略了事务,所以我不需要事务支持.如何配置Spring Batch拥有自己的数据源JobRepository,与持有业务数据的数据源分开?最初的一个数据源配置如下所示:

@Configuration
public class StandaloneInfrastructureConfiguration {

    @Autowired
    Environment env;

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
      LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
      em.setDataSource(dataSource());
      em.setPackagesToScan(new String[] { "org.podcastpedia.batch.*" });

      JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
      em.setJpaVendorAdapter(vendorAdapter);
      em.setJpaProperties(additionalJpaProperties());

      return em;
    }

    Properties additionalJpaProperties() {
          Properties properties = new Properties();
          properties.setProperty("hibernate.hbm2ddl.auto", "none");
          properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
          properties.setProperty("hibernate.show_sql", "true");

          return properties;
    }

    @Bean
    public DataSource dataSource(){

       return DataSourceBuilder.create()
                .url(env.getProperty("db.url"))
                .driverClassName(env.getProperty("db.driver"))
                .username(env.getProperty("db.username"))
                .password(env.getProperty("db.password"))
                .build();          
    }

    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
      JpaTransactionManager transactionManager = …
Run Code Online (Sandbox Code Playgroud)

spring spring-batch spring-boot spring-java-config

27
推荐指数
6
解决办法
5万
查看次数

如何根据应用程序参数选择要运行的Spring批处理作业 - spring boot java config

我在同一个项目中有两个独立的弹簧批处理作业,因为我想使用相同的基础结构相关的bean.一切都是用Java配置的.我想知道是否有一种正确的方法来启动独立的作业,例如在main方法中的第一个java app参数上.如果我SpringApplication.run只运行第二个作业就会被魔术执行.主要方法如下:

@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {                
        SpringApplication app = new SpringApplication(Application.class);
        app.setWebEnvironment(false);
        ApplicationContext ctx= app.run(args);              
    }

}
Run Code Online (Sandbox Code Playgroud)

并且这两个作业的配置如Spring.io上的Spring Batch入​​门教程中所示.这是第一个作业的配置文件,第二个作业以相同的方式配置.

@Configuration
@EnableBatchProcessing
@Import({StandaloneInfrastructureConfiguration.class, ServicesConfiguration.class})
public class AddPodcastJobConfiguration {

    @Autowired
    private JobBuilderFactory jobs;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;
    //reader, writer, processor...

}
Run Code Online (Sandbox Code Playgroud)

为了启用模块化,我创建了一个AppConfig类,在这里我为两个作业定义了工厂:

@Configuration
@EnableBatchProcessing(modular=true)
public class AppConfig {

    @Bean
    public ApplicationContextFactory addNewPodcastJobs(){
        return new GenericApplicationContextFactory(AddPodcastJobConfiguration.class);
    }

    @Bean
    public ApplicationContextFactory newEpisodesNotificationJobs(){
        return new GenericApplicationContextFactory(NotifySubscribersJobConfiguration.class);
    }    

}
Run Code Online (Sandbox Code Playgroud)

PS我是Java配置Spring Boot和Spring Batch中的Spring配置新手...

spring spring-batch spring-boot spring-java-config

10
推荐指数
2
解决办法
2万
查看次数