Spring Boot

Spring Boot Quartz 分布式集群任务调度实现

不打扰是莪最后的温柔 提交于 2021-02-10 22:48:39
Spring Boot Quartz 主要内容 Spring Scheduler 框架 Quartz 框架,功能强大,配置灵活 Quartz 集群 mysql 持久化定时任务脚本(tables_mysql.sql) 介绍 在工程中时常会遇到一些需求,例如定时刷新一下配置、隔一段时间检查下网络状态并发送邮件等诸如此类的定时任务。 定时任务本质就是一个异步的线程,线程可以查询或修改并执行一系列的操作。由于本质是线程,在 Java 中可以自行编写一个线程池对定时任务进行控制,但这样效率太低了,且功能有限,属于重复造轮子。 分布式任务调度应用场景 Quartz的集群功能通过故障转移和负载平衡功能为您的调度程序带来高可用性和可扩展性。 调度程序中会有很多定时任务需要执行,一台服务器已经不能满足使用,需要解决定时任务单机单点故障问题。 用Quartz框架,在集群环境下,通过数据库锁机制来实现定时任务的执行;独立的 Quartz 节点并不与另一其的节点或是管理节点通信。 Spring Scheduler 实现定时任务 1.定义 Task 类 /** * Spring Scheduled示例 */ @Component public class ScheduledTask { private static final SimpleDateFormat dateFormat = new

JAR冲突问题的解决

心已入冬 提交于 2021-02-10 19:48:57
今天碰到群里小伙伴问,线上程序好像有多个不同版本的Netty包,怎么去看到底加载了哪一个? 在说如何看之前,先来说说,当你开始意识到项目里有多个不同版本的Jar包,都是因为遇到了这几个异常: 1、java.lang.NoSuchMethodException:自己代码中调用了某个方法,因为加载了其他版本的jar,这个版本正好没这个方法。 2、java.lang.NoClassDefFoundError:编译时候是好的,但是运行的时候,因为加载的jar版本问题,没有这个类。 3、java.lang.ClassNotFoundException:在动态加载某个Class的时候,因为要加载的jar不是正确的版本,而导致找不到这个类。 当你在本地运行ok,但到服务器上发现出现这些错误的时候,就要意识到很可能是jar冲突了(有相同依赖存在多个版本)。这个问题往往也会有这样的表现:多实例部署的时候,有的实例是好的,有的实例则不行。 查看加载的类和方法 根据之前分析的异常种类,我们可以去运行中的现场确认当前加载的问题。 这里我们可以使用阿里开源的Arthas工具,如果第一次用,那么按下面操作先安装再运行: curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar 运行好之后

二零一八年的年终回顾总结

两盒软妹~` 提交于 2021-02-10 18:30:26
题图 From unsplash 翻开年初用脑图整理的计划,拧巴着硬是往完成上面靠,还是没全部达成,生活总是这样,如果都能达成真应了那句老话:万事如意,一帆风顺,事事顺心。 前两天整理了今年的书单[ 2018年大龄程序员书单 ],有些囫囵吞枣,有些细嚼慢咽,不敢说从书中学到了多少东西,只希望某一天能用书中所述解决些实际问题。剩下的问题就是把书单中拉出来未读的读完。 微信公号文章90+,中间有些朋友的投稿,算来也写两年半的时间,找到点写作的感觉。当然还摆脱不了功利心,盼着有多少阅读量,多少订阅量。2019年要提高写作频率,提高读书笔记的数量。 从珠海去了趟澳门,也算是见识了另一个制度下的中国。出去走走的计划是完成了,但个人锻炼的计划近乎荒废,没有持续性。越发感觉有个好身体是多么的重要,行业里那么多猝死的新闻也是让人胆寒心惊。 新年里行、动起来,此flag为证。 技术学习上没有原定计划走,更多的关注点放在了大前端与区块链上面。前端技术近几年百花齐放,如果不停的学习前端框架的话,几乎跟不上更新的速度。作为后知后觉者接触到了比特币、区块链,顺手也买了些,亏的很惨是肯定的。嗅觉敏感度还差很多,不能有效捕捉到机会。搞技术的,对市场总欠缺些经验,跟工种是对内的有一定关系,更多的还是与个人有关系。[ 技术设计的狭隘性 ] 某媒体称今年只要你不碰加密币、不碰A股、不碰P2P、不碰风险系数高的基金等等

【记录】SpringBoot 2.X整合Log4j没有输出INFO、DEBUG等日志信息解决方案

旧城冷巷雨未停 提交于 2021-02-10 12:00:41
【记录】SpringBoot 2.X整合Log4j没有输出INFO、DEBUG等日志信息解决方案 参考文章: (1)【记录】SpringBoot 2.X整合Log4j没有输出INFO、DEBUG等日志信息解决方案 (2)https://www.cnblogs.com/xfearless/p/log4j.html 备忘一下。 来源: oschina 链接: https://my.oschina.net/stackoom/blog/4951924

SpringBoot系列-整合Mybatis(XML配置方式)

一笑奈何 提交于 2021-02-10 11:44:52
本文介绍下SpringBoot整合Mybatis(XML配置方式)的过程。 [TOC] 一、什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 二、整合方式 SpringBoot整合Mybatis也有两种方式,分别为XML配置方式和注解方式,主要优势点如下: 注解方式:代码更加精简,方便。 XML配置方式:隔离sql和业务代码,清晰表达sql,尤其对于较长的sql。 XML映射文件也很简单,只有很少的几个顶级元素: cache – 对给定命名空间的缓存配置。 cache-ref – 对其他命名空间缓存配置的引用。 resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。 sql – 可被其他语句引用的可重用语句块。 insert – 映射插入语句。 update – 映射更新语句。 delete – 映射删除语句。 select – 映射查询语句。 本文介绍XML配置方式,后续文章再介绍注解方式。 三、实战

某hub图片看不了?很着急啊!

断了今生、忘了曾经 提交于 2021-02-10 10:00:09
一个很难受的问题 朋友,你们逛全球最大的同性交友网站 Github 的时候,是否遇到过这个问题? 图片都无法显示了。这是什么情况?我已经遇到过好几次了,之前没时间管它,不过一直这样也不是办法啊,太难受了😒!今天我来探探究竟。 一探究竟 猜测:难道是缓存问题? 于是我使用组合键 ctrl + f5 强制刷新了一下网页,发现不起作用。我又打开 f12 ,强制清除缓存: 还是不行,图片依旧无法显示。 但是我打开 f12 后注意到一个问题,console里面一片红色: 看这样子应该是因为网络问题,加载图片资源失败了。 考虑到github是国外的网站,难道是被墙了? 应该不是,除了图片之外的代码和文档都可以访问,我猜测应该是图片服务器访问失败了。 于是我定位到图片的地址,看看这些图片是从哪个服务器请求的。 使用这个小箭头点击网页上图片的位置,可以看到源码: 然后我看到一个头像的图片地址是: https://avatars.githubusercontent.com/u/3961183?s=64&v=4 新打开一个窗口访问下这个地址: 哦豁,果然不出所料,无法访问。 域名映射IP 那么问题出在哪里呢?我打开百度一顿搜索,找到了答案: 这位网友说出现这个问题,一般有三种情况: dns污染 host设置错误 官方更新了dns,但是dns缓存没有被更新,导致错误解析。 OK,知道问题的原因

SpringBoot是如何加载配置文件的?

 ̄綄美尐妖づ 提交于 2021-02-10 08:59:26
前言 本文针对版本 2.2.0.RELEASE 来分析SpringBoot的配置处理源码,通过查看SpringBoot的源码来弄清楚一些常见的问题比如: SpringBoot从哪里开始加载配置文件? SpringBoot从哪些地方加载配置文件? SpringBoot是如何支持 yaml 和 properties 类型的配置文件? 如果要支持 json 配置应该如何做? SpringBoot的配置优先级是怎么样的? placeholder是如何被解析的? 带着我们的问题一起去看一下SpringBoot配置相关的源代码,找出问题的答案。 SpringBoot从哪里开始加载配置文件? SpringBoot加载配置文件的入口是由 ApplicationEnvironmentPreparedEvent 事件进入的,SpringBoot会在SpringApplication的构造函数中通过 spring.factories 文件获取ApplicationListener的实例类: public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { ... setListeners((Collection) getSpringFactoriesInstances

SpringBoot加Poi仿照EasyPoi实现Excel导出

浪子不回头ぞ 提交于 2021-02-10 08:02:30
POI提供API给Java程序对Microsoft Office格式档案读和写的功能,详细功能可以直接查阅API,因为使用EasyPoi过程中总是缺少依赖,没有搞明白到底是什么坑,索性自己写一个简单工具类,来实现无论传入任何对象集合,都能够实现导出Excel的功能,没有看EasyPoi的源码, 只是在功能上模仿一下。 首先导入基本依赖,除了SpringBoot基本依赖依赖,导入Poi的依赖 <!-- https: // mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version> 3.17 </version> </dependency> <!-- https: // mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version> 3.17 </version> </dependency> 编写自定义注解 @Retention

在 Spring Boot 2 中致敬 JSP

百般思念 提交于 2021-02-10 06:01:00
新冠病毒🦠还在阻挡全世界重启,但我们学习脚步不不能停滞,接下来给大家展示一个现在开发中已经不太常用的一个小知识点,希望对大家有所启发。 在平时 大家可能用 Spring Boot 2 最多就是开发 RESTful API,可能很少有人在 Spring Boot 2 中用过JSP视图,那我就来一起体验下创建一个用 JSP 视图的 Spring Boot 2 应用有多么方便。 一起来看看我们需要些什么 项目结构 咱们可以从 Spring Initializer 获取项目框架。 项目依赖 <u>pom.xml</u> <?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"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId>

SpringBoot系列-整合Mybatis(注解方式)

*爱你&永不变心* 提交于 2021-02-10 05:31:47
上一篇文章 《SpringBoot系列-整合Mybatis(XML配置方式)》 介绍了XML配置方式整合的过程,本文介绍下SpringBoot通过注解方式整合Mybatis的过程。 [TOC] 一、常用注解说明 @Mapper 可以给接口自动生成一个实现类,让spring对mapper接口的bean进行管理,并且可以省略去写复杂的xml文件。 @Options 配置映射语句的属性。例如:@Options(useGeneratedKeys = true, keyColumn = "id"):指定表的自增主键并自动绑定到实体类对象。 @Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。 @Param 如果你的映射方法的形参有多个,这个注解使用在映射方法的参数上就能为它们取自定义名字。若不给出自定义名字,多参数(不包括 RowBounds 参数)则先以 "param" 作前缀,再加上它们的参数位置作为参数别名。例如 #{param1}, #{param2}。 @Select、@Delete、@Insert、@Update 这四个注解分别代表将会被执行的 SQL 语句。它们用字符串数组(或单个字符串)作为参数。如果传递的是字符串数组,字符串之间先会被填充一个空格再连接成单个完整的字符串。 二、实战