Spring Boot MySQL 主从连接实现指南
在现代应用中,数据库的读写分离是提升性能与可用性的重要手段。Spring Boot 提供了灵活的方式来支持 MySQL 的主从数据库连接。在本篇文章中,我将向你详细讲解如何在 Spring Boot 项目中实现 MySQL 的主从数据源连接。
整体流程
在实现 Spring Boot 的 MySQL 主从连接之前,我们首先要明确整个过程。下面是实现步骤的表格:
步骤 | 描述 |
---|---|
1 | 添加依赖 |
2 | 配置数据源 |
3 | 创建配置类 |
4 | 创建 DAO 和 Service |
5 | 测试连接 |
以下是用 mermaid 语法展示的流程图:
flowchart TD
A[开始] --> B[添加依赖]
B --> C[配置数据源]
C --> D[创建配置类]
D --> E[创建 DAO 和 Service]
E --> F[测试连接]
F --> G[结束]
步骤详解
1. 添加依赖
首先,在 pom.xml
文件中添加如下依赖:
<dependencies>
<!-- Spring Boot Starter Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
解释: 这些依赖用于支持 Spring Data JPA 和 MySQL 数据库连接。
2. 配置数据源
在 application.yml
或 application.properties
中配置数据源。示例如下:
spring:
datasource:
master:
url: jdbc:mysql://localhost:3306/master_db
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
slave:
url: jdbc:mysql://localhost:3306/slave_db
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
解释: 指定了主数据库和从数据库的连接信息。
3. 创建配置类
接下来,我们需要创建数据源的配置类,示例代码如下:
@Configuration
@EnableTransactionManagement
public class DataSourceConfig {
@Primary
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource masterDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "slaveDataSource")
@ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSource slaveDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public JdbcTemplate masterJdbcTemplate(@Qualifier("masterDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean
public JdbcTemplate slaveJdbcTemplate(@Qualifier("slaveDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
解释:
@Configuration
:标识这是一个配置类。@Primary
:标识主数据源,用于事务管理。@Bean
:创建一个 Spring 管理的 Bean。@ConfigurationProperties
:从配置文件读取属性。
4. 创建 DAO 和 Service
在 DAO 层,分别为主库和从库创建数据访问对象。
@Repository
public class UserDao {
@Autowired
@Qualifier("masterJdbcTemplate")
private JdbcTemplate masterJdbcTemplate;
@Autowired
@Qualifier("slaveJdbcTemplate")
private JdbcTemplate slaveJdbcTemplate;
public void saveUser(User user) {
String sql = "INSERT INTO user(name, email) VALUES(?, ?)";
masterJdbcTemplate.update(sql, user.getName(), user.getEmail());
}
public List<User> getUsers() {
String sql = "SELECT * FROM user";
return slaveJdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}
}
解释: DAO 直接利用主从数据源,主库用于写操作,从库用于读操作。
5. 测试连接
在你的主程序中,进行连接测试:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
testConnections();
}
public static void testConnections() {
// 测试主从连接
System.out.println("Testing master and slave connections...");
// 可使用 DAO 进行具体测试
}
}
解释: 启动应用后进行简单连接测试。
关系图
最后,我们用 mermaid 语法展示数据库的关系图:
erDiagram
USER {
int id
string name
string email
}
结论
通过上述步骤,你已经实现了 Spring Boot 与 MySQL 之间的主从连接。使用主数据库进行写操作,从数据库进行读操作,有效地分担了负载,提高了性能。希望这篇文章对你在项目中实现主从数据库连接有所帮助!如有疑问,欢迎讨论。