Spring Boot アプリケーションで複数のデータソースを使用するように Spring Data JPA を構成するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-25 04:46:30
オリジナル
103 人が閲覧しました

How do you configure Spring Data JPA to use multiple data sources in a Spring Boot application?

Spring Boot、複数のデータソースを備えた Spring Data JPA

Spring Boot では、複数のデータ ソースを使用すると、異なるリポジトリを別々のデータ ソースに接続できます。 。これを実現するには、アノテーションと構成を使用して、各リポジトリのデータ ソースとトランザクション マネージャーを指定します。

Configuration

CustomerDataSourceConfiguration.java (最初のデータ ソース)

<code class="java">@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "customerEntityManager",
        transactionManagerRef = "customerTransactionManager",
        basePackages = {"com.mm.repository.customer"})
public class CustomerDataSourceConfiguration {

    @Bean(name = "customerDataSource")
    public DataSource dataSource() {
        return DataSourceBuilder.create()
                .url("jdbc:h2:mem:customer:H2")
                .driverClassName("org.h2.Driver")
                .username("sa")
                .password("")
                .build();
    }

    @Bean(name = "customerEntityManager")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setPackagesToScan(new String[] {"com.mm.domain.customer"});

        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(additionalJpaProperties());
        em.setPersistenceUnitName("customerPersistence");
        em.setPackagesToScan("com.mm.domain.customer");

        return em;
    }

    Properties additionalJpaProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
        properties.setProperty("hibernate.show_sql", "true");

        return properties;
    }

    @Bean(name = "customerTransactionManager")
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);

        return transactionManager;
    }
}</code>
ログイン後にコピー

GenericDataSourceConfiguration.java (2 番目のデータ ソース)

<code class="java">@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "genericEntityManager",
        transactionManagerRef = "genericTransactionManager",
        basePackages = {"com.mm.repository.generic"})
public class GenericDataSourceConfiguration {

    @Bean(name = "genericDataSource")
    public DataSource dataSource() {
        return DataSourceBuilder.create()
                .url("jdbc:h2:mem:generic:H2")
                .driverClassName("org.h2.Driver")
                .username("sa")
                .password("")
                .build();
    }

    @Bean(name = "genericEntityManager")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setPackagesToScan(new String[] {"com.mm.domain.generic"});

        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(additionalJpaProperties());
        em.setPersistenceUnitName("genericPersistence");
        em.setPackagesToScan("com.mm.domain.generic");

        return em;
    }

    Properties additionalJpaProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
        properties.setProperty("hibernate.show_sql", "true");

        return properties;
    }

    @Bean(name = "genericTransactionManager")
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);

        return transactionManager;
    }
}</code>
ログイン後にコピー

Application.java

<code class="java">@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application extends SpringApplication {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public ServletRegistrationBean h2Console() {
        ServletRegistrationBean reg = new ServletRegistrationBean(new WebServlet(), "/console/*");
        reg.setLoadOnStartup(1);
        return reg;
    }
}</code>
ログイン後にコピー

エンティティとリポジトリ

Customer.java (エンティティ)

<code class="java">@Entity
@Table(name = "customer")
@Data
@EqualsAndHashCode(exclude = {"id"})
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "age", nullable = false)
    private Integer age;

    ....
}</code>
ログイン後にコピー

Order.java ( Entity)

<code class="java">@Entity
@Table(name = "order")
@Data
@EqualsAndHashCode(exclude = {"id"})
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column(name = "code", nullable = false)
    private Integer code;

    @Column(name = "quality", nullable = false)
    private Integer quality;
}</code>
ログイン後にコピー

CustomerRepository.java (最初のデータ ソースのリポジトリ)

<code class="java">public interface CustomerRepository extends JpaRepository<Customer, Integer> {}</code>
ログイン後にコピー

GenericRepository.java (2 番目のデータのリポジトリ)出典)

<code class="java">public interface GenericRepository extends JpaRepository<Generic, Integer> {}</code>
ログイン後にコピー

このアプローチを使用すると、Spring Data JPA はデータ ソースごとに個別の EntityManagerFactories と TransactionManager を作成し、Spring Boot アプリケーション内の複数のデータベースとのシームレスな統合を可能にします。

以上がSpring Boot アプリケーションで複数のデータソースを使用するように Spring Data JPA を構成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!