数据字典自动生成器 database-dictionary 1.0 发布
鉴于企业开发过程中数据字典难维护,我们团队参考阿里云数据库管理中的数据字典展示,进行了一个克隆。当前 1.0 版本只支持 MySQL 数据库,关联您的数据库后,可以自动生成 PDF 文件格式的数据字典文档。 例如:
mica 云母,寓意为云服务的核心,增强 Spring cloud 功能,使得 Spring cloud 服务开发更加方便快捷。
mica 基于 java 8,没有历史包袱,支持传统 Servlet 和 Reactive(webflux)。采用 mica-auto 自动生成 spring.factories 和 spring-devtools.properties 配置,仅依赖 Spring boot、Spring cloud 全家桶,无第三方依赖。市面上鲜有的微服务核心组件。
| 依赖 | 版本 |
|---|---|
| Spring | 5.x |
| Spring Boot | 2.1.x |
| Spring Cloud | Greenwich 版 |
⚡️ mica-plus-redis 添加 redis 限流组件.
⚡️ mica-http Response asDocument 方法迁移到 DomMapper,不强制依赖 jsoup.
⚡️ mica-http CssQuery 添加正则取值处理.
⚡️ mica-http 优化 DomMapper 添加更多方法.
⚡️ mica-http proxy 改用 MethodInterceptor.
🐛 mica-cloud Fixing Feign feignContract mvcConversionService.
⚡️ mica-core 优化 Exceptions.unchecked 方法使异常抛出更准确.
⚡️ mica-core 拆分 lambda Try 为 Unchecked.
🐛 优化 gradle 配置,自动发布 snapshots 版本.
🏗 迁移 spring-cloud-alibaba 依赖到新版。
⬆️ Spring boot 升级到 2.1.7.RELEASE.
mica-plus-redis 组件采用 lua 脚本和 aop 使用起来更加方便。
mica: redis: rate-limiter: enable: true
@RateLimiter
注解变量:
/** * 限流的 key 支持,必须:请保持唯一性 * * @return key */ String value(); /** * 限流的参数,可选,支持 spring el # 读取方法参数和 @ 读取 spring bean * * @return param */ String param() default ""; /** * 支持的最大请求,默认: 2500 * * @return 请求数 */ long max() default 2500L; /** * 持续时间,默认: 3600 * * @return 持续时间 */ long ttl() default 3600L; /** * 时间单位,默认为秒 * * @return TimeUnit */ TimeUnit timeUnit() default TimeUnit.SECONDS;
@Autowired private RateLimiterClient rateLimiterClient;
方法:
/** * 服务是否被限流 * * @param key 自定义的key,请保证唯一 * @param max 支持的最大请求 * @param ttl 时间,单位默认为秒(seconds) * @return 是否允许 */ boolean isAllowed(String key, long max, long ttl); /** * 服务是否被限流 * * @param key 自定义的key,请保证唯一 * @param max 支持的最大请求 * @param ttl 时间 * @param timeUnit 时间单位 * @return 是否允许 */ boolean isAllowed(String key, long max, long ttl, TimeUnit timeUnit); /** * 服务限流,被限制时抛出 RateLimiterException 异常,需要自行处理异常 * * @param key 自定义的key,请保证唯一 * @param max 支持的最大请求 * @param ttl 时间 * @param supplier Supplier 函数式 * @return 函数执行结果 */ <T> T allow(String key, long max, long ttl, CheckedSupplier<T> supplier); /** * 服务限流,被限制时抛出 RateLimiterException 异常,需要自行处理异常 * * @param key 自定义的key,请保证唯一 * @param max 支持的最大请求 * @param ttl 时间 * @param supplier Supplier 函数式 * @return 函数执行结果 */ <T> T allow(String key, long max, long ttl, TimeUnit timeUnit, CheckedSupplier<T> supplier);
@GetMapping("test1")
@RateLimiter(value = "test1", param = "#name", max = 2)
@ResponseBody
public String test1(String name) {
return "hello:" + name;
}
@Autowired
private RateLimiterClient rateLimiterClient;
@GetMapping("test2")
@ResponseBody
public String test2(String name) {
return rateLimiterClient.allow("test2", 2, 3, () -> testService.test(name));
}
// 同步,异常返回 null
Oschina oschina = HttpRequest.get("https://www.oschina.net")
.execute()
.onSuccess(responseSpec -> responseSpec.asDomValue(Oschina.class));
if (oschina == null) {
return;
}
System.out.println(oschina.getTitle());
System.out.println("热门新闻");
List<VNews> vNews = oschina.getVNews();
for (VNews vNew : vNews) {
System.out.println("title:\t" + vNew.getTitle());
System.out.println("href:\t" + vNew.getHref());
System.out.println("时间:\t" + vNew.getDate());
}
System.out.println("热门博客");
List<VBlog> vBlogList = oschina.getVBlogList();
for (VBlog vBlog : vBlogList) {
System.out.println("title:\t" + vBlog.getTitle());
System.out.println("href:\t" + vBlog.getHref());
System.out.println("阅读数:\t" + vBlog.getRead());
System.out.println("评价数:\t" + vBlog.getPing());
System.out.println("点赞数:\t" + vBlog.getZhan());
}
@Getter
@Setter
public class Oschina {
@CssQuery(value = "head > title", attr = "text")
private String title;
@CssQuery(value = "#v_news .page .news", inner = true) // 标记为嵌套模型
private List<VNews> vNews;
@CssQuery(value = ".blog-container .blog-list div", inner = true) // 标记为嵌套模型
private List<VBlog> vBlogList;
}
@Setter
@Getter
public class VNews {
@CssQuery(value = "a", attr = "title")
private String title;
@CssQuery(value = "a", attr = "href")
private String href;
@CssQuery(value = ".news-date", attr = "text")
@DateTimeFormat(pattern = "MM/dd")
private Date date;
}
@Getter
@Setter
public class VBlog {
@CssQuery(value = "a", attr = "title")
private String title;
@CssQuery(value = "a", attr = "href")
private String href;
//1341阅/9评/4赞
@CssQuery(value = "span", attr = "text", regex = "^\\d+")
private Integer read;
@CssQuery(value = "span", attr = "text", regex = "(\\d*).*/(\\d*).*/(\\d*).*", regexGroup = 2)
private Integer ping;
@CssQuery(value = "span", attr = "text", regex = "(\\d*).*/(\\d*).*/(\\d*).*", regexGroup = 3)
private Integer zhan;
}
文档地址(官网):https://www.dreamlu.net/#/doc/docs
文档地址(语雀-可关注订阅):https://www.yuque.com/dreamlu/mica
微信关注我们
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。
马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。