Gitee

使用注解开发Spring MVC

折月煮酒 提交于 2020-08-12 10:11:11
目录 一 开发步骤 二 使用springMVC必须配置的三大件 三 代码参考 一 开发步骤 1 新建一个web项目 2 导入相关jar包 3 编写web.xml文件,注册DispatchServlet 4 编写springmvc配置文件 5 创建对应的控制类,controller 6 完善前端视图和controller之间的对应 7 测试运行调试 二 使用springMVC必须配置的三大件 1 处理器映射器 2 处理器适配器 3 视图解析器 通常只需要手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可,省去了大段的xml配置。 三 代码参考 https://gitee.com/cakin24/springMVCDemo/tree/master/springmvc-03-annotation 来源: oschina 链接: https://my.oschina.net/u/4417586/blog/4312115

Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解

帅比萌擦擦* 提交于 2020-08-12 08:36:06
随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一。Spring 3开始提供了强大的基于注解的缓存支持,可以通过注解配置方式低侵入的给原有Spring应用增加缓存功能,提高数据访问性能。 在Spring Boot中对于缓存的支持,提供了一系列的自动化配置,使我们可以非常方便的使用缓存。下面我们通过一个简单的例子来展示,我们是如何给一个既有应用增加缓存功能的。 快速入门 下面我们将使用 使用Spring Data JPA访问MySQL 一文的案例为基础。这个案例中包含了使用Spring Data JPA访问User数据的操作,利用这个基础,我们为其添加缓存,来减少对数据库的IO,以达到访问加速的作用。如果您还不熟悉如何实现对MySQL的读写操作,那么建议先阅读前文,完成这个基础案例的编写。 先简单回顾下这个案例的基础内容: User实体的定义 @Entity @Data @NoArgsConstructor public class User { @Id @GeneratedValue private Long id; private String name; private Integer age; public User(String name, Integer age) {

.NET 5 尝鲜

邮差的信 提交于 2020-08-12 08:08:03
.NET 5 尝鲜 - 开源项目TerminalMACS WPF管理端支持.NET 5 一个使用 Prism 作为模块化框架、基于多个开源控件库作为UI控件选择、集成开源 UI 界面设计的 .NET 5 WPF 客户端项目。 项目名称:TerminalMACS WPF管理端 项目开源地址: Github: https://github.com/dotnet9/TerminalMACS.ManagerForWPF Gitee: https://gitee.com/dotnet9/TerminalMACS.ManagerForWPF 作者:Dotnet9 1. 特性 使用 .NET 5 开发,体验最新 .NET 平台(和 .NET Core 3.1 无缝兼容) .NET 5 是 .NET Framework 和 .NET Core 的未来,最终将成为一个统一平台,.NET5将包含ASP.NET核心、实体框架核心、WinForms、WPF、Xamarin 和 ML.NET。 基于 Prism 8 搭建模块化框架,方便程序扩展 Prism为程序设计提供指导,旨在帮助用户更加容易的设计和构建丰富、灵活、易于维护WPF桌面应用程序。Prism使用设计模式(如MVVM,复合视图,事件聚合器),帮助你创建一个松耦合的程序。遵循这些设计模式原则,将目标程序解耦成独立的模块

使用Hystrix的插件机制,解决在使用线程隔离时,threadlocal的传递问题

爱⌒轻易说出口 提交于 2020-08-12 07:09:05
背景 在我们的项目中,比较广泛地使用了ThreadLocal,比如,在filter层,根据token,取到用户信息后,就会放到一个ThreadLocal变量中;在后续的业务处理中,就会直接从当前线程,来获取该ThreadLocal变量,然后获取到其中的用户信息,非常的方便。 但是,hystrix 这个组件一旦引入的话,如果使用线程隔离的方式,我们的业务逻辑就被分成了两部分,如下: public class SimpleHystrixCommand extends HystrixCommand<String> { private TestService testService; public SimpleHystrixCommand(TestService testService) { super(setter()); this.testService = testService; } @Override protected String run() throws Exception { .... } ... } 首先,我们定义了一个Command,这个Command,最终就会丢给hystrix的线程池中去运行。那,我们的controller层,会怎么写呢? @RequestMapping("/") public String hystrixOrder () {

(八十九)c#Winform自定义控件-自定义滚动条(treeview、panel、datagridview、listbox、listview、textbox)

心已入冬 提交于 2020-08-12 06:49:06
官网 http://www.hzhcontrols.com/ 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。 GitHub: https://github.com/kwwwvagaa/NetWinformControl 码云: https://gitee.com/kwwwvagaa/net_winform_custom_control.git 如果觉得写的还行,请点个 star 支持一下吧 欢迎前来交流探讨: 企鹅群568015492 来都来了,点个【推荐】再走吧,谢谢 NuGet Install-Package HZH_Controls 目录 http://www.hzhcontrols.com/blog-63.html 用处及效果 准备工作 这个是在前面滚动条上完善的,加入了对常用控件滚动条的美化,实现逻辑是添加一个滚动条控件,然后覆盖在滚动条上面,然后实现联动 绘制滚动条的工作,你可以参考 (六十九)c#Winform自定义控件-垂直滚动条-HZHControls 开始 添加一个组件ScrollbarComponent, 实现接口IExtenderProvider 1 Dictionary<Control, bool > m_controlCache = new Dictionary<Control, bool > (); 2 public

ArrayList与LinkList性能对比----新增元素

巧了我就是萌 提交于 2020-08-12 05:57:13
在聊到 ArrayList 和 LinkList 的时候都会这么说 ArrayList 底层是基于数组实现的内存地址物理上是连续的,新增,删除效率低,查询效率高 LinkList 是基于链表实现的,逻辑地址是连续的内存地址不连续,新增,删除效率高,查询检索效率低 今天我试验了一下 代码 码云路径 分别从 List 的头部,中间,尾部,插入元素 1万的数量级结果如下图,耗时单位ms head 消耗时间 arrayList>linkedList middle 消耗时间 arrayList<linkedList end 消耗时间 arrayList < linkedList 10万的数量级结果如下图,耗时单位ms head 消耗时间 arrayList>linkedList middle 消耗时间 arrayList<linkedList end 消耗时间 arrayList > linkedList 两个量级对比,可以很明显的看出,linkedList 在添加元素的时候,从头部和尾部的效率都是要高于arrayList,唯独指定下标从中间位置添加元素的效率是低于arrayList而且是远远低于的 先看一下arrayList 的添加指定下标元素的代码 1.第一步校验下标是否非法是否越界 抛出 IndexOutOfBoundsException 2.判断数据是否需扩容

Failed to connect to raw.githubusercontent.com port 443

送分小仙女□ 提交于 2020-08-12 05:49:29
Mac 安装 homebrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"   报错: Failed to connect to raw.githubusercontent.com port 443 这个是你的主机无法连接 raw.githubusercontent.com 导致的 解决办法: 使用国内的源 /bin/zsh -c " $(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh) " 参考: https://zhuanlan.zhihu.com/p/111014448 来源: oschina 链接: https://my.oschina.net/u/4389791/blog/4289059

博客园主题——atum1.16升级发布啦

こ雲淡風輕ζ 提交于 2020-08-12 04:20:48
atum主题部署文档 自周三发布的博客园主题1.0版本赢得得广大博友的好评,但同时该主题也存在一些小瑕疵,这个版本主要是根据atum1.0版本以及各博友的建议做了一些升级改动,改动后重新打包发布atum1.1版本。博主在接下来的版本迭代中也会不断加入更多符合博友方便使用的各种新特性。好了,接下是atum1.1主题的部署详情。 介绍 一款由VUE打造的简约型博客主题,兼容各大主流浏览器,响应式设计,PC、平板、手机等均可正常浏览。 特性 响应式设计,兼容手机端浏览器。 提供多种配置信息,方便各类用户进行个人定制化。 部署文档十分详细且部署快捷。 主题整体偏向简约、无太多不必要的特效画面、偏向于阅读型博客。 请求局部HTML刷新,实现全站无刷新式加载。 该版本主要改进 相对于atum1.0需要的blogAcc、blogId等参数的必须配置,该版本采用自动配置特性,即做到了 所有属性无必须配置 ,做到了 按需配置 的特性。 中央面板新增滚动条辅助,改进了能够快速进入页底或页顶的阅读体验。 修改博客文章标题右侧眼睛图标为放大图标,点击可进行全屏沉浸式阅读文章,加强阅读体验。 调整分页显示,修改为分页页数在下,分页内容在上。 调整各处内容过长导致内容溢出或换行问题。 急速部署 前提:已经开通 js 权限,没开通的可以向博客园官方申请开通。 前提:对于随笔发布请不要设置EntryName属性。

SpringBoot2 整合FreeMarker模板,完成页面静态化处理

寵の児 提交于 2020-08-12 04:04:16
本文源码: GitHub·点这里 || GitEE·点这里 一、页面静态化 1、动静态页面 静态页面 即静态网页,指已经装载好内容HTML页面,无需经过请求服务器数据和编译过程,直接加载到客户浏览器上显示出来。通俗的说就是生成独立的HTML页面,且不与服务器进行数据交互。 优缺点描述: 静态网页的内容稳定,页面加载速度极快; 不与服务器交互,提升安全性; 静态网页的交互性差,数据实时性很低; 维度成本高,生成很多HTML页面; 动态页面 指跟静态网页相对的一种网页编程技术,页面的内容需要请求服务器获取,在不考虑缓存的情况下,服务接口的数据变化,页面加载的内容也会实时变化,显示的内容却是随着数据库操作的结果而动态改变的。 优缺点描述: 动态网页的实时获取数据,延迟性低; 依赖数据库交互,页面维护成本很低; 与数据库实时交互,安全控制的成本高; 页面加载速度十分依赖数据库和服务的性能; 动态页面和静态页面有很强的相对性,对比之下也比较好理解。 2、应用场景 动态页面静态化处理的应用场景非常多,例如: 大型网站的头部和底部,静态化之后统一加载; 媒体网站,内容经过渲染,直接转为HTML网页; 高并发下,CDN边缘节点代理的静态网页; 电商网站中,复杂的产品详情页处理; 静态化技术的根本:提示服务的响应速度,或者说使响应节点提前,如一般的流程,页面(客户端)请求服务,服务处理,响应数据

Qt开源作品32-文本框回车焦点下移

邮差的信 提交于 2020-08-12 03:23:19
一、前言 这个demo由于太过简单,而不用过多的文字描述,其实就是实现了在一个文本框中输入完成以后,回车自动跳入下一个文本框,焦点下移,这个在很多的社保系统、医疗系统等系统中很常用,因为那些系统需要很多输入的地方,最快捷的方法就是输入完成以后回车跳入下一个输入框,这样用户不需要去用鼠标单击来切换光标焦点,在我们平时使用电脑的过程中,鼠标+键盘配合,效率是最高的,比如在编写代码过程中,需要把乱七八糟的代码格式化一下,看起来心情也好了很多,此时直接用快捷键会非常方便的,而不是使用鼠标去选择菜单。 二、代码思路 Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); connect(ui->lineEdit1, SIGNAL(returnPressed()), this, SLOT(next())); connect(ui->lineEdit2, SIGNAL(returnPressed()), this, SLOT(next())); connect(ui->lineEdit3, SIGNAL(returnPressed()), this, SLOT(next())); } Widget::~Widget() { delete ui; } void Widget