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(두 번째 데이터 소스)
<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(두 번째 데이터용 저장소) 출처)
<code class="java">public interface GenericRepository extends JpaRepository<Generic, Integer> {}</code>
이 접근 방식을 사용하면 Spring Data JPA는 각 데이터 소스에 대해 별도의 EntityManagerFactories 및 TransactionManager를 생성하여 Spring Boot 애플리케이션의 여러 데이터베이스와 원활한 통합을 가능하게 합니다.
위 내용은 Spring Boot 애플리케이션에서 여러 데이터 소스를 사용하도록 Spring Data JPA를 어떻게 구성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!