Spring Boot

Java定时任务

十年热恋 提交于 2020-12-22 06:34:01
Java定时任务--Scheduled 缘由:   定时任务其实能做很多事情,日常签到,提醒,定时获取数据.....。之前就有写定时任务的想法,直到现在才开始付出行动。第一阶段准备写的有:某某平台的签到,和某某平台的数据获取。后续可能会写默认点餐之类的吧(经常忘记点晚饭。。。) 开始入手:   定时任务最简单的办法就是sleep,之前有看到一个段子,“如何获取一天后的时间:Thread.sleep(1000*60*60*24);”   最后选择了SpringBoot+@Scheduled注解的方式,该方式通过Cron表达式设置时间(自行了解),使用起来还是很简单的。 Do it * 创建Maven项目   我使用的编辑器是IDEA,创建过程就省略了,默认大家都是可以的。 * 首先是创建Application.java package kylin; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication

基于spring-data 实现mongodb changestream

帅比萌擦擦* 提交于 2020-12-22 05:05:29
最近项目要求对mongodb的数据变更操作记录操作日志,首先想到的是基于spring的AOP对变更的接口进行拦截处理,由于调用接口的点很多不是很方便的去梳理,考虑使用mongodb的CDC机制,实时监控数据的变更。 首先是springboot集成mongodb,mongdb需要是3.6以上的版本才能支持changestream <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> </dependencies> 首先配置mongo监听器,用于接收数据库的变更信息 import com.mongodb.client.model.changestream.ChangeStreamDocument; import lombok.extern.slf4j. Slf4j

全网最全 | MySQL EXPLAIN 完全解读

