Java SpringBoot数据源和手动分片

Java SpringBoot数据源和手动分片,java,spring-boot,Java,Spring Boot,我想通过手动分片管理将SpringBoot应用程序连接到遗留数据库系统 通过用户提供的carId,我可以找到保存汽车的碎片。 (示例:carId=1在shard 1中,carId=2在shard2中) 我不知道如何以正确的方式进行(自动布线?、数据源?、…) 你能帮我吗 我的申请 @SpringBootApplication public class CarApiApplication { public static void main(String[] args) {

我想通过手动分片管理将SpringBoot应用程序连接到遗留数据库系统

通过用户提供的carId,我可以找到保存汽车的碎片。 (示例:carId=1在shard 1中,carId=2在shard2中)

我不知道如何以正确的方式进行(自动布线?、数据源?、…)

你能帮我吗

我的申请

@SpringBootApplication
public class CarApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(CarApiApplication.class, args);
    }
}
我的控制器

@RestController
public class CarController {

    @Autowired
    CarService carService;

    @GetMapping("/car/{carId}")
    public Optional<Car> car(
            @PathVariable(value = "carId") String carId
    ) {
        return carService.getTransaction(carId);
    }
}
这可能与你有关。您将需要一个路由数据源,该数据源将取决于该线程的上下文(即,您将要查询的碎片)。可以显式地或通过面向方面的编程来设置上下文。
public class CarService {

    @Autowired
    private CarJpaRepository carJpaRepository;

    public Optional<Car> getCar(String carId) {
        Optional<Car> car = carJpaRepository.findById(carId);
        return car;
    }
}
public interface CarJpaRepository extends JpaRepository<Transaction, Long> {

}
spring.shard1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shard1.url=jdbc:mysql://localhost:3306/shard1?serverTimezone=UTC&useLegacyDatetimeCode=false
spring.shard1.username=root
spring.shard1.password=root

spring.shard2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shard2.url=jdbc:mysql://localhost:3306/shard2?serverTimezone=UTC&useLegacyDatetimeCode=false
spring.shard2.username=root
spring.shard2.password=root

spring.shard3.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shard3.url=jdbc:mysql://localhost:3306/shard3?serverTimezone=UTC&useLegacyDatetimeCode=false
spring.shard3.username=root
spring.shard3.password=root

spring.shard4.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shard4.url=jdbc:mysql://localhost:3306/shard4?serverTimezone=UTC&useLegacyDatetimeCode=false
spring.shard4.username=root
spring.shard4.password=root