Sharding item parameters ‘1‘ format error, should be int=xx,int=xx

文章讲述了作者在配置定时任务时遇到ShardingItemParameters1formaterror的问题,本地测试正常,但在生产环境中报错。问题在于分片序列号和参数配置不正确,解决方法是将配置改为1=<xx>。

Sharding item parameters ‘1’ format error, should be int=xx,int=xx
配置定时任务,本地测试没问题,能正常接收参数,但是生产报错,网上找了很多例子,但是项目不同,错误的解决方式也不同
这个错误是批量平台配置的:分片序列号和参数配置错误

要配置成 1=1;这样才能正常的接收参数

正确的配置

`@DataSource(value = DataSourceType.SHARDING)` 通常是自定义的注解,用于在多数据源环境下指定要使用的数据源。以下从使用方法、作用和原理三个方面进行详细介绍。 ### 使用方法 在需要指定数据源的服务层方法或类上添加该注解。例如: ```java import org.springframework.stereotype.Service; @Service public class YourService { @DataSource(value = DataSourceType.SHARDING) public void someMethod() { // 业务逻辑代码 } } ``` 上述代码在 `someMethod` 方法上添加了 `@DataSource(value = DataSourceType.SHARDING)` 注解,表示该方法执行时使用 `SHARDING` 数据源。 ### 作用 该注解的主要作用是在多数据源环境下灵活切换数据源。在实际开发中,可能会遇到需要同时操作多个数据库的场景,比如一个系统既需要访问主数据库,又需要访问从数据库,或者像引用中提到的使用分库分表的 `SHARDING_DATASOURCE` 数据源。通过使用 `@DataSource` 注解,可以根据业务需求动态地选择要使用的数据源,提高系统的灵活性和可扩展性。 ### 原理 `@DataSource` 注解的实现原理通常基于 Spring AOP(面向切面编程)和动态数据源切换机制。具体步骤如下: 1. **定义注解**:定义 `@DataSource` 注解,用于标记要使用的数据源。 ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface DataSource { DataSourceType value() default DataSourceType.SPRING_DATASOURCE; } ``` 2. **实现动态数据源**:通过继承 `AbstractRoutingDataSource` 类,实现动态数据源切换。如引用[3]中所示: ```java public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DatabaseContextHolder.getDatabaseType(); } } ``` 3. **使用 AOP 切面**:创建一个切面类,在方法执行前根据 `@DataSource` 注解的值设置当前要使用的数据源。 ```java import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @Aspect @Component public class DataSourceAspect { @Before("@annotation(com.example.DataSource)") public void before(JoinPoint point) { MethodSignature signature = (MethodSignature) point.getSignature(); Method method = signature.getMethod(); DataSource dataSource = method.getAnnotation(DataSource.class); if (dataSource != null) { DatabaseContextHolder.setDatabaseType(dataSource.value()); } } @After("@annotation(com.example.DataSource)") public void after(JoinPoint point) { DatabaseContextHolder.clearDatabaseType(); } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值