首页 > 解决方案 > Spring 批处理元数据表未在我配置的模式中创建

问题描述

我正在为我的批处理作业配置具有现有数据源和 LocalContainerEntityManagerFactoryBean 的 JpaTransactionManager。当我调试时,JpaTransactionManager 设置了我想要元数据表应该去的模式“dbs”。但实际上,元数据表是在“公共”模式中创建的。我正在使用的数据库是'postgress'

我尝试扩展 DefaultBatchConfigurer 和所有可能的方法,结果仍然相同

这是我的 application.yml 文件:

spring:
  datasource:
    url: ${DB_URL:jdbc:postgresql://127.0.0.1:5432/postgres}
    username: ${DB_USER_NAME:postgres}
    password: ${DB_PASSWORD:******}
    driver-class-name: org.postgresql.Driver
  jpa:
    show-sql: false
    properties:
      hibernate:
        format_sql: false
        generate_statistics: true
        dialect: org.hibernate.dialect.PostgreSQLDialect
        default_schema: dbs
    hibernate:
      ddl-auto: none
  batch:
    job:
      enabled: false
    initializer:
      enabled: true

批处理配置文件如下所示:

public class StatusBatchConfig extends DefaultBatchConfigurer {

    @Autowired
    private DataSource dataSource;

    @Override
    @Bean
    @Primary
    protected JobRepository createJobRepository() throws Exception {
        JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
        factory.setDataSource(dataSource);
        factory.setTransactionManager(transactionManager());
        factory.afterPropertiesSet();
        return factory.getObject();
    }

    @Bean
    @Primary
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setDataSource(dataSource);
        transactionManager.setEntityManagerFactory(entityManagerFactory.getObject());
        String schema = (String) entityManagerFactory.getObject().getProperties().get("hibernate.default_schema");
        System.out.println(schema); //prints 'dbs'
        return transactionManager;
    }



    @Bean
    public SimpleJobLauncher jobLauncher(JobRepository jobRepository) {
        SimpleJobLauncher launcher = new SimpleJobLauncher();
        try {
            launcher.setJobRepository(createJobRepository());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return launcher;
    }

}

还有什么要在这里配置以将元数据表保存在“dbs”模式中

标签: javaspringspring-batch

解决方案


推荐阅读