<groupId>com.naixue.springbootgroupId>
<artifactId>nx-uuid-starterartifactId>
我们经常使用到生成主键ID,那么我们今天的做一个开箱即用的starter,基于推特的雪花算法。
<dependency>
<groupId>cn.hutoolgroupId>
<artifactId>hutool-allartifactId>
<version>4.5.15version>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
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<String, String> info;
public Map<String, String> getInfo() {
return info;
}
public void setInfo(Map<String, String> info) {
this.info = info;
}
}
public interface IUUIDProcessor {
String getUUID(UUIDProperties properties);
}
public class UUIDProcessorImpl implements IUUIDProcessor {
@Override
public String getUUID(UUIDProperties properties) {
UUID uuid = UUID.randomUUID();
System.out.println("UUID="+uuid);
return uuid.toString();
}
}
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);
}
}
@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();
}
}
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);
}
}
META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.naixue.springboot.starter.UUIDAutoConfiguration
<dependency>
<groupId>com.naixue.springbootgroupId>
<artifactId>nx-uuid-starterartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
@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();
}
}