Невозможно создать свои таблицы Spring Batch в другой схеме в Postgres - PullRequest
0 голосов
/ 06 августа 2020

У меня есть приложение Spring Boot, которое использует Hibernate и Spring Batch. Я использую PostgresSQL для своей серверной базы данных.

В моем проекте настроено 2 разных источника данных. Один для Hibernate и один для Spring Batch. Они оба находятся в одной базе данных , но в разных схемах.

Моя строка подключения к пакетной версии Spring следующая:

spring.batch.datasource.url=jdbc:postgresql://localhost:5432/mytestapp?currentSchema=springbatch 

У меня есть источник данных, настроенный следующим образом способ:

@Bean("b_ds_prop")
    @ConfigurationProperties("spring.batch.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean("b_ds")
    @DependsOn({"b_ds_prop"})
    public DataSource batchFrameworkDatasource(DataSourceProperties dataSourceProperties) {
        System.out.println("start print");
//      dataSourceProperties.getSchema().stream().forEach(System.out::println);
//      System.out.println("datasrcprop is null : " + (dataSourceProperties==null));
//      System.out.println("datasrcprop.schema is null : " + (dataSourceProperties.getSchema()==null));
        System.out.println("end print");
//      dataSourceProperties.setSchema(Arrays.asList("spring_batch"));
        return dataSourceProperties.initializeDataSourceBuilder().build();
    }
    
    @Bean
    @DependsOn({"b_ds"})
    public BatchConfigurer defaultBatchConfigurer(@Qualifier("b_ds") DataSource dataSource) {
        return new DefaultBatchConfigurer(dataSource);
    }

Параметр currentSchema=springbatch не соблюдается, что бы я ни делал. Все мои таблицы Spring Batch продолжают заканчиваться в public в Postgres.

Схема с именем springbatch уже присутствует в моей базе данных: mytestapp.

Я пробовал currentSchema=springbatch, public, я даже пробовал spring.batch.table-prefix=springbatch..

I пробовал все, , но все же я не могу понять, почему мои пакетные таблицы продолжают заканчиваться в схеме public.

Обратите внимание, что у меня есть другая строка подключения в моем проекте, например:

spring.hib.datasource.url=jdbc:postgresql://localhost:5432/mytestapp

Я также попытался программно проверить, какое значение имеет schema i n DataSourceProperties.

System.out.println("datasrcprop.schema is null : " + (dataSourceProperties.getSchema()==null));

Это оценивается как истина.

Как я могу настроить другую схему для Spring Batch?

Любая помощь была бы замечательной.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

По умолчанию Spring boot автоматически создает таблицы метаданных пакета Spring при запуске. Он выполняет сценарий по умолчанию, который находится в пакете org.springframework.batch.core. В вашей ситуации это сценарий schema-postgresql.sql. Этот скрипт создает таблицы в схеме postgre по умолчанию, поэтому public, если ничего не указано (и поскольку мы не знаем, какой источник данных Spring Boot использует для создания таблиц метаданных Spring Batch, мы не знаем, какова схема по умолчанию) .

При выполнении сценария создания весенняя загрузка не учитывает свойство spring.batch.table-prefix, которое используется только для указания пакета Spring, в котором находятся таблицы метаданных.

Если вы хотите управлять этой весной с функцией загрузки, вам следует:

  • изменить сценарий создания (добавить схему springbatch) и указать Spring boot путь для измененного сценария (свойство spring.batch.schema)

OR

  • создайте сами таблицы метаданных пакета Spring перед запуском приложения и отключите автоматическое создание весенней загрузки (свойство spring.batch.initialize-schema=never)

Удачи

0 голосов
/ 06 августа 2020

Вы пробовали эту конфигурацию:

spring.datasource.url=jdbc:postgresql://localhost:5432/mytestapp

#spring batch properties
spring.batch.job.enabled=false
spring.batch.initializer.enabled=false
spring.batch.initialize-schema=never
spring.batch.table-prefix=springbatch.
...