作者:風.foxwho
foxwho.blog.csdn.net/article/details/90200602
因爲升級 使用springboot2.x java 11 的關係,根據官方文檔和網上其他作者配置的怎麼也配置不成功,最後自己一步一步升級引入依賴,修改增加接口注入來源,最後成功。
https://github.com/foxiswho/java-spring-boot-uid-generator-baidu
部分升級說明
這裏的升級,是升級 官方 代碼依賴
官方代碼地址:https://github.com/baidu/uid-generator
-
升級spring boot 版本:2.0.7.RELEASE -
升級 mybatis,mybatis-spring 版本 -
升級 mysql-connector-java 版本:8.0.12 -
升級 junit 版本
創建數據庫存
導入官網數據庫SQL
https://github.com/baidu/uid-generator/blob/master/src/main/scripts/WORKER_NODE.sql
也就是一張表
我這裏是在demo庫中,創建了這張表
DROP TABLE IF EXISTS WORKER_NODE;
CREATE TABLE WORKER_NODE
(
ID BIGINT NOT NULL AUTO_INCREMENT COMMENT 'auto increment id',
HOST_NAME VARCHAR(64) NOT NULL COMMENT 'host name',
PORT VARCHAR(64) NOT NULL COMMENT 'port',
TYPE INT NOT NULL COMMENT 'node type: ACTUAL or CONTAINER',
LAUNCH_DATE DATE NOT NULL COMMENT 'launch date',
MODIFIED TIMESTAMP NOT NULL COMMENT 'modified time',
CREATED TIMESTAMP NOT NULL COMMENT 'created time',
PRIMARY KEY(ID)
)
COMMENT='DB WorkerID Assigner for UID Generator',ENGINE = INNODB;
如果報錯,基本上是時間問題,因爲mysql 低版本控制比較嚴格,解決方法有多種方式
方式一:
直接把TIMESTAMP改成DATETIME 即可
方式二:
執行SQL 語句前先執行:
set sql_mode="NO_ENGINE_SUBSTITUTION";
mysql 配置信息更改
uid-generator 下,測試文件夾下的資源包uid/mysql.properties
mysql.driver=com.mysql.cj.jdbc.Driver
修改完成後,配置好數據庫相關參數,這樣單元測試即可執行成功
案例
計劃將全局生成唯一ID作爲一個服務提供者,供其他微服務使用調用
這裏創建了一個項目,項目中包含兩個子項目一個是uid-generator官方本身,當然你也可以不需要放到本項目中,直接使用官方的自行打包即可,一個是uid-provider 服務提供者
以下說明的主要是服務提供者
創建 子項目 uid-provider
POM配置文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>java-spring-boot-uid-generator-baidu</artifactId>
<groupId>com.foxwho.demo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>uid-provider</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--for Mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>8.0.12</version>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.foxwho.demo</groupId>
<artifactId>uid-generator</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
複製 mapper
先在uid-provider項目資源包路徑下創建mapper文件夾,然後到官方uid-generator資源包路徑下META-INF/mybatis/mapper/WORKER_NODE.xml
複製WORKER_NODE.xml
文件,粘貼到該文件夾mapper內
cache id 配置文件
先在uid-provider項目資源包路徑下創建uid文件夾,然後到官方uid-generator 測試 [注意:這裏是測試資源包] 資源包路徑下uid/cached-uid-spring.xml
複製cached-uid-spring.xml
文件,粘貼到該文件夾uid內
最後根據需要 配置參數,可以看官方說明
創建 spring boot 啓動入口
主要就是加上註解@MapperScan("com.baidu.fsg.uid")
讓mybatis能掃描到Mapper類的包的路徑
package com.foxwho.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@SpringBootApplication
@MapperScan("com.baidu.fsg.uid")
public class ConsumerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ConsumerApplication.class).run(args);
}
}
創建配置
package com.foxwho.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
@Configuration
@ImportResource(locations = { "classpath:uid/cached-uid-spring.xml" })
public class UidConfig {
}
創建服務接口
package com.foxwho.demo.service;
import com.baidu.fsg.uid.UidGenerator;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class UidGenService {
@Resource(name = "cachedUidGenerator")
private UidGenerator uidGenerator;
public long getUid() {
return uidGenerator.getUID();
}
}
主要說明一下@Resource(name = "cachedUidGenerator") 以往錯誤都是少了這裏,沒有標明注入來源
控制器
package com.foxwho.demo.controller;
import com.foxwho.demo.service.UidGenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UidController {
@Autowired
private UidGenService uidGenService;
@GetMapping("/uidGenerator")
public String UidGenerator() {
return String.valueOf(uidGenService.getUid());
}
@GetMapping("/")
public String index() {
return "index";
}
}
項目配置文件
server.port=8080
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
啓動項目
從啓動入口,啓動
訪問瀏覽器
http://localhost:8080/uidGenerator
頁面輸出
13128615512260612
如有文章對你有幫助,
“在看”和轉發是對我最大的支持!
推薦
,
GitHub
書籍倉庫
https://github.com/ebooklist/awesome-ebooks-list
整理了大部分常用 技術書籍PDF,持續更新中... 你需要的技術書籍,這裏可能都有...
點擊文末“閱讀原文”可直達
整理不易,麻煩各位小夥伴在GitHub中來個Star支持一下
本文分享自微信公衆號 - Java專欄(finishbug)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。