引入jar包 hutoolcom.naixue.springboot nx-uuid-starter
我们经常使用到生成主键ID,那么我们今天的做一个开箱即用的starter,基于推特的雪花算法。
演示雪花算法cn.hutool hutool-all 4.5.15 true org.springframework.boot spring-boot-starter-actuator
IdUtil.createSnowflake(workerId,datacenterId).nextId();
使用方添加配置文件application.properties
naixue.spring.uuid.info.workerId=1 naixue.spring.uuid.info.datacenterId=1我们开始定义参数配置类
@ConfigurationProperties(prefix =UUIDProperties.NX_UID_PREFIX)
public class UUIDProperties {
public static final String NX_UID_PREFIX="naixue.spring.uuid";
private Map info;
public Map getInfo() {
return info;
}
public void setInfo(Map info) {
this.info = info;
}
}
定义处理器接口
public interface IUUIDProcessor {
String getUUID(UUIDProperties properties);
}
定义UUIDProcessorImpl
public class UUIDProcessorImpl implements IUUIDProcessor {
@Override
public String getUUID(UUIDProperties properties) {
UUID uuid = UUID.randomUUID();
System.out.println("UUID="+uuid);
return uuid.toString();
}
}
定义SnowFlakeProcessorImpl
public class SnowFlakeProcessorImpl implements IUUIDProcessor {
@Override
public String getUUID(UUIDProperties properties) {
String workerId = properties.getInfo().get("workerId");
String datacenterId = properties.getInfo().get("datacenterId");
long id = IdUtil.createSnowflake(Long.valueOf(workerId), Long.valueOf(datacenterId)).nextId();
System.out.println("SnowFlakeID="+id);
return String.valueOf(id);
}
}
自动装配bean
@Configuration
public class UUIDConfiguration {
@Bean
@Primary
@ConditionalOnMissingClass(value = "cn.hutool.core.util.IdUtil")
public IUUIDProcessor getUUID() {
return new UUIDProcessorImpl();
}
@Bean
@ConditionalOnClass(name = "cn.hutool.core.util.IdUtil")
public IUUIDProcessor getSnowFlakeUUID() {
return new SnowFlakeProcessorImpl();
}
}
定义给使用调用的service
public class NXUUIDTemplate {
private UUIDProperties uuidProperties;
private IUUIDProcessor iuuidProcessor;
public NXUUIDTemplate(IUUIDProcessor iuuidProcessor, UUIDProperties uuidProperties) {
this.iuuidProcessor = iuuidProcessor;
this.uuidProperties = uuidProperties;
}
public String getUUid() {
return iuuidProcessor.getUUID(uuidProperties);
}
}
定义自动装载类
@Import(UUIDConfiguration.class)
@EnableConfigurationProperties(UUIDProperties.class)
@Configuration
public class UUIDAutoConfiguration {
@Bean
public NXUUIDTemplate NXUIDTemplate(IUUIDProcessor iuuidProcessor, UUIDProperties uuidProperties) {
return new NXUUIDTemplate(iuuidProcessor, uuidProperties);
}
}
定义SPI文件
META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.naixue.springboot.starter.UUIDAutoConfiguration使用方添加依赖
使用com.naixue.springboot nx-uuid-starter 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-actuator
@SpringBootApplication
public class FriendApplication {
@Autowired
public void setNxuuidTemplate(NXUUIDTemplate nxuuidTemplate) {
FriendApplication.nxuuidTemplate = nxuuidTemplate;
}
private static NXUUIDTemplate nxuuidTemplate;
public static void main(String[] args) {
SpringApplication.run(FriendApplication.class, args);
nxuuidTemplate.getUUid();
}
}