北城余情 提交于 2020-12-22 04:23:45
点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达! EXPLAIN作为MySQL的性能分析神器,读懂其结果是很有必要的,然而我在各种搜索引擎上竟然找不到特别完整的解读。都是只有重点,没有细节(例如type的取值不全、Extra缺乏完整的介绍等)。 所以,我肝了将近一个星期,整理了一下。这应该是全网最全面、最细致的EXPLAIN解读文章了,下面是全文。 文章比较长,建议收藏。 TIPS 本文基于MySQL 8.0编写,理论支持MySQL 5.0及更高版本。 EXPLAIN使用 explain可用来分析SQL的执行计划。格式如下: {EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild] {EXPLAIN | DESCRIBE | DESC} [explain_type] {explainable_stmt | FOR CONNECTION connection_id} {EXPLAIN | DESCRIBE | DESC} ANALYZE select_statement explain_type: { FORMAT = format_name } format_name: { TRADITIONAL | JSON | TREE } explainable_stmt: { SELECT statement | TABLE

5. 穿过拥挤的人潮,Spring已为你制作好高级赛道

自闭症网瘾萝莉.ら 提交于 2020-12-22 04:23:08
❝ 分享、成长,拒绝浅藏辄止。关注公众号【 BAT的乌托邦 】,回复关键字 专栏 有Spring技术栈、中间件等小而美的 原创专栏 供以免费学习。本文已被 https://www.yourbatman.cn 收录。 ❞ ✍前言 你好,我是YourBatman。 上篇文章 大篇幅把Spring全新一代类型转换器介绍完了,已经至少能够考个及格分。在介绍Spring众多内建的转换器里,我故意留下一个尾巴,放在本文专门撰文讲解。 为了让自己能在“拥挤的人潮中”显得不(更)一(突)样(出),A哥特意准备了这几个特殊的转换器助你破局,穿越拥挤的人潮,踏上Spring已为你制作好的高级赛道。 版本约定 Spring Framework:5.3.1 Spring Boot:2.4.0 ✍正文 本文的焦点将集中在上文留下的4个类型转换器上。 StreamConverter:将Stream流与集合/数组之间的转换,必要时转换元素类型 这三个比较特殊,属于“最后的”“兜底类”类型转换器: ObjectToObjectConverter:通用的将原对象转换为目标对象(通过工厂方法or构造器) IdToEntityConverter : 本文重点 。给个ID自动帮你兑换成一个Entity对象 FallbackObjectToStringConverter:将任何对象调用 toString()

Java多线程访问Synchronized同步方法的八种使用场景

 ̄綄美尐妖づ 提交于 2020-12-22 01:50:58
简介 本文将介绍7种同步方法的访问场景,我们来看看这七种情况下,多线程访问同步方法是否还是线程安全的。这些场景是多线程编程中经常遇到的,而且也是面试时高频被问到的问题,所以不管是理论还是实践,这些都是多线程场景必须要掌握的场景。 八种使用场景: 接下来,我们来通过代码实现,分别判断以下场景是不是线程安全的,以及原因是什么。 两个线程同时访问同一个对象的同步方法 两个线程同时访问两个对象的同步方法 两个线程同时访问(一个或两个)对象的静态同步方法 两个线程分别同时访问(一个或两个)对象的同步方法和非同步方法 两个线程访问同一个对象中的同步方法,同步方法又调用一个非同步方法 两个线程同时访问同一个对象的不同的同步方法 两个线程分别同时访问静态synchronized和非静态synchronized方法 同步方法抛出异常后,JVM会自动释放锁的情况 场景一:两个线程同时访问同一个对象的同步方法 分析:这种情况是经典的对象锁中的方法锁,两个线程争夺同一个对象锁,所以会相互等待,是线程安全的。 两个线程同时访问同一个对象的同步方法,是线程安全的。 1 我们在前文中已经讲过了。代码和详细讲解在《Java中synchronized实现对象锁的两种方式及原理解析》中的第二部分《方法锁》中,在此就不再重述了。 场景二:两个线程同时访问两个对象的同步方法 这种场景就是对象锁失效的场景

springboot异步线程(二)

笑着哭i 提交于 2020-12-20 04:10:23
前言 上一篇中讲了关于 TaskExecutor 的一些相关知识,本篇就是实战篇,看看异步线程使如何使用的 正文 本篇文章使用springboot 2.2.1.RELEASE 一.前奏,直接使用,无任何配置 启动异步注解 在springboot启动类上添加注解@EnableAsync @SpringBootApplication @EnableAsync public class AsyncApplication { public static void main(String[] args) { SpringApplication.run(AsyncApplication.class, args); } } 使用@Async注解 在需要的方法上使用@Async注解: public interface AsyncService { @Async void testAsync(); @Async void testOne(); } @Service public class AsyncServiceImpl implements AsyncService { private static final Logger log= LoggerFactory.getLogger(AsyncServiceImpl.class); @Override public void testAsync(

JNPF低代码开发平台——SpringCloud微服务解决框架

微笑、不失礼 提交于 2020-12-20 04:08:03
JNPF低代码开发平台总体介绍 JNPF低代码开发平台 是由引迈信息完全自主研发的专业的前后端分离java低代码快速开发平台, JNPF含盖SpringBoot+ SpringCloud 的所有必要的核心功能,JNPF的目标是更轻量级、更快速、更全面、更低代码量、更易于学习和使用的前后端分离的开发平台,可以实现无代码快速开发服务。 JNPF通过建立数据模型和代码生成器功能可以快速的实现80%的java开发工作,JNPF本身已含有无代码开发模式,包含了web开发、app开发、报表开发、大屏开发、门户开发等等。有基于代码生成器的低代码开发,有web、app、流程表单等核心开发功能.JNPF持续集成了多种原生组件:导入导出、电子签章、邮件收发、知识管理、文件预览、二维码生成、订单管理、项目管理等等。 适用业务场景 作为前后端分离项目,为大型分布式架构、弹性计算架构、微服务架构、多端化服务打下坚实的基础。 手机移动端APP、各种平台的小程序等一站式多端开发平台。 各种企业业务系统的基础开发框架(OA、CRM、ERP、HR、MES)。 后端采用 SpringCloud ,适合有意从传统架构转型微服务架构的企业。 主体业务功能 拖拉、可视化设计表单 所见即所得的表单设计方式,通过简单的拖拽控件及数据绑定设置即可完成表单设计工作。设计出来的所有表单都是标准的表单,具有良好的互操作性和可扩展性

Spring RestController @RequestParam 中的 required=false 参数

点点圈 提交于 2020-12-20 02:10:20
这个参数是 required 确定在 API 中的参数中是否必须要输出参数。 在默认情况下为 true,你可以设置这个参数为 false。 如果你设置的参数为 true,但是在提交参数的时候没有提交这个参数,你的 API 将会返回一个异常。 考察下面的代码: @GetMapping( "/search" ) public ResponseEntity<?> searchTestBank(@RequestParam String id) { } 在上面的代码中,我们不指定了返回。 上面参数的定义是要求参数不为 null,如果你输入 null 的参数的话,你会在 API 看到下面的错误。 { "timestamp" : 1608394372349 , "status" : 400 , "error" : "Bad Request" , "message" : "" , "path" : "/testbank/search" } 在上面的访问的时候提示了 Bad Request 错误,这是因为没有为发送参数到 API 中。 如果你修改代码为: @GetMapping( "/search" ) public ResponseEntity<?> searchTestBank(@RequestParam(required= false ) String id) { } 就可以避免这个问题了。

Jeecg Boot 2.2.1 版本发布,基于SpringBoot的低代码平台

北城余情 提交于 2020-12-19 16:37:39
项目介绍 JeecgBoot是一款基于代码生成器的低代码开发平台,开源界“小普元”超越传统商业企业开发平台!采用前后端分离架构:SpringBoot 2.x,Ant Design&Vue,Mybatis-Plus,Shiro,JWT。强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领新的低代码开发模式(OnlineCoding模式-> 代码生成器模式-> 手工MERGE智能开发),帮助Java项目解决70%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省成本,同时又不失灵活性。JeecgBoot还独创在线开发模式(低代码):在线表单、在线报表、在线图表、在线工作流、插件能力等等。。 当前版本 :v_2.2.1 | 2020-07-13 源码下载 https://github.com/zhangdaiscott/jeecg-boot https://gitee.com/jeecg/jeecg-boot 技术文档 在线演示:http://boot.jeecg.com 视频教程: 入门视频 技术文档:http://doc.jeecg.com 常见问题: http://t.cn/A6voGt6P QQ群:②769925425、①284271917(满) 升级日志 此版本为稳定版本,主要修复2.2版本的已发现Bug和优化功能,同时提交了多租户支持代码。

讲真!这些攻击手段你知道吗

你说的曾经没有我的故事 提交于 2020-12-19 15:46:52
世界上最快的捷径,就是脚踏实地,本文已收录【架构技术专栏】关注这个喜欢分享的地方。 网站安全 从从互联网发展开始,各种网络安全问题也就伴随而生。 近些年来有很多网站遭到攻击,如新浪微博遭XSS攻击,以CSDN为代表的多个网站泄露用户密码和个人信息。 特别是后者,因为影响人群广泛,部分受影响网站涉及用户实体资产和交易安全,一时成为舆论焦点。 那么新浪微博是如何被攻击的?CSDN的密码为何会泄露?如何防护网站免遭攻击,保护好用户的敏感信息呢? 常见的攻击与防御 XSS攻击,它和SQL注入攻击构成网站应用攻击最主要的两种手段,全球大约70%的Web应用攻击都来自XSS攻击和SQL注入攻击。此外,常用的Web应用还包括CSRF、Session劫持等手段。 XSS攻击 XSS攻击又称CSS,全称Cross Site Script (跨站脚本攻击),其原理就是攻击者像有XSS漏洞的网站注入恶意HTML脚本,在用户浏览网页时,这段恶意的HTML 脚本会自动执行,从而达到攻击的目的。 常见的XSS攻击类型: 反射型,通过在请求地址上加入恶意的HTML代码 dom型 ,通过一些API向网站注入恶意HTML 持久型,将恶意代码内容发给服务器,服务器没过滤就存储到数据库中了,下次再请求这个页面时就会从数据库中读取出恶意代码拼接到页面HTML上 1、反射型XSS攻击 攻击步骤: 1