Как настроить несколько каталогов / баз данных на сервере sql, которые находятся на одном сервере баз данных в весенней загрузке приложения Java 8? - PullRequest
1 голос
/ 08 ноября 2019

В нашем приложении мы используем spring boot AND sqljdbc4.jar. Нам нужно подключиться к разным базам данных (каталогам) внутри одной схемы (это означает, что они находятся в одном экземпляре сервера SQL). Поэтому нам нужно настроить источник данных таким образом, чтобы он мог подключаться к нескольким базам данных и выполнять операции с базами данных без проблем. Но при попытке подключения выдает

недопустимый объект table_name найдена ошибка. // У меня нет полной трассировки стека, но основная ошибка, как указано выше, неверная ошибка объекта.

Итак, мы настроили два источника данных, а исходный код выглядит так:

Структура проекта:

src/main/java
- com.foobar
  - foo
    - domain
    - repo
  - bar
    - domain
    - repo
spring.datasource.jdbc-url=jdbc:jdbc:microsoft:sqlserver://HOST:1433;it_foo ```(important note: it_foo will be replaced with qa_foo in different environment which will be managed by profiles)
spring.datasource.username=fooadmin
spring.datasource.password=foo123
spring.datasource.driver-class-name=com.microsoft.jdbc.sqlserver.SQLServerDriver



bar.datasource.jdbc-url=jdbc:jdbc:microsoft:sqlserver://HOST:1433;it_bar(important note: it_foo will be replaced with qa_foo in different environment which will be managed by profiles)
bar.datasource.username=baradmin
bar.datasource.password=bar123
bar.datasource.driver-class-name=com.microsoft.jdbc.sqlserver.SQLServerDriver

Конфигурация источника данных для базы данных foo

package com.foobar;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
  entityManagerFactoryRef = "entityManagerFactory",
  basePackages = { "com.foobar.foo.repo" }
)
public class FooDbConfig {

  @Primary
  @Bean(name = "dataSource")
  @ConfigurationProperties(prefix = "spring.datasource")
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

  @Primary
  @Bean(name = "entityManagerFactory")
  public LocalContainerEntityManagerFactoryBean 
  entityManagerFactory(
    EntityManagerFactoryBuilder builder,
    @Qualifier("dataSource") DataSource dataSource
  ) {
    return builder
      .dataSource(dataSource)
      .packages("com.foobar.foo.domain")
      .persistenceUnit("foo")
      .build();
  }

  @Primary
  @Bean(name = "transactionManager")
  public PlatformTransactionManager transactionManager(
    @Qualifier("entityManagerFactory") EntityManagerFactory 
    entityManagerFactory
  ) {
    return new JpaTransactionManager(entityManagerFactory);
  }
}

Конфигурация источника данных для бара

med “BarDbConfig.java”
package com.foobar;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
  entityManagerFactoryRef = "barEntityManagerFactory",
  transactionManagerRef = "barTransactionManager",
  basePackages = { "com.foobar.bar.repo" }
)
public class BarDbConfig {

  @Bean(name = "barDataSource")
  @ConfigurationProperties(prefix = "bar.datasource")
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "barEntityManagerFactory")
  public LocalContainerEntityManagerFactoryBean 
  barEntityManagerFactory(
    EntityManagerFactoryBuilder builder,
    @Qualifier("barDataSource") DataSource dataSource
  ) {
    return
      builder
        .dataSource(dataSource)
        .packages("com.foobar.bar.domain")
        .persistenceUnit("bar")
        .build();
  }
  @Bean(name = "barTransactionManager")
  public PlatformTransactionManager barTransactionManager(
    @Qualifier("barEntityManagerFactory") EntityManagerFactory
    barEntityManagerFactory
  ) {
    return new JpaTransactionManager(barEntityManagerFactory);
  }
} 

и общий код такой же, как и в этой ссылке: https://medium.com/@joeclever/using-multiple-datasources-with-spring-boot-and-spring-data-6430b00c02e7

Я также шел по этим ссылкам: Как настроить загрузку Spring для работы с двумя базами данных?

Spring boot connect с несколькими схемами в mysql

Я следовал многим учебным пособиям, чтобы найти оптимальное решение, и прошел через различные публикации по переполнению стека, но ни у одного нет подходящего решения

Короче говоря, мне нужно выполнить эти требования.

Чтобы найти оптимальное решение для этой проблемы, поэтому, если нам нужно сконфигурировать больше баз данных или схем, текущий код вообще не должен влиять.

Он должен работать для разных профилей / сред с разными именами баз данных.

РЕДАКТИРОВАТЬ: С помощью приведенного выше кода он работает нормально, но поскольку базы данных находятся в одном экземпляре сервера баз данных, есть лидругое оптимальное решение, например, настройка только одного источника данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...