[JAVA] Implementierungsmethode für Multi-Datenquelle mit Spring Boot (Mybatis und Spring Data JPA)

Wir werden die Implementierungsmethode organisieren, wenn Sie Multi-Datenquellen mit Spring Boot verwenden.

Für Mybatis

Da Autoconfig verwendet wird, werden die DB-Verbindungsinformationen in application.properties beschrieben.

application.properties


#Primäre Datenbank
spring.datasource.url=jdbc:mysql://localhost:3306/primary_db?useSSL=false
spring.datasource.username=demo
spring.datasource.password=demo
spring.datasource.driverClassName=com.mysql.jdbc.Driver

#Sekundäre DB
secondary.datasource.url=jdbc:mysql://localhost:3306/secondary_db?useSSL=false
secondary.datasource.username=demo
secondary.datasource.password=demo
secondary.datasource.driverClassName=com.mysql.jdbc.Driver

Erstellen Sie die Spring Boot-Hauptklasse wie gewohnt.

DemoApplication


@SpringBootApplication
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args).close();
	}
}

Definieren Sie die primäre dataSource und sqlSession. -Repository Class Basepackage -SQLMap-Speicherordner

PrimaryDbConfig


@Configuration
@MapperScan(basePackages = PrimaryDbConfig.BASE_PACKAGES
            , sqlSessionTemplateRef = "primarySqlSessionTemplate")
public class PrimaryDbConfig {
	public static final String BASE_PACKAGES = "com.example.demo.primary";
	public static final String MAPPER_XML_PATH = "classpath:com/example/demo/primary/*.xml";

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

	@Primary
	@Bean(name = "primarySqlSessionFactory")
	public SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource") DataSource primaryDataSource)
			throws Exception {
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		bean.setDataSource(primaryDataSource);
		bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_XML_PATH));
		return bean.getObject();
	}

	@Bean(name = "primarySqlSessionTemplate")
	public SqlSessionTemplate sqlSessionTemplate(
			@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}

Definieren Sie eine sekundäre dataSource und sqlSession wie oben.

SecondaryDbConfig


@Configuration
@MapperScan(basePackages = SecondaryDbConfig.BASE_PACKAGES
            , sqlSessionTemplateRef = "secondarySqlSessionTemplate")
public class SecondaryDbConfig {
	public static final String BASE_PACKAGES = "com.example.demo.secondary";
	public static final String MAPPER_XML_PATH = "classpath:com/example/demo/secondary/*.xml";
	
	@Bean(name = "secondaryDataSource")
	@ConfigurationProperties(prefix = "secondary.datasource")
	public DataSource dataSource() {
		return new DataSource();
	}

	@Bean(name = "secondarySqlSessionFactory")
	public SqlSessionFactory sqlSessionFactory(@Qualifier("secondaryDataSource") DataSource secondaryDataSource)
			throws Exception {
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		bean.setDataSource(secondaryDataSource);
		bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_XML_PATH));
		return bean.getObject();
	}

	@Bean(name = "secondarySqlSessionTemplate")
	public SqlSessionTemplate sqlSessionTemplate(
			@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}

Erstellen Sie jede Repository-Klasse.

PrimaryRepository


@Mapper
public interface PrimaryRepository {
	public long selectCountFromPrimary();
}

SecondaryRepository


@Mapper
public interface SecondaryRepository {
	public long selectCountFromSecondary();
}

Definieren Sie die primäre SqlMap im folgenden Ressourcenordner.

com
 |-example
     |-demo
         |-primary
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        
<mapper namespace="com.example.demo.primary.PrimaryRepository">

    <select id="selectCountFromPrimary" resultType="long">
        select count(*) from emp;
    </select>
</mapper>

Definieren Sie eine sekundäre SQL-Karte im folgenden Ressourcenordner.

com
 |-example
     |-demo
         |-secondary
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        
<mapper namespace="com.example.demo.secondary.SecondaryRepository">

    <select id="selectCountFromSecondary" resultType="long">
        select count(*) from emp2;
    </select>
</mapper>

Rufen Sie das obige Repository auf und führen Sie SQL aus.

	@Autowired
    private PrimaryRepository primaryRepository;
	@Autowired
    private SecondaryRepository secondaryRepository;

    ...
    long countPrimary = primaryRepository.selectCountFromPrimary();
    long countSecondary = secondaryRepository.selectCountFromSecondary();

Für Spring Data JPA

Beschreiben Sie wie bei Mybatis die DB-Verbindungsinformationen in application.properties.

application.properties


#Primäre Datenbank
spring.datasource.url=jdbc:mysql://localhost:3306/primary_db?useSSL=false
spring.datasource.username=demo
spring.datasource.password=demo
spring.datasource.driverClassName=com.mysql.jdbc.Driver

#Sekundäre DB
secondary.datasource.url=jdbc:mysql://localhost:3306/secondary_db?useSSL=false
secondary.datasource.username=demo
secondary.datasource.password=demo
secondary.datasource.driverClassName=com.mysql.jdbc.Driver

spring.jpa.database=default

Erstellen Sie die Spring Boot-Hauptklasse wie gewohnt.

DemoApplication


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

Definieren Sie die primäre dataSource, entityManager und transactionManager. -Repository Class Basepackage -Domain Klasse Basispaket

PrimaryDbConfig


@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactory"
                       , transactionManagerRef = "transactionManager"
                       , basePackages = { "com.example.demo.primary" })
public class PrimaryDbConfig {

