免费下ppt课件的网站,python做电商网站,郑州做网站优化运营商,微信分享网站短链接怎么做的Spring Data与多数据源配置
大家好#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编#xff0c;也是冬天不穿秋裤#xff0c;天冷也要风度的程序猿#xff01;今天我们来探讨如何在Spring Data中配置和使用多个数据源。
在现代应用程序中…Spring Data与多数据源配置
大家好我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编也是冬天不穿秋裤天冷也要风度的程序猿今天我们来探讨如何在Spring Data中配置和使用多个数据源。
在现代应用程序中处理多个数据源变得越来越常见。可能因为不同的数据存储需求例如读写分离、跨系统数据访问或者集成多个数据库系统。本文将详细讲解如何在Spring Boot中使用Spring Data配置多个数据源并提供具体的Java代码示例。
一、项目依赖
首先我们需要在pom.xml中添加Spring Boot、Spring Data JPA以及数据库驱动的依赖。
dependencies!-- Spring Boot Starter Data JPA --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependency!-- H2 Database --dependencygroupIdcom.h2database/groupIdartifactIdh2/artifactId/dependency!-- MySQL Database --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency
/dependencies二、配置多数据源
我们将配置两个数据源一个用于H2数据库另一个用于MySQL数据库。
1. 配置文件
在application.yml中配置数据源信息。
spring:datasource:h2:url: jdbc:h2:mem:testdbdriver-class-name: org.h2.Driverusername: sapassword: passwordmysql:url: jdbc:mysql://localhost:3306/testdbdriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: passwordjpa:hibernate:ddl-auto: updateshow-sql: trueproperties:hibernate:dialect: org.hibernate.dialect.H2Dialectformat_sql: true2. 数据源配置类
我们需要为每个数据源创建单独的配置类。
package cn.juwatech.config;import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;Configuration
EnableTransactionManagement
public class DataSourceConfig {PrimaryBean(name h2DataSource)ConfigurationProperties(prefix spring.datasource.h2)public DataSource h2DataSource() {return DataSourceBuilder.create().build();}Bean(name mysqlDataSource)ConfigurationProperties(prefix spring.datasource.mysql)public DataSource mysqlDataSource() {return DataSourceBuilder.create().build();}PrimaryBean(name h2EntityManagerFactory)public LocalContainerEntityManagerFactoryBean h2EntityManagerFactory(Qualifier(h2DataSource) DataSource dataSource) {LocalContainerEntityManagerFactoryBean em new LocalContainerEntityManagerFactoryBean();em.setDataSource(dataSource);em.setPackagesToScan(cn.juwatech.model.h2);em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());em.setPersistenceUnitName(h2PU);return em;}Bean(name mysqlEntityManagerFactory)public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(Qualifier(mysqlDataSource) DataSource dataSource) {LocalContainerEntityManagerFactoryBean em new LocalContainerEntityManagerFactoryBean();em.setDataSource(dataSource);em.setPackagesToScan(cn.juwatech.model.mysql);em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());em.setPersistenceUnitName(mysqlPU);return em;}PrimaryBean(name h2TransactionManager)public PlatformTransactionManager h2TransactionManager(Qualifier(h2EntityManagerFactory) EntityManagerFactory entityManagerFactory) {return new JpaTransactionManager(entityManagerFactory);}Bean(name mysqlTransactionManager)public PlatformTransactionManager mysqlTransactionManager(Qualifier(mysqlEntityManagerFactory) EntityManagerFactory entityManagerFactory) {return new JpaTransactionManager(entityManagerFactory);}
}3. 启用JPA仓库
为每个数据源分别配置JPA仓库。
package cn.juwatech.config;import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;Configuration
EnableJpaRepositories(basePackages cn.juwatech.repository.h2,entityManagerFactoryRef h2EntityManagerFactory,transactionManagerRef h2TransactionManager
)
EntityScan(basePackages cn.juwatech.model.h2)
public class H2DataSourceConfig {
}Configuration
EnableJpaRepositories(basePackages cn.juwatech.repository.mysql,entityManagerFactoryRef mysqlEntityManagerFactory,transactionManagerRef mysqlTransactionManager
)
EntityScan(basePackages cn.juwatech.model.mysql)
public class MysqlDataSourceConfig {
}三、定义实体类
在不同的包中定义不同数据源的实体类。
package cn.juwatech.model.h2;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;Entity
public class H2Entity {IdGeneratedValue(strategy GenerationType.AUTO)private Long id;private String name;// getters and setters
}package cn.juwatech.model.mysql;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;Entity
public class MysqlEntity {IdGeneratedValue(strategy GenerationType.AUTO)private Long id;private String name;// getters and setters
}四、定义仓库接口
为每个数据源定义对应的仓库接口。
package cn.juwatech.repository.h2;import cn.juwatech.model.h2.H2Entity;
import org.springframework.data.jpa.repository.JpaRepository;public interface H2EntityRepository extends JpaRepositoryH2Entity, Long {
}package cn.juwatech.repository.mysql;import cn.juwatech.model.mysql.MysqlEntity;
import org.springframework.data.jpa.repository.JpaRepository;public interface MysqlEntityRepository extends JpaRepositoryMysqlEntity, Long {
}五、测试多数据源配置
最后我们编写一个测试类验证多数据源配置是否成功。
package cn.juwatech;import cn.juwatech.model.h2.H2Entity;
import cn.juwatech.model.mysql.MysqlEntity;
import cn.juwatech.repository.h2.H2EntityRepository;
import cn.juwatech.repository.mysql.MysqlEntityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
public class MultiDataSourceApplication implements CommandLineRunner {Autowiredprivate H2EntityRepository h2EntityRepository;Autowiredprivate MysqlEntityRepository mysqlEntityRepository;public static void main(String[] args) {SpringApplication.run(MultiDataSourceApplication.class, args);}Overridepublic void run(String... args) throws Exception {H2Entity h2Entity new H2Entity();h2Entity.setName(H2 Entity);h2EntityRepository.save(h2Entity);MysqlEntity mysqlEntity new MysqlEntity();mysqlEntity.setName(MySQL Entity);mysqlEntityRepository.save(mysqlEntity);System.out.println(H2 Entities: h2EntityRepository.findAll());System.out.println(MySQL Entities: mysqlEntityRepository.findAll());}
}总结
通过本文的介绍我们展示了如何在Spring Data中配置和使用多个数据源。我们首先配置了数据源然后为每个数据源创建了单独的配置类和JPA仓库最后验证了多数据源配置的正确性。这个示例展示了Spring Boot在处理多数据源时的灵活性和强大功能希望对大家有所帮助。