mirror of
				https://github.com/continew-org/continew-starter.git
				synced 2025-10-31 08:58:37 +08:00 
			
		
		
		
	refactor(data/mybatis-plus): 重构 ID 生成器配置,支持默认、CosId、自定义
This commit is contained in:
		| @@ -31,10 +31,11 @@ | |||||||
|             <artifactId>p6spy</artifactId> |             <artifactId>p6spy</artifactId> | ||||||
|         </dependency> |         </dependency> | ||||||
|  |  | ||||||
|  |         <!-- CosId(通用、灵活、高性能的分布式 ID 生成器) --> | ||||||
|         <dependency> |         <dependency> | ||||||
|             <groupId>org.slf4j</groupId> |             <groupId>me.ahoo.cosid</groupId> | ||||||
|             <artifactId>slf4j-api</artifactId> |             <artifactId>cosid-spring-boot-starter</artifactId> | ||||||
|  |             <optional>true</optional> | ||||||
|         </dependency> |         </dependency> | ||||||
|  |  | ||||||
|     </dependencies> |     </dependencies> | ||||||
| </project> | </project> | ||||||
| @@ -18,6 +18,8 @@ package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure; | |||||||
|  |  | ||||||
| import com.baomidou.mybatisplus.annotation.DbType; | import com.baomidou.mybatisplus.annotation.DbType; | ||||||
| import org.springframework.boot.context.properties.ConfigurationProperties; | import org.springframework.boot.context.properties.ConfigurationProperties; | ||||||
|  | import org.springframework.boot.context.properties.NestedConfigurationProperty; | ||||||
|  | import top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.idgenerator.MyBatisPlusIdGeneratorProperties; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * MyBatis Plus 扩展配置属性 |  * MyBatis Plus 扩展配置属性 | ||||||
| @@ -41,6 +43,12 @@ public class MyBatisPlusExtensionProperties { | |||||||
|      */ |      */ | ||||||
|     private String mapperPackage; |     private String mapperPackage; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * ID 生成器 | ||||||
|  |      */ | ||||||
|  |     @NestedConfigurationProperty | ||||||
|  |     private MyBatisPlusIdGeneratorProperties idGenerator; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 数据权限插件配置 |      * 数据权限插件配置 | ||||||
|      */ |      */ | ||||||
| @@ -144,6 +152,14 @@ public class MyBatisPlusExtensionProperties { | |||||||
|         this.mapperPackage = mapperPackage; |         this.mapperPackage = mapperPackage; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public MyBatisPlusIdGeneratorProperties getIdGenerator() { | ||||||
|  |         return idGenerator; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setIdGenerator(MyBatisPlusIdGeneratorProperties idGenerator) { | ||||||
|  |         this.idGenerator = idGenerator; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public DataPermissionProperties getDataPermission() { |     public DataPermissionProperties getDataPermission() { | ||||||
|         return dataPermission; |         return dataPermission; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -16,10 +16,7 @@ | |||||||
|  |  | ||||||
| package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure; | package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure; | ||||||
|  |  | ||||||
| import cn.hutool.core.net.NetUtil; |  | ||||||
| import cn.hutool.extra.spring.SpringUtil; | import cn.hutool.extra.spring.SpringUtil; | ||||||
| import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator; |  | ||||||
| import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; |  | ||||||
| import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; | ||||||
| import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler; | import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler; | ||||||
| import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; | import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; | ||||||
| @@ -34,10 +31,13 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean | |||||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | ||||||
| import org.springframework.boot.context.properties.EnableConfigurationProperties; | import org.springframework.boot.context.properties.EnableConfigurationProperties; | ||||||
| import org.springframework.context.annotation.Bean; | import org.springframework.context.annotation.Bean; | ||||||
|  | import org.springframework.context.annotation.Configuration; | ||||||
|  | import org.springframework.context.annotation.Import; | ||||||
| import org.springframework.context.annotation.PropertySource; | import org.springframework.context.annotation.PropertySource; | ||||||
| import org.springframework.transaction.annotation.EnableTransactionManagement; | import org.springframework.transaction.annotation.EnableTransactionManagement; | ||||||
| import top.charles7c.continew.starter.core.constant.PropertiesConstants; | import top.charles7c.continew.starter.core.constant.PropertiesConstants; | ||||||
| import top.charles7c.continew.starter.core.util.GeneralPropertySourceFactory; | import top.charles7c.continew.starter.core.util.GeneralPropertySourceFactory; | ||||||
|  | import top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.idgenerator.MyBatisPlusIdGeneratorConfiguration; | ||||||
| import top.charles7c.continew.starter.data.mybatis.plus.datapermission.DataPermissionFilter; | import top.charles7c.continew.starter.data.mybatis.plus.datapermission.DataPermissionFilter; | ||||||
| import top.charles7c.continew.starter.data.mybatis.plus.datapermission.DataPermissionHandlerImpl; | import top.charles7c.continew.starter.data.mybatis.plus.datapermission.DataPermissionHandlerImpl; | ||||||
|  |  | ||||||
| @@ -81,6 +81,15 @@ public class MybatisPlusAutoConfiguration { | |||||||
|         return interceptor; |         return interceptor; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * ID 生成器配置 | ||||||
|  |      */ | ||||||
|  |     @Configuration | ||||||
|  |     @Import({MyBatisPlusIdGeneratorConfiguration.Default.class, MyBatisPlusIdGeneratorConfiguration.CosId.class, | ||||||
|  |         MyBatisPlusIdGeneratorConfiguration.Custom.class}) | ||||||
|  |     protected static class MyBatisPlusIdGeneratorAutoConfiguration { | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 数据权限处理器 |      * 数据权限处理器 | ||||||
|      */ |      */ | ||||||
| @@ -91,18 +100,6 @@ public class MybatisPlusAutoConfiguration { | |||||||
|         return new DataPermissionHandlerImpl(dataPermissionFilter); |         return new DataPermissionHandlerImpl(dataPermissionFilter); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * ID 生成器配置(仅在主键类型(idType)配置为 ASSIGN_ID 或 ASSIGN_UUID 时有效) |  | ||||||
|      * <p> |  | ||||||
|      * 使用网卡信息绑定雪花生成器,防止集群雪花 ID 重复 |  | ||||||
|      * </p> |  | ||||||
|      */ |  | ||||||
|     @Bean |  | ||||||
|     @ConditionalOnMissingBean |  | ||||||
|     public IdentifierGenerator identifierGenerator() { |  | ||||||
|         return new DefaultIdentifierGenerator(NetUtil.getLocalhost()); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 分页插件配置(<a href="https://baomidou.com/pages/97710a/#paginationinnerinterceptor">PaginationInnerInterceptor</a>) |      * 分页插件配置(<a href="https://baomidou.com/pages/97710a/#paginationinnerinterceptor">PaginationInnerInterceptor</a>) | ||||||
|      */ |      */ | ||||||
|   | |||||||
| @@ -0,0 +1,42 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||||
|  |  * <p> | ||||||
|  |  * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * <p> | ||||||
|  |  * http://www.gnu.org/licenses/lgpl.html | ||||||
|  |  * <p> | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.idgenerator; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; | ||||||
|  | import me.ahoo.cosid.snowflake.SnowflakeId; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.beans.factory.annotation.Qualifier; | ||||||
|  | import org.springframework.context.annotation.Lazy; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * MyBatis Plus ID 生成器 - CosId | ||||||
|  |  * | ||||||
|  |  * @author Charles7c | ||||||
|  |  * @since 1.4.0 | ||||||
|  |  */ | ||||||
|  | public class MyBatisPlusCosIdIdentifierGenerator implements IdentifierGenerator { | ||||||
|  |  | ||||||
|  |     @Qualifier("__share__SnowflakeId") | ||||||
|  |     @Lazy | ||||||
|  |     @Autowired | ||||||
|  |     private SnowflakeId snowflakeId; | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Number nextId(Object entity) { | ||||||
|  |         return snowflakeId.generate(); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,93 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||||
|  |  * <p> | ||||||
|  |  * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * <p> | ||||||
|  |  * http://www.gnu.org/licenses/lgpl.html | ||||||
|  |  * <p> | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.idgenerator; | ||||||
|  |  | ||||||
|  | import cn.hutool.core.net.NetUtil; | ||||||
|  | import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator; | ||||||
|  | import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; | ||||||
|  | import me.ahoo.cosid.IdGenerator; | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
|  | import org.springframework.beans.factory.NoSuchBeanDefinitionException; | ||||||
|  | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | ||||||
|  | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | ||||||
|  | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | ||||||
|  | import org.springframework.context.annotation.Bean; | ||||||
|  | import org.springframework.core.ResolvableType; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * MyBatis ID 生成器配置 | ||||||
|  |  * | ||||||
|  |  * @author Charles7c | ||||||
|  |  * @since 1.4.0 | ||||||
|  |  */ | ||||||
|  | public class MyBatisPlusIdGeneratorConfiguration { | ||||||
|  |  | ||||||
|  |     private static final Logger log = LoggerFactory.getLogger(MyBatisPlusIdGeneratorConfiguration.class); | ||||||
|  |  | ||||||
|  |     private MyBatisPlusIdGeneratorConfiguration() { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 自定义 ID 生成器-默认(雪花算法,使用网卡信息绑定雪花生成器,防止集群雪花 ID 重复) | ||||||
|  |      */ | ||||||
|  |     @ConditionalOnMissingBean(IdentifierGenerator.class) | ||||||
|  |     @ConditionalOnProperty(name = "mybatis-plus.extension.id-generator.type", havingValue = "default", matchIfMissing = true) | ||||||
|  |     public static class Default { | ||||||
|  |         static { | ||||||
|  |             log.debug("[ContiNew Starter] - Auto Configuration 'MyBatis Plus-IdGenerator-Default' completed initialization."); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Bean | ||||||
|  |         public IdentifierGenerator identifierGenerator() { | ||||||
|  |             return new DefaultIdentifierGenerator(NetUtil.getLocalhost()); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 自定义 ID 生成器-CosId | ||||||
|  |      */ | ||||||
|  |     @ConditionalOnMissingBean(IdentifierGenerator.class) | ||||||
|  |     @ConditionalOnClass(IdGenerator.class) | ||||||
|  |     @ConditionalOnProperty(name = "mybatis-plus.extension.id-generator.type", havingValue = "cosid") | ||||||
|  |     public static class CosId { | ||||||
|  |         static { | ||||||
|  |             log.debug("[ContiNew Starter] - Auto Configuration 'MyBatis Plus-IdGenerator-CosId' completed initialization."); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Bean | ||||||
|  |         public IdentifierGenerator identifierGenerator() { | ||||||
|  |             return new MyBatisPlusCosIdIdentifierGenerator(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 自定义 ID 生成器 | ||||||
|  |      */ | ||||||
|  |     @ConditionalOnProperty(name = "mybatis-plus.extension.id-generator.type", havingValue = "custom") | ||||||
|  |     public static class Custom { | ||||||
|  |         @Bean | ||||||
|  |         @ConditionalOnMissingBean | ||||||
|  |         public IdentifierGenerator identifierGenerator() { | ||||||
|  |             if (log.isErrorEnabled()) { | ||||||
|  |                 log.error("Consider defining a bean of type '{}' in your configuration.", ResolvableType | ||||||
|  |                     .forClass(IdentifierGenerator.class)); | ||||||
|  |             } | ||||||
|  |             throw new NoSuchBeanDefinitionException(IdentifierGenerator.class); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,41 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||||
|  |  * <p> | ||||||
|  |  * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * <p> | ||||||
|  |  * http://www.gnu.org/licenses/lgpl.html | ||||||
|  |  * <p> | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.idgenerator; | ||||||
|  |  | ||||||
|  | import top.charles7c.continew.starter.data.mybatis.plus.enums.MyBatisPlusIdGeneratorType; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * MyBatis ID 生成器配置属性 | ||||||
|  |  * | ||||||
|  |  * @author Charles7c | ||||||
|  |  * @since 1.4.0 | ||||||
|  |  */ | ||||||
|  | public class MyBatisPlusIdGeneratorProperties { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * ID 生成器类型 | ||||||
|  |      */ | ||||||
|  |     private MyBatisPlusIdGeneratorType type = MyBatisPlusIdGeneratorType.DEFAULT; | ||||||
|  |  | ||||||
|  |     public MyBatisPlusIdGeneratorType getType() { | ||||||
|  |         return type; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setType(MyBatisPlusIdGeneratorType type) { | ||||||
|  |         this.type = type; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,41 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||||
|  |  * <p> | ||||||
|  |  * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * <p> | ||||||
|  |  * http://www.gnu.org/licenses/lgpl.html | ||||||
|  |  * <p> | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package top.charles7c.continew.starter.data.mybatis.plus.enums; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * MyBatis ID 生成器类型枚举 | ||||||
|  |  * | ||||||
|  |  * @author Charles7c | ||||||
|  |  * @since 1.4.0 | ||||||
|  |  */ | ||||||
|  | public enum MyBatisPlusIdGeneratorType { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 默认 | ||||||
|  |      */ | ||||||
|  |     DEFAULT, | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * CosId | ||||||
|  |      */ | ||||||
|  |     COSID, | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 自定义 | ||||||
|  |      */ | ||||||
|  |     CUSTOM | ||||||
|  | } | ||||||
| @@ -61,6 +61,7 @@ | |||||||
|         <p6spy.version>3.9.1</p6spy.version> |         <p6spy.version>3.9.1</p6spy.version> | ||||||
|         <jetcache.version>2.7.5</jetcache.version> |         <jetcache.version>2.7.5</jetcache.version> | ||||||
|         <redisson.version>3.26.0</redisson.version> |         <redisson.version>3.26.0</redisson.version> | ||||||
|  |         <cosid.version>2.6.5</cosid.version> | ||||||
|         <sms4j.version>3.1.1</sms4j.version> |         <sms4j.version>3.1.1</sms4j.version> | ||||||
|         <aj-captcha.version>1.3.0</aj-captcha.version> |         <aj-captcha.version>1.3.0</aj-captcha.version> | ||||||
|         <easy-captcha.version>1.6.2</easy-captcha.version> |         <easy-captcha.version>1.6.2</easy-captcha.version> | ||||||
| @@ -174,6 +175,18 @@ | |||||||
|                 <version>${redisson.version}</version> |                 <version>${redisson.version}</version> | ||||||
|             </dependency> |             </dependency> | ||||||
|  |  | ||||||
|  |             <!-- CosId(通用、灵活、高性能的分布式 ID 生成器) --> | ||||||
|  |             <dependency> | ||||||
|  |                 <groupId>me.ahoo.cosid</groupId> | ||||||
|  |                 <artifactId>cosid-spring-boot-starter</artifactId> | ||||||
|  |                 <version>${cosid.version}</version> | ||||||
|  |             </dependency> | ||||||
|  |             <dependency> | ||||||
|  |                 <groupId>me.ahoo.cosid</groupId> | ||||||
|  |                 <artifactId>cosid-spring-redis</artifactId> | ||||||
|  |                 <version>${cosid.version}</version> | ||||||
|  |             </dependency> | ||||||
|  |  | ||||||
|             <!-- SMS4J(短信聚合框架,轻松集成多家短信服务,解决接入多个短信 SDK 的繁琐流程) --> |             <!-- SMS4J(短信聚合框架,轻松集成多家短信服务,解决接入多个短信 SDK 的繁琐流程) --> | ||||||
|             <dependency> |             <dependency> | ||||||
|                 <groupId>org.dromara.sms4j</groupId> |                 <groupId>org.dromara.sms4j</groupId> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user