	@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.example.demo.primary.domain").build();
	}

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

Definieren Sie die sekundäre dataSource, entityManager und transactionManager wie oben.

SecondaryDbConfig


@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "secondaryEntityManagerFactory"
                       , transactionManagerRef = "secondaryTransactionManager"
                       , basePackages = {"com.example.demo.secondary" })
public class SecondaryDbConfig {

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

	@Bean(name = "secondaryEntityManagerFactory")
	public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(
			EntityManagerFactoryBuilder builder,
			@Qualifier("secondaryDataSource") DataSource dataSource) {
		return builder.dataSource(dataSource).packages("com.example.demo.secondary.domain").build();
	}

	@Bean(name = "secondaryTransactionManager")
	public PlatformTransactionManager secondaryTransactionManager(
			@Qualifier("secondaryEntityManagerFactory") EntityManagerFactory secondaryEntityManagerFactory) {
		return new JpaTransactionManager(secondaryEntityManagerFactory);
	}
}

Erstellen Sie jede Repository-Klasse und Domänenklasse.

PrimaryRepository


@Repository
public interface PrimaryRepository extends CrudRepository<Emp, String> {
	public long count();	
}

SecondaryRepository


@Repository
public interface SecondaryRepository extends CrudRepository<Emp2, String> {
	public long count();
}

EmpDomain


@Entity
@Table(name="emp")
public class Emp {
	
	@Id
	@Column(name="emp_id")
	private String empId;

	@Column(name="dept_id")
	private String deptId;

	...
}

EmpDomain2


@Entity
@Table(name="emp2")
public class Emp2 {
	
	@Id
	@Column(name="emp_id")
	private String empId;

	@Column(name="dept_id")
	private String deptId;

	...

Rufen Sie die Repository-Klasse mit dem gleichen Gefühl wie Mybatis auf.

	@Autowired
    private PrimaryRepository primaryRepository;
	@Autowired
    private SecondaryRepository secondaryRepository;

    ...
    long countPrimary = primaryRepository.selectCountFromPrimary();
    long countSecondary = secondaryRepository.selectCountFromSecondary();

Recommended Posts

Implementierungsmethode für Multi-Datenquelle mit Spring Boot (Mybatis und Spring Data JPA)
Bis zur Datenerfassung mit Spring Boot + MyBatis + PostgreSQL
Kompatibilität von Spring JDBC und My Batis mit Spring Data JDBC (vorläufig)
Ich habe das Spring Boot-Einführungshandbuch [Zugriff auf Daten mit JPA] ausprobiert.
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Implementieren Sie die REST-API mit Spring Boot und JPA (Infrastructure Layer).
Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Implementieren Sie die REST-API mit Spring Boot und JPA (Domain Layer Edition).
Sehen Sie sich das Verhalten von Entitätsaktualisierungen mit Spring Boot + Spring Data JPA an
Das Erstellen einer REST-API mit Spring JPA-Daten mit REST und Lombok ist unglaublich einfach.
Feder mit Kotorin --2 RestController und Datenklasse
HTTPS mit Spring Boot und Let's Encrypt
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Aktualisieren Sie die Datenbank regelmäßig mit Spring Batch und My Batis
Gegenseitige Bezugnahme auf Entity of Spring Data JPA und seine Anmerkungen
Erstellen Sie eine CRUD-App mit Spring Boot 2 + Thymeleaf + MyBatis
Beispielcode für die DB-Steuerung durch deklarative Transaktion mit Spring Boot + Spring Data JPA
Sortieren nach Spring Data JPA (mit zusammengesetzter Schlüsselsortierung)
Erstellen eines gemeinsamen Repositorys mit Spring Data JPA
Spring Boot + Spring Data JPA Informationen zu mehreren Tabellenverknüpfungen
Überprüfen Sie das Verhalten von getOne-, findById- und Abfragemethoden mit Spring Boot + Spring Data JPA
Pläne zur Unterstützung von JDK 11 für Eclipse und Spring Boot
Einstellungen für die Verbindung zu MySQL mit Spring Boot + Spring JDBC
Testen von JPA-Entitäten und -Repositorys mit Spring Boot @DataJpaTest
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
Ein Memorandum beim Versuch von Spring Data JPA mit STS
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
Spring Boot mit Spring Security Filter-Einstellungen und Suchtpunkten
Ich habe versucht, mit Spring Data JPA zu beginnen
Bis zur Verwendung von Spring Data und JPA Part 2
Bis zur Verwendung von Spring Data und JPA Part 1
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Verbinden Sie Spring Boot und Angular typsicher mit OpenAPI Generator
Mit Spring Boot herunterladen
[Spring Data JPA] Kann die And-Bedingung in der automatisch implementierten Löschmethode verwendet werden?
Verwendung derselben Mapper-Klasse in mehreren Datenquellen mit Spring Boot + MyBatis
Ändern Sie das Injektionsziel für jede Umgebung mit Spring Boot 2
Bis INSERT und SELECT für Postgres mit Spring Boot und Thymianblatt
Domänengesteuerte Entwicklung mit Java und Spring Boot-Layer und Modulabteilung
8 Dinge, die mit Spring Boot und JPA in die DB eingefügt werden müssen
[Java] Beispielprojekt zum Entwickeln von Webanwendungen mit Spring Boot
Spring + MyBatis-Verbindungseinstellungsmethode
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
[spring] Verwenden wir Spring Data JPA
Hallo Welt mit Spring Boot!
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Spring Boot zum Lernen von Anmerkungen