1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * SHA256安全散列算法 * * @author 冯龙生 */ public class Sha256Util { /** * 安全散列算法摘要 * * @param plainText 明文 * @return 密文 */ public static String encrypt(String plainText) { MessageDigest messageDigest; String result = ""; try { messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.update(plainText.getBytes(StandardCharsets.UTF_8)); result = byteToHex(messageDigest.digest()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return result; } /** * 将byte转为16进制 * * @param bytes 字节码 * @return 16进制字符串 */ private static String byteToHex(byte[] bytes) { StringBuilder result = new StringBuilder(); String temp; for (byte item : bytes) { temp = Integer.toHexString(item & 0xFF); if (temp.length() == 1) { result.append("0"); } result.append(temp); } return result.toString(); } public static void main(String[] args) { String sha256Str = encrypt("111111"); System.out.println(sha256Str); } } |
View Details
tkmybatis 是对底层 sql 进行了抽象封装,不需要考虑 sql 怎么写,只需要按照逻辑思维,遵循 tkmybatis 的语法即可实现数据库操作。 本文适合对springboot项目结构有一定了解的读者。 本文的项目基础是一个demo项目(多模块的)。 1. 配置 1、添加 tkmybatis 的依赖
1 2 3 4 5 |
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency> |
2、创建 dao 层的 mapper 接口,每个接口都要继承 tk.mybatis.mapper.common.Mapper 接口。此接口的形式为 Mapper<T>,带了个泛型,此泛型一般指的是对应的 pojo 或者 domain。比如:
1 2 |
public interface HouseMapper extends Mapper<House> { } |
3、在 Application 启动类上添加 mapper 扫描注解,表示要扫描到 dao 层的 mapper 接口。 比如本项目的mapper接口就统一放在 com.dgh.dao 下面,用 @MapperScan(basePackages = "包名") 来指定。 附注:在项目启动时,springboot 会自动扫描 Application 启动类所在的当前目录以及下一级目录,一般 Application 启动类都放在根目录,所以在单一项目下,只要是在 Java 类上添加了注解,都能够默认被 springboot 扫描到,并被添加到 springboot 的容器中,一般不需要特别用 @ComponentScan 去指定 springboot 要扫描哪些目录。 本文之所以特地用 @ComponentScan 去指定了 service 层和 controller 层的目录,是因为本文的项目是一个多模块项目,service 层和 controller 层各自都是一个独立的模块,与 Application 启动类不在同一目录下。
1 2 3 4 5 6 7 8 9 |
@SpringBootApplication @MapperScan(basePackages = "com.dgh.dao") @ComponentScan(basePackages = "com.dgh.service") @ComponentScan(basePackages = "com.dgh.controller") public class ControllerApplication { public static void main(String[] args) { SpringApplication.run(ControllerApplication.class, args); } } |
4、tkmybatis 具体的使用是在 service 层,service 层又分为接口和接口实现类,具体就在接口实现类里面。 5、其它的代码、配置与普通的springboot项目一样。 2. tkmybatis的结构 下图是 tkmybatis 的结构图,圈中的是 Mapper 接口,是最底层的,也就意味着它继承了所有的功能。因此才有了 […]
View Details一、用 plusDays() 方法将 Java 中的日期增加一天
二、用 Calendar 方法将 Java 中的日期增加一天
三、用 Milliseconds 方法将 Java 中的日期增加一天
四、用 Instant 类向 Java 日期添加一天
解析JSON, 并将其转换为对应的数据结构。
例如,简单对象,或者复杂的泛型对象
JSON.parseObject(JSON.toJSONString(param), new TypeReference
Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配。
View Details客户线上问题,应该如何复现,让客户再点一下吗?
异常被吃掉,手足无措,看是哪个家伙写的,竟然是自己!
排查别人线上的 bug,不仅代码还没看懂,还没一行日志,捏了一把汗!
预发 debug,稍微时间长点,群里就怨声载道!
加日志重新部署,半个小时就没了,问题还没有找到,头顶的灯却早已照亮了整层楼……
线上机器不能 debug,也不能开 debug 端口,重新部署会不会破坏现场呢?
怀疑入参有问题,怀疑合并代码有问题,怀疑没有部署成功,全是问号……
一个问题排查一天,被 Diss 排查问题慢……
微服务架构以将复杂的应用程序分解为易管理的服务而闻名,然而,管理微服务是一项具有挑战性的任务。为了确保开发工作流程的高效性,需要采用特定的工具。
在本文中,小编将为您介绍2023年最热的11款后端微服务开发工具,并全面介绍它们的基本功能和常见用例。不论您是经验丰富的微服务开发人员,还是初涉微服务领域的新手,本文都将为您提供宝贵的见解和剖析。
View DetailsIdea插件总结 自动生成文档注释 集成插件:Easy Javadoc 一个自动帮你完成JavaDoc注释的IDEA插件! 下载地址: 传送 使用说明: Windows: 鼠标放在方法上面,然后在按 Ctrl + **MAC:**鼠标放在方法上面,然后在按 command + \ 可以对文档注释中的作者名、日期格式等进行相关设置,还可以设置翻译渠道(如百度翻译、有道翻译等) 注释快捷展示 集成插件:Show Comment 在对项目不太熟悉的情况下,对于快速了解项目,梳理业务逻辑,此插件还是比较实用的,提升工程熟悉进度! 下载地址: 传送 配置: 彩色括号 集成插件:Rainbow Brackets Lite 彩虹括号,代码中存在多个括号,分不清范围,使用此插件可以一眼能看出来! 下载地址: 传送 区域代码高亮功能: Mac快捷键: cmd + 鼠标右键; **Windows快捷键:**Ctrl + 鼠标右键 彩色控制台 集成插件:Grep Console 可以通过expression表达式过滤日志、给不同级别的日志或者给不同pattern的日志加 下载地址: 传送 代码收藏夹 集成插件:iCode 它是一个代码片段收藏夹工具,页面十分简洁优雅,抛弃了传统的文件夹收藏的方式,通过标签做分类,支持标签和内容搜索。 时序图生成 集成插件:Sequence Diagram 软件背景图片由于需要绝对地址,每个人的电脑路径不一,所以请自行配置,菜单View找到最下面的set background img,选中背景图即可! 可以为输出的日志修改颜色,具体配置请在设置中Other Settings中找到GrepConsole即可! 下载地址: 传送 点击小扳手的图标,主要配置如下: call depth,用于配置调用深度,默认是5层; display only project classes ,勾选中表示仅展示本工程内的源码调用关系,不包含依赖包里的; skip getters/setters,勾选中表示时序图中会跳过get方法和set方法的调用关系; skip private methods,勾选中表示时序图中会跳过私有方法之间的调用关系; skip constructors,勾选中表示时序图中会跳过构造方法的调用关系; 阿里云智能编码插件 插件说明:智能编码,代码补全,代码搜索,代码示例搜索,代码文档搜索,代码生成 官网: 传送 Cloud Toolkit 插件说明:帮助开发者更高效地部署、测试、开发和诊断应用 官网: 传送 sh脚本(第一版): bash 复制代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span class="code-block-extension-codeLine" data-line-num="1"><span class="hljs-meta">#!/bin/bash -e</span></span> <span class="code-block-extension-codeLine" data-line-num="2"><span class="hljs-comment">#Author:小飞</span></span> <span class="code-block-extension-codeLine" data-line-num="3"><span class="hljs-comment">#Version:V1.0</span></span> <span class="code-block-extension-codeLine" data-line-num="4"><span class="hljs-comment">#Function:Cloud Toolkit部署Jar脚本</span></span> <span class="code-block-extension-codeLine" data-line-num="6"><span class="hljs-comment"># 日志名称</span></span> <span class="code-block-extension-codeLine" data-line-num="7"><span class="hljs-built_in">source</span> /etc/profile</span> <span class="code-block-extension-codeLine" data-line-num="8">jarName=demo.jar</span> <span class="code-block-extension-codeLine" data-line-num="10">PID=`ps -ef|grep <span class="hljs-variable">$jarName</span> |grep -v grep|awk <span class="hljs-string">'{print $2}'</span> `</span> <span class="code-block-extension-codeLine" data-line-num="11"><span class="hljs-keyword">if</span> [ -n <span class="hljs-string">"<span class="hljs-variable">$PID</span>"</span> ]; <span class="hljs-keyword">then</span></span> <span class="code-block-extension-codeLine" data-line-num="12"> <span class="hljs-built_in">kill</span> -9 <span class="hljs-variable">$PID</span></span> <span class="code-block-extension-codeLine" data-line-num="13"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"结束<span class="hljs-variable">$PID</span>进程"</span></span> <span class="code-block-extension-codeLine" data-line-num="14"><span class="hljs-keyword">fi</span></span> <span class="code-block-extension-codeLine" data-line-num="15"><span class="hljs-built_in">nohup</span> java -jar /www/wwwroot/java/<span class="hljs-variable">$jarName</span> > demo.out 2>&1 &</span> <span class="code-block-extension-codeLine" data-line-num="16"><span class="hljs-built_in">echo</span> <span class="hljs-string">"部署完毕!!!"</span></span> |
sh脚本(第二版): 第二版主要针对SpringBoot瘦身版使用 […]
View Details日常开发中,相信广大 Java 开发者都使用过 IntelliJ IDEA 作为开发工具,IntelliJ IDEA 是一款优秀的 Java 集成开发环境,它提供了许多强大的功能和快捷键,可以帮助开发者提高编码效率和质量。除了一些常见的技巧,如自动导包、智能补全、重构工具等。IntelliJ IDEA 还有一些不为人知的技巧,可能很多开发者都没有注意到或者使用过。本文就在为你介绍博主常用的五个 IntelliJ IDEA 使用技巧,希望能够给你带来一些工作效率上的提升。本文内容大纲如下:
注释对齐
快速创建包目录/文件夹
快付复制类代码生成 Java 类
多实例启动
分支比较
Java生态系统拥有庞大而多样化的开源项目,旨在满足几乎所有想象得到的需求。很容易错过其中一些伟大的项目。以下是七个开源Java项目,涵盖从全栈应用程序开发到微服务、Wasm和JVM替代方案的所有内容。 ▌Vaadin’s Hilla Hilla是一个全栈框架,具有基于Java的后端和JavaScript前端。它支持响应式前端框架React和Lit。Hilla让您使用一个简单的命令来构建一个新的全栈项目:npx @vaadin/cli init --hilla foundry-hilla。这是一个NPM命令,但它将部署一个标准的Maven布局,带有一个使用Vite构建的前端目录,一切都准备好与./mvnw脚本一起运行。 Hilla在两个应用程序部分之间强制执行类型,这意味着您的IDE可以检测并传播Java API和消耗它的TypeScript前端之间的更改。在这个框架中,自动完成和重构都可以正常工作。这个功能在全TypeScript世界中的感觉类似于tRPC。 Hilla还通过JPA(在Hibernate上)集成了一些SQL数据库,如MySQL和PostgreSQL。 它有点像jHipster,但更有见解。这意味着Hilla在可以将技术粘合在一起方面不太灵活,但它为您提供了更平滑的道路。Hilla得到了良好的维护和文档支持。如果您需要使用Java构建全栈应用程序,并且如果您喜欢React或Lit作为前端,那么Hilla是一个值得考虑的优秀框架。 ▌jHipster 继续全栈框架的主题,我们有jHipster。jHipster采用非常灵活的方法,可以将多种不同的技术统一到一个使用Java作为API中间件的协同堆栈中。您可以选择几个响应式前端和各种SQL和NoSQL数据存储。 与Hilla类似,jHipster首先通过NPM包jhipster-generator工具生成应用程序。生成器将引导您完成一个问卷调查,让您对其功能有一个很好的了解。 jHipster首先让您选择单片应用程序、微服务架构或网关,让您对该框架的范围有一些了解。如果您选择单片,您就可以使用Spring WebFlux将其变成响应式样式的应用程序。接下来,您可以选择不同的身份验证样式,如JWT或Oauth 2。然后,您可以从几个数据存储中选择,如SQL、MongoDB和Cassandra,然后是第二级应用程序缓存,如Ehcache、Memcached或Redis。 jHipster生成器接下来允许添加一些其他技术:Elasticsearch用于搜索引擎,使用Spring WebSocket的WebSockets,作为异步消息代理的Apache Kafka,以及使用OpenAPI-generator的API-first开发。接下来,您可以从几个前端框架中选择,并在需要时生成管理UI,以及几个主题。 jHipster还具有国际化和测试功能,并支持Maven和Gradle。 这是相当强大的。还可以生成域模型、数据结构和与之配套的UI。jHipster是构建许多类型的Java应用程序的绝佳选择。 ▌GraalVM GraalVM项目始于2018年3月,旨在提供更广泛的虚拟机实现。GraalVM可以做到JVM所能做的一切,甚至更多:它允许消耗各种语言,并输出到各种目标执行环境。它还包括几种编译器样式,包括可以增强性能的JIT(即时)编译器。 GraalVM可以运行任何编译为LLVM的语言,包括C、C++、Rust、Swift等。它还处理字节码语言,如Java、Scala、Kotlin和Groovy。它还支持JavaScript、Python、Ruby和R语言。(未来,我们可以希望看到GraalVM支持Zig。) 这意味着我们可以获得JVM的所有一次编写,随处运行的好处,适用于各种语言。例如,GraalVM可以接受使用GCC编译为LLVM字节码的C程序,并使用lli命令运行它。或者,GraalVM可以使用clang将C代码直接编译为可执行文件。GraalVM为许多(但不是所有)语言和平台输出独立的执行版本。 它还包括对许多目标二进制文件的支持,如Wasm、Linux变体、macOS、Windows、iOS和Android。对于许多目标,GraalVM支持无需安装GraalVM即可运行的本机映像。它还允许开发人员选择执行模式,如JIT编译、AOT编译和解释,以微调性能配置文件。 GraalVM得到了良好的维护和文档支持,并拥有一个活跃的社区。总的来说,它是一个引人注目的项目,正在逐渐成为一种通用语言工具。请访问GraalVM项目主页以了解更多信息。 ▌Micronaut Micronaut是Java开发的一种新方法,旨在面向现代云和无服务器环境。它具有丰富的功能,如用于脚手架、构建、执行和测试具有一系列集成技术的项目的命令行工具。也许最重要的是,Micronaut是围绕一个启用AOT的控制反转(IOC)框架设计的,可以在面对大型代码库时保持启动时间。 此外,它还支持面向微服务的功能,如服务发现、跟踪和容器化部署,因此Micronaut是现代Java开发的一个经过深思熟虑和引人注目的选择。 Micronaut提供了一个基于Web的项目设计工具,您可以使用它来了解可以插入Micronaut核心的工具范围。这个工具在精神上类似于Spring Initializr或jHipster的在线生成器,但它采用了自己的方式。Micronaut在其核心是反应式的,支持像RxJava和Reactor这样的反应式实现,其他所有内容都建立在这个中心支柱之上。Micronaut包括自己的反应式HTTP客户端。 Micronaut中的每个节点都是一个反应式组件,可以组合成更大的微服务架构,使用像ZooKeeper或Eureka这样的中央服务代理。 Micronaut使得采用最佳实践变得容易,它是一个类似于Spring的一站式框架,但更加专注于具体的实现细节。对于在基于Java的云和无服务器环境中工作的开发人员来说,这是一个令人心动的选择。 ▌MicroStream 在基于Java的面向对象持久性的演变中,MicroStream可能代表了最终的概念精炼。它以原样接受您的运行时对象图,并允许将其以面向对象编程语义持久化到任意数量的底层数据存储中。 MicroStream允许您保持在对象和属性的思维领域中,而框架则完成了大部分保存和恢复工作。作为开发人员,您仍然需要考虑元关注点,如获取策略和持久性边界,但这些定义简单,大部分不会干扰应用程序代码,应用程序代码的工作方式与不考虑持久性时一样。 MicroStream包括根的概念,它定义了持久化树的根。一个应用程序可以有多个根,如表1所示。 列表1. MicroStream保存和恢复数据 ini 复制代码
1 2 3 4 5 6 7 8 |
<span class="code-block-extension-codeLine" data-line-num="1">// Saving</span> <span class="code-block-extension-codeLine" data-line-num="2">EmbeddedStorageManager <span class="hljs-attr">manager</span> =EmbeddedStorage.start()<span class="hljs-comment">;</span></span> <span class="code-block-extension-codeLine" data-line-num="3">manager.setRoot(myObject)<span class="hljs-comment">;</span></span> <span class="code-block-extension-codeLine" data-line-num="4">manager.storeRoot()<span class="hljs-comment">;</span></span> <span class="code-block-extension-codeLine" data-line-num="5">//Restoring</span> <span class="code-block-extension-codeLine" data-line-num="6">EmbeddedStorageManager <span class="hljs-attr">storageEngine</span> =EmbeddedStorage.start()<span class="hljs-comment">;</span></span> <span class="code-block-extension-codeLine" data-line-num="7"><span class="hljs-attr">myObject</span> =(MyClass) storageEngine.root()<span class="hljs-comment">;</span></span> |
MicroStream是Java中有趣的新的面向对象持久性方法,对于任何新项目来说都值得一看。 ▌TeaVM 将Java编译为Wasm(WebAssembly)仍然是一项前沿技术,但是TeaVM使得这一点成为可能。TeaVM支持将Java字节码转换为JavaScript(类似于Google Web Toolkit)和Wasm。这些可以用于创建使用浏览器内部的Java代码和库的Web应用程序。 TeaVM的工作原理是首先将代码编译为低级中间表示形式,然后进一步优化并将其转换为WebAssembly指令。生成的代码非常高效,可以在支持WebAssembly的任何现代浏览器中运行。 TeaVM的主要优点之一是它对流行的Java框架(如Spring和Hibernate)的支持。开发人员可以使用这些框架构建复杂的全栈Web应用程序,然后将代码编译为Wasm以进行Web部署。 尽管TeaVM仍然是一个新兴的项目——创建者在日常工作中使用它,然后将修复和改进推送到开源存储库——但它似乎是目前从Java到Wasm的最佳路径。 总的来说,TeaVM是一个强大而灵活的工具,用于在Java中开发Web应用程序,并为在浏览器和其他Wasm环境中使用Java提供了一个有趣的途径。 ▌Apache Flink Flink于2011年开始,已经成长为领先的事件处理框架。许多知名公司如Airbnb和Netflix都在实时处理中使用它,并在相对容易管理的包中提供了很多强大的功能。 Apache Flink将容错和状态管理融入到分布式、容器友好的形式中。它可以自动缩放以处理动态负载。 虽然在Kubernetes中使用Docker运行Flink是典型的,但Flink也可以使用像Apache Beam这样的框架在AWS Lambda、Azure Functions和Google Cloud Functions等无服务器基础设施上运行。这提供了只支付处理期间使用的计算资源的好处,并允许更轻松、更高效的扩展。 Flink在内部具有很多功能,但简单的东西相当容易理解。例如,在表2中,Flink监视端口9999上的套接字,并计算接收到的文本中的单词,将数据输出到控制台。 列表2. 使用Flink进行简单文本处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
DataStream<String> text = env.socketTextStream("localhost",9999); DataStream<Tuple2<String,Integer>> wordCounts = text .flatMap(newFlatMapFunction<String,Tuple2<String,Integer>>(){ publicvoid flatMap(String value,Collector<Tuple2<String,Integer>>out){ for(String word : value.split(" ")){ out.collect(newTuple2<String,Integer>(word,1)); } } }) .keyBy(0) .sum(1); wordCounts.print(); |
您可以看到Flink使用函数式风格,平台本身以可扩展、容错的方式将功能扩展到云基础设施中。总的来说,这是一个处理实时事件处理的令人印象深刻的项目。 作者:Matthew Tyson 更多技术干货请关注公号“云原生数据库” squids.cn,基于公有云基础资源,提供云上 RDS,云备份,云迁移,SQL 窗口门户企业功能, 帮助企业快速构建云上数据库融合生态。 作者:Squids数据库云服务提供商 链接:https://juejin.cn/post/7236021829000871995 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Details