引言
在开发中,我们经常会遇到需要同时连接多个数据库的情况。Spring Boot框架与JPA(Java Persistence API)结合使用,可以简化与数据库的交互操作。本文将介绍如何使用Spring Boot JPA连接多个数据源,并进行简单的应用。
1. 创建Spring Boot项目
首先,我们需要创建一个Spring Boot项目。可以使用Spring Initializer进行初始化,也可以手动创建一个空的Maven项目,并在pom.xml中添加相应的依赖。
2. 配置多数据源
在Spring Boot中,配置多数据源需要使用到@Configuration
注解和@Bean
注解。首先,在项目的配置文件(application.properties或application.yml)中添加多个数据源的相关配置信息,如下所示:
# 第一个数据源
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driverClassName=com.mysql.jdbc.Driver
# 第二个数据源
datasource2.url=jdbc:mysql://localhost:3306/db2
datasource2.username=root
datasource2.password=123456
datasource2.driverClassName=com.mysql.jdbc.Driver
然后,创建两个配置类分别配置两个数据源,如下所示:
@Configuration
@EnableJpaRepositories(basePackages = "com.example.repository.datasource1", entityManagerFactoryRef = "dataSource1EntityManagerFactory")
public class DataSource1Config {
@Autowired
private Environment env;
@Bean
@Primary
public DataSource dataSource1() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("spring.datasource.driverClassName"));
dataSource.setUrl(env.getProperty("spring.datasource.url"));
dataSource.setUsername(env.getProperty("spring.datasource.username"));
dataSource.setPassword(env.getProperty("spring.datasource.password"));
return dataSource;
}
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean dataSource1EntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(dataSource1())
.packages("com.example.model.datasource1")
.build();
}
// 其它Bean的配置...
}
@Configuration
@EnableJpaRepositories(basePackages = "com.example.repository.datasource2", entityManagerFactoryRef = "dataSource2EntityManagerFactory")
public class DataSource2Config {
@Autowired
private Environment env;
@Bean
public DataSource dataSource2() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("datasource2.driverClassName"));
dataSource.setUrl(env.getProperty("datasource2.url"));
dataSource.setUsername(env.getProperty("datasource2.username"));
dataSource.setPassword(env.getProperty("datasource2.password"));
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean dataSource2EntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(dataSource2())
.packages("com.example.model.datasource2")
.build();
}
// 其它Bean的配置...
}
在以上代码中,@EnableJpaRepositories
注解用于启用JPA仓库并指定basePackages为Entity类所在的包路径。@Bean
注解用于声明一个Bean,@Autowired
注解用于自动装配Environment对象,通过它可以获取配置文件中的属性值。
3. 使用多数据源
要使用多数据源,我们需要在具体的Service或Repository类中指定使用哪个数据源。使用@Qualifier
注解配合EntityManager
或EntityManagerFactory
注入指定的数据源,如下所示:
@Service
public class UserService {
@PersistenceContext(unitName = "dataSource1EntityManagerFactory")
private EntityManager em1;
@PersistenceContext(unitName = "dataSource2EntityManagerFactory")
private EntityManager em2;
// 其它代码...
}
在以上代码中,@PersistenceContext
注解用于指定要使用的数据源。unitName
属性的值对应于配置类中@Bean
方法的名称,即dataSource1EntityManagerFactory
和dataSource2EntityManagerFactory
。
结语
通过以上步骤,我们成功配置了Spring Boot JPA的多数据源,使得我们的应用可以同时连接多个数据库,并进行数据操作。这将极大地方便我们处理一些需要跨数据库的业务场景。希望本文对你有所帮助,谢谢阅读!
参考资料
- Spring Boot官方文档: https://spring.io/projects/spring-boot
- JPA官方文档: https://docs.oracle.com/javaee/6/tutorial/doc/bnbpz.html
本文来自极简博客,作者:深海里的光,转载请注明原文链接:Spring Boot JPA多数据源配置及应用