Spring Boot之连接多个数据库(以两个数据库为例)

2022年6月12日13:18:54

1、添加插件(pom.xml)

<!-- JPA依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MYSQL 依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>

2、配置数据库(application.properties)

# MySql 数据库信息 本地数据库配置
spring.datasource.local.name=local_database
spring.datasource.local.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.local.jdbc-url=jdbc:mysql://localhost:3306/local_database?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
spring.datasource.local.username=root
spring.datasource.local.password=# MySql 数据库信息 线上数据库配置
spring.datasource.online.name=online_database
spring.datasource.online.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.online.jdbc-url=jdbc:mysql://localhost:3306/online_database?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
spring.datasource.online.username=root
spring.datasource.online.password=

3、目录结构

Spring Boot之连接多个数据库(以两个数据库为例)

3.1、DataSourceConfiguration.java

importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.boot.jdbc.DataSourceBuilder;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importjavax.sql.DataSource;@ConfigurationpublicclassDataSourceConfiguration{@Primary// 主数据库@Bean@ConfigurationProperties(prefix="spring.datasource.local")// 上面第二步,数据库配置,见下图publicDataSourcelocalDataSource(){returnDataSourceBuilder.create().build();}@Bean@ConfigurationProperties(prefix="spring.datasource.online")// 同上publicDataSourceonlineDataSource(){returnDataSourceBuilder.create().build();}}

Spring Boot之连接多个数据库(以两个数据库为例)

3.2、LocalConfig.java

注意:XXXX:表示需要根据具体情况修改。

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;importorg.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;importorg.springframework.boot.autoconfigure.orm.jpa.JpaProperties;importorg.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importorg.springframework.data.jpa.repository.config.EnableJpaRepositories;importorg.springframework.orm.jpa.JpaTransactionManager;importorg.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;importorg.springframework.transaction.PlatformTransactionManager;importorg.springframework.transaction.annotation.EnableTransactionManagement;importjavax.annotation.Resource;importjavax.persistence.EntityManager;importjavax.sql.DataSource;importjava.util.Map;@Configuration@EnableTransactionManagement@EnableJpaRepositories(
        basePackages="com.XXXX.XXXX.sql.local",// Repository 所在 包的位置
        entityManagerFactoryRef="entityManagerFactoryLocal",
        transactionManagerRef="transactionManagerLocal")publicclassLocalConfig{//    @Autowired//    @Qualifier("localDataSource")@Resource(name="localDataSource")DataSource localDataSource;@AutowiredJpaProperties jpaProperties;@AutowiredprivateHibernateProperties hibernateProperties;privateMap<String,Object>getVendorProperties(){return hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(),newHibernateSettings());}//    @Primary@Bean(name="entityManagerLocal")publicEntityManagerentityManager(EntityManagerFactoryBuilder builder){returnentityManagerFactoryLocal(builder).getObject().createEntityManager();}@Primary@Bean(name="entityManagerFactoryLocal")publicLocalContainerEntityManagerFactoryBeanentityManagerFactoryLocal(EntityManagerFactoryBuilder builder){return builder.dataSource(localDataSource).packages("com.XXXX.XXXX.db")// 数据库 实体类 所在 包的位置.persistenceUnit("localPersistenceUnit").properties(getVendorProperties()).build();}//    @Primary@Bean(name="transactionManagerLocal")publicPlatformTransactionManagertransactionManagerLocal(EntityManagerFactoryBuilder builder){LocalContainerEntityManagerFactoryBean factoryOne=entityManagerFactoryLocal(builder);returnnewJpaTransactionManager(factoryOne.getObject());}}

3.3、OnlineConfig.java

注意:XXXX:表示需要根据具体情况修改。

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;importorg.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;importorg.springframework.boot.autoconfigure.orm.jpa.JpaProperties;importorg.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.jpa.repository.config.EnableJpaRepositories;importorg.springframework.orm.jpa.JpaTransactionManager;importorg.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;importorg.springframework.transaction.PlatformTransactionManager;importorg.springframework.transaction.annotation.EnableTransactionManagement;importjavax.annotation.Resource;importjavax.persistence.EntityManager;importjavax.sql.DataSource;importjava.util.Map;@Configuration@EnableTransactionManagement@EnableJpaRepositories(basePackages="com.XXXX.XXXX.sql.online",// Repository所在 包的位置
        entityManagerFactoryRef="entityManagerFactoryOnline",
        transactionManagerRef="transactionManagerOnline")publicclassOnlineConfig{//    @Autowired//    @Qualifier("onlineDataSource")@Resource(name="onlineDataSource")privateDataSource onlineDataSource;@AutowiredprivateJpaProperties jpaProperties;@AutowiredprivateHibernateProperties hibernateProperties;privateMap<String,Object>getVendorProperties(){return hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(),newHibernateSettings());}@Bean(name="entityManagerOnline")publicEntityManagerentityManager(EntityManagerFactoryBuilder builder){returnentityManagerFactoryOnline(builder).getObject().createEntityManager();}@Bean(name="entityManagerFactoryOnline")publicLocalContainerEntityManagerFactoryBeanentityManagerFactoryOnline(EntityManagerFactoryBuilder builder){return builder.dataSource(onlineDataSource).packages("com.XXXX.XXXX.db")// 数据库 实体类 所在 包的位置.persistenceUnit("onlinePersistenceUnit").properties(getVendorProperties()).build();}@Bean(name="transactionManagerOnline")publicPlatformTransactionManagertransactionManagerOnline(EntityManagerFactoryBuilder builder){LocalContainerEntityManagerFactoryBean factoryOne=entityManagerFactoryOnline(builder);returnnewJpaTransactionManager(factoryOne.getObject());}}

3.4、LocalRepository.java

importcom.XXXX.XXXX.db.Book;importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.data.jpa.repository.JpaSpecificationExecutor;importorg.springframework.data.jpa.repository.Query;importorg.springframework.data.repository.query.Param;importjava.util.List;publicinterfaceLocalRepositoryextendsJpaRepository<Book,Integer>,JpaSpecificationExecutor<Book>{}

3.5、OnlineRepository.java

importcom.XXXX.XXXX.db.Book;importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.data.jpa.repository.JpaSpecificationExecutor;importorg.springframework.data.jpa.repository.Query;importorg.springframework.data.repository.query.Param;importjava.util.List;publicinterfaceOnlineRepositoryextendsJpaRepository<Book,Integer>,JpaSpecificationExecutor<Book>{}

4、测试(RepositoryTest)

importcom.XXXX.XXXX.db.Book;importcom.XXXX.XXXX.sql.online.OnlineModel;importcom.XXXX.XXXX.sql.online.OnlineRepository;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importjava.util.List;@SpringBootTestclassRepositoryTest{@AutowiredLocalRepository lr;@AutowiredOnlineRepository or;@Testpublicvoidtest(){List<Book> lrList= lr.findAll();List<Book> orList= or.findAll();}}
  • 作者:憶
  • 原文链接:https://blog.csdn.net/weixin_43094965/article/details/122704787
    更新时间:2022年6月12日13:18:54 ,共 7757 字。