Java SpringBoot 连接多个数据源
简介
在开发过程中,我们经常会遇到需要连接多个数据源的情况。比如,我们的应用程序可能需要连接不同的数据库,或者使用不同的数据源进行读写操作。在 Java SpringBoot 中,我们可以利用 Spring Data JPA 和 Spring Boot 的多数据源支持来实现这个需求。
本文将介绍如何使用 Java SpringBoot 连接多个数据源,并提供一些示例代码帮助读者理解和实践。
准备工作
在开始之前,我们需要准备以下环境:
- Java JDK 1.8 或以上
- Maven 3.2 或以上
- SpringBoot 2.4.1 或以上
- IDE(如 IntelliJ IDEA 或 Eclipse)
添加依赖
首先,在你的 SpringBoot 项目中,我们需要添加以下依赖:
<dependencies>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
上述依赖中,我们引入了 Spring Data JPA、H2 数据库和 MySQL 连接器的依赖。
配置数据源
接下来,我们需要在 application.properties
或 application.yml
文件中配置数据源信息。假设我们需要连接两个数据源,一个是 H2 数据库,另一个是 MySQL 数据库。我们可以按照以下方式进行配置:
# H2 数据源配置
spring.datasource.h2.url=jdbc:h2:mem:testdb
spring.datasource.h2.username=sa
spring.datasource.h2.password=
# MySQL 数据源配置
spring.datasource.mysql.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.mysql.username=root
spring.datasource.mysql.password=123456
spring.datasource.mysql.driver-class-name=com.mysql.jdbc.Driver
在上述配置中,我们使用 spring.datasource
前缀来为每个数据源分别配置属性。
创建实体类和仓库
接下来,我们将创建两个实体类和两个仓库接口,分别对应 H2 数据库和 MySQL 数据库。
首先,我们创建一个名为 User
的实体类,用于表示用户信息。代码如下所示:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 省略 getter 和 setter 方法
}
然后,我们创建一个名为 UserRepository
的接口,用于对用户信息进行 CRUD 操作。代码如下所示:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
类似地,我们再创建一个名为 Product
的实体类和一个名为 ProductRepository
的接口,用于对产品信息进行操作。
@Entity
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 省略 getter 和 setter 方法
}
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
}
配置数据源和事务
接下来,我们需要配置多个数据源和事务管理器。
首先,我们创建一个名为 H2DataSourceConfig
的配置类,用于配置 H2 数据源和事务管理器。代码如下所示:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "com.example.demo.h2.repository",
entityManagerFactoryRef = "h2EntityManagerFactory",
transactionManagerRef = "h2TransactionManager"
)
public class H2DataSourceConfig {
@Primary
@Bean(name = "h2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.h2")
public DataSource h2DataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "h2EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean h2EntityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("h2DataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.example.demo.h2.entity")
.build();
}
@Primary