邯郸哪有做网站的公司,有什么牌子网站是响应式,长沙市网站建设,广州网页建设Spring Boot应用中集成与使用多数据源
1. 前言
通过定义和使用多个数据源#xff0c;能在Spring Boot应用中实现更复杂的数据管理场景#xff0c;比如读写分离、数据冗余等。
2. 准备工作
环境准备#xff1a;确保已经准备好Spring Boot的开发环境。数据库准备#xff…Spring Boot应用中集成与使用多数据源
1. 前言
通过定义和使用多个数据源能在Spring Boot应用中实现更复杂的数据管理场景比如读写分离、数据冗余等。
2. 准备工作
环境准备确保已经准备好Spring Boot的开发环境。数据库准备在本地或云服务上创建两个数据库如下文所示。 3. 创建Spring Boot项目
使用Spring Initializr创建项目https://start.spring.io/。在pom.xml中添加必要的依赖包括JPA、Spring Boot Parent、数据库驱动等。 4. 配置多数据源
在application.yml或application.properties中配置
# application.yml
spring:datasource:primary:url: jdbc:mysql://localhost:3306/db1username: userpassword: passworddriver-class-name: com.mysql.jdbc.Driverhikari:connection-timeout: 30000maximum-pool-size: 20secondary:url: jdbc:mysql://localhost:3306/db2username: userpassword: passworddriver-class-name: com.mysql.jdbc.Driverhikari:connection-timeout: 30000maximum-pool-size: 205. 创建实体类及Repository
Entity Class - User (For Primary Database):
package com.example.multidatasource.entity;import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;Entity
Table(name users)
public class User {Idprivate Long id;private String name;private String email;// getter, setter, constructors
}Entity Class - Product (For Secondary Database):
package com.example.multidatasource.entity;import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;Entity
Table(name products)
public class Product {Idprivate Long id;private String name;private int price;// getter, setter, constructors
}Repository (Primary):
package com.example.multidatasource.repository;import com.example.multidatasource.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;Repository
public interface UserRepository extends JpaRepositoryUser, Long {
}Repository (Secondary):
package com.example.multidatasource.repository;import com.example.multidatasource.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;Repository
public interface ProductRepository extends JpaRepositoryProduct, Long {
}6. 服务层配置与使用多数据源
package com.example.multidatasource.service;import com.example.multidatasource.entity.Product;
import com.example.multidatasource.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;Service
public class ProductService {private final ProductRepository productRepository;Autowiredpublic ProductService(ProductRepository productRepository) {this.productRepository productRepository;}public Product createProduct(String name, int price) {Product product new Product();product.setName(name);product.setPrice(price);return productRepository.save(product);}
}服务层同样应当遵循具体数据源的配置确保通过合适的数据源进行持久化操作。
7. 事务与多数据源管理
针对跨数据源的事务操作需要在Service中配置Transactional注解
Service
public class MultiDataSourceTransactionService {private final UserRepository userRepository;private final ProductRepository productRepository;Autowiredpublic MultiDataSourceTransactionService(UserRepository userRepository, ProductRepository productRepository) {this.userRepository userRepository;this.productRepository productRepository;}// So that its only using the primary dataSourceTransactional(propagation Propagation.REQUIRED)public void performCreateUserAndProduct() {userRepository.save(new User(John Doe, johnexample.com));productRepository.save(new Product(Widget, 1000));}
}通过这种方式可以确保同一个请求中的所有操作要么全部成功要么全部回滚。
8. 配置及测试
确保所有的Bean和配置类被正确注解测试应用是否能够启动数据源是否能够正确读写数据。