暂时未有相关云产品技术能力~
C#的在主窗体中实现多个子窗体相互切换的效果主要依托于panel容器和Controls函数。Hello,大家好!我是灰小猿!今天来和大家分享一下在C#的winform开发中如何实现借助一个主窗体来实现内部多个子窗体的切换效果。首先来看一下主窗体中多个小窗体切换的效果:编辑多窗体切换的原理:多窗体切换的原理其实是借助一个panel容器,在该容器中显示相同大小的窗口,接下来大灰狼和大家分享一下建立多窗口切换的步骤:1、新建一个主窗体并在其中放置适当的控件,包括进行切换的按钮和显示窗体的panel容器,在这里要注意:将要显示的子窗体就是在该panel容器中显示的,效果如下:编辑2、新建用于在主窗体中显示的子窗体,子窗体的新建其实是一个用户控件(Windows窗体),在这里我们可以在状态栏中右击选择—>添加—>用户控件(Windows窗体)编辑3、设置子窗体的尺寸和panel容器的尺寸相等,目的是为了在panel容器中显示时不会溢出。在这里我们为了便于区分三个不同的子窗体,设置窗体的不同颜色,并在窗体中进行提示。编辑4、以同样的方式建立子窗体二和子窗体三,编辑窗体三编辑5、在主窗体的代码中定义相应的三个窗口变量,public UserControl1 f1; //创建用户控件一变量 public UserControl2 f2; //创建用户控件二变量 public UserControl3 f3; //创建用户控件三变量6、在Form1_Load函数中对三个变量进行赋值,也就是对三个对象进行实例化private void Form1_Load(object sender, EventArgs e) { f1 = new UserControl1(); //实例化f1 f2 = new UserControl2(); //实例化f2 f3 = new UserControl3(); //实例化f3 }7、由于我们的窗体切换是点击相应的按钮触发的,所以我们要为相应的按钮控件设置触发事件。双击主窗体中的按钮进入相应的触发函数,在这里我们要使用如下的代码对相应的子窗体进行显示://显示窗体一 private void button1_Click(object sender, EventArgs e) { f1.Show(); //将窗体一进行显示 panel2.Controls.Clear(); //清空原容器上的控件 panel2.Controls.Add(f1); //将窗体一加入容器panel2 } //显示窗体二 private void button2_Click(object sender, EventArgs e) { f2.Show(); //将窗体二进行显示 panel2.Controls.Clear(); //清空原容器上的控件 panel2.Controls.Add(f2); //将窗体二加入容器panel2 } //显示窗体三 private void button3_Click(object sender, EventArgs e) { f3.Show(); //将窗体三进行显示 panel2.Controls.Clear(); //清空原容器上的控件 panel2.Controls.Add(f3); //将窗体三加入容器panel2 }8、完成之后运行窗口,点击相应的按钮,在panel2容器中就可以呈现出相应的界面。编辑最后附上完整源码using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace window_cut { public partial class Form1 : Form { public UserControl1 f1; //创建用户控件一变量 public UserControl2 f2; //创建用户控件二变量 public UserControl3 f3; //创建用户控件三变量 public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { f1 = new UserControl1(); //实例化f1 f2 = new UserControl2(); //实例化f2 f3 = new UserControl3(); //实例化f3 } //显示窗体一 private void button1_Click(object sender, EventArgs e) { f1.Show(); //将窗体一进行显示 panel2.Controls.Clear(); //清空原容器上的控件 panel2.Controls.Add(f1); //将窗体一加入容器panel2 } //显示窗体二 private void button2_Click(object sender, EventArgs e) { f2.Show(); //将窗体二进行显示 panel2.Controls.Clear(); //清空原容器上的控件 panel2.Controls.Add(f2); //将窗体二加入容器panel2 } //显示窗体三 private void button3_Click(object sender, EventArgs e) { f3.Show(); //将窗体三进行显示 panel2.Controls.Clear(); //清空原容器上的控件 panel2.Controls.Add(f3); //将窗体三加入容器panel2 } } }觉得不错记得点赞关注哟!大灰狼陪你一起进步!编辑
目录EMQ云服务器简介EMQ云服务器搭建消息订阅&发布测试1、设置连接服务器2、消息订阅3、消息发布Hello!大家好哇,我是努力赚钱买生发水的灰小猿!最近在做物联网相关开发的时候有用到EMQ服务器进行MQTT协议信息传输,今天在这里和大家记录一下EMQ服务器在Windows环境下的搭建以及简单的使用教程。EMQ云服务器简介EMQ X 是全托管的 MQTT 云服务器,可以对物联网 MQTT 5.0进行快速部署、轻松管理、按需扩展。目前可以支持的MQTT协议版本包括MQTT v3.1,v3.1.1 与 v5.0 协议版本和MQTT over WebSocket。EMQ X的官方文档EMQ云服务器搭建EMQX云服务器的搭建步骤如下:1、EMQ云服务器需要在官网进行下载,点击进入下载地址;2、之后找到对应的EMQ服务器相应的版本,(我这里安装的是V4.1.2的最新版本)编辑3、对下载的EMQ云服务器包进行解压。4、打开cmd命令行,进入EMQ云服务器的解压目录下5、输入命令“bin\emqx start”或“bin\emqx console”按回车启动EMQ云服务器,在启动中没有报错或其他显示,则说明EMQ云服务器启动成功编辑6、在浏览器中打开EMQ云服务器的控制台“http://127.0.0.1:18083”,初次登录的默认用户名是“admin”,密码是“public”,出现如下这样的界面则说明搭建成功了。编辑在控制台的settings中可以修改对应的面板风格和语言编辑在这里还要注意的一点是:之后在每次打开该网站之前,都需要在cmd命令行中以步骤五的方式输入命令“bin\emqx start”或“bin\emqx console”按回车启动EMQ云服务器,才可以成功的进入该服务器界面。消息订阅&发布测试EMQX云服务器是自带客户端调试功能面板的,在工具 —> WebSocket中即可进行简单的消息发布及订阅测试,我们知道MQTT协议是基于发布/订阅模式的轻量级传输协议,所以在进行消息的订阅和发布时需要对服务器及订阅的主题(topic)进行相应的配置,1、设置连接服务器在WebSocket中对连接的服务器进行相应的配置,其中包括主机地址、端口、客户端ID、以及进行加密的用户名和密码等,设置完成之后点击连接启动。编辑2、消息订阅MQTT协议消息的订阅是需要包括消息的主题和服务质量的,消息的主题即“发送该消息的一个标签”,服务质量包括0、1、2,具体见下表:Qos值Bit2Bit1描述000最多分发一次101至少分发一次210只分发一次设置完成之后即可对该主题的消息进行订阅编辑3、消息发布MQTT协议消息的发布同样是需要包括消息的主题和服务质量的,同时只有订阅该主题的客户端才可以收到相应的消息,在进行该条消息的发送时要指定该消息的主题和服务质量,同时写入该消息的内容。编辑之后可以在订阅和发布列表中看到相应的订阅和发布的信息。编辑在主题监控中还可以添加主题监控,查看当前已发布的的主题的记录,并且对发送和订阅的主题信息进行实时的更新。编辑关于EMQX服务器的搭建和测试就分享到这里,之后还会继续和大家深入分享关于EMQX服务器的使用。关于文章中MQTT相关的知识,不懂的小伙伴也可以移步这篇博客“浅谈物联网开发最热协议--MQTT协议”觉得不错记得点赞关注哟!大灰狼陪你一起进步!编辑
Eclipse Mosquitto是一个开放源码(EPL/EDL许可)消息代理,它实现了MQTT协议版本5.0、3.1.1和3.1。mosquitto服务器是轻量级的,适用于所有设备,从低功率单板计算机到全服务器。目录MosQuitto服务器简介安装MosQuitto服务器测试MosQuitto服务器消息的订阅&发布消息订阅消息发布多订阅者消息接收设置用户名&密码Hello,你好哇,我是灰小猿!一个努力赚钱买生发水的程序猿。在物联网云智能开发中,MQTT协议是最为常用的协议之一,之前在一篇文章中和大家简要的介绍了MQTT协议的基本概念,感兴趣的小伙伴可以移步这篇文章“浅谈物联网开发最热协议-MQTT协议”。我们知道MQTT协议是基于服务器的订阅/发布式通信协议,所以该协议的实现一定是基于服务器而成立的。所以这一篇大灰狼就来和大家分享一下在Windows环境下搭建/测试MosQuitto服务器的教程。MosQuitto服务器简介关于MosQuitto服务器的官方介绍是这样的:官方介绍Eclipse Mosquitto是一个开放源码(EPL/EDL许可)消息代理,它实现了MQTT协议版本5.0、3.1.1和3.1。mosquitto是轻量级的,适用于所有设备,从低功率单板计算机到全服务器。MQTT协议提供了使用发布/订阅模型执行消息传递的轻量级方法。这使得它适用于物联网消息传递,如低功耗传感器或手机、嵌入式计算机或微控制器等移动设备。mosquitto项目还提供了一个用于实现MQTT客户机的C库,以及非常流行的mosquitto_pub和mosquitto_sub命令行MQTT客户机。从这个官方说明中我们基本也就可以了解到MosQuitto服务器基本作用。安装MosQuitto服务器接下来就是关于该服务器的下载和安装过程。官方下载地址之后在页面中找到Windows环境下的EXE版本下载,编辑之后找到我们下载好的文件点击进行安装,然后我们就可以在对应的安装文件夹下看到这样的诸多文件:编辑关于这几个主要文件的作用介绍如下: 模块 功能 mosquitto.conf mosquitto服务器的配置文件 mosquitto 用来开启broker mosquitto_passwd 用来设置用户的账号与密码 mosquitto_pub 用来发布消息 mosquitto_sub 用来订阅消息 pwfile.example 通过mosquitto_passwd来存储用户的账号密码的文件 测试MosQuitto服务器在下载安装完成MosQuitto服务器之后,当然要对其进行测试,看其是否安装成功,测试方法为打开cmd命令行,找到我们安装MosQuitto服务器的文件路径下,之后输入如下的命令行:mosquitto -c mosquitto.conf若没有任何输出,则表示MosQuitto服务器启动成功!效果如下:编辑消息的订阅&发布在确定我们的MosQuitto服务器安装并启动没有问题之后,我们就可以尝试使用该服务器进行MQTT协议中消息的订阅和发布试验了,在MQTT协议中订阅和发布都是在客户端进行的,所以我们这里称为订阅者和发布者,消息订阅订阅者订阅的方法为:重新打开cmd命令行,同样找到MosQuitto服务器所在的文件夹下,按照如下的命令行格式进行输入:mosquitto_sub -v -t {topic}其中的“topic”为消息主题,可以根据实际应用自行命名,在关于MQTT协议概念中有对其相关的介绍,如下所示:编辑消息发布发布者发布消息的方法为:再次打开一个cmd命令行,同样找到MosQuitto服务器所在的文件夹下,按照如下的命令行格式进行输入:mosquitto_pub -t {topic} -m {Hello}其中的“topic”为发布的消息的主题,和上面订阅者订阅的主题是同一个概念,第二个大括号中的内容为将要发布的消息,在这里要注意的是,在使用cmd命令行发布消息时,消息中间不应该有空格,否则会发送失败!如下所示:编辑之后如上图所示,我们在订阅者界面就可以接收到相应的主题发送来的消息。多订阅者消息接收我们知道MQTT协议中的消息订阅者可以存在多个,所以我们可以在新的cmd命令行中继续订阅该发布者的topic主题消息,之后我们再通过发布者发布,在另一个订阅者中就可以接收到发布者之后发送的消息了!如下所示:编辑设置用户名&密码关于设置服务器用户名和密码的官方介绍如下,mosquitto.conf man page其中mosquitto_passwd是一个为mosquitto MQTT代理管理密码文件的工具。并且用户名不能包含":"。密码以与crypt(3)相似的格式存储。我们可以使用cmd命令行在MosQuitto服务器所在的文件夹下,按照如下的命令行格式进行输入:mosquitto_passwd [ -c | -D ] passwordfile username关于其中具体的使用可以查看官方文档。例如下所示:编辑由于密码是加密的,所以我们无法看到。之后我们可以在相应的文件下找到我们保存用户名和密码的该文件,打开之后就可以看到如下所示的我们设置的用户名和被加密后的密码。编辑之后修改mosquitto.conf中的 password_file pwfile.example, 将其修改成我们刚刚创建的passwordfile使即可生效。好了,关于MosQuitto服务器的搭建和使用暂且和大家分享到这里,折后也会继续分享关于其更加详细深入的学习。觉得不错记得点赞关注哟!大灰狼陪你一起进步!编辑
目录一、JS的遍历方式二、JQuery的遍历方式1. jQuery对象.each(callback)2. $.each(object, [callback])3. for..of方法Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!jQuery框架系列文章已经和大家分享了很多了,从jQuery框架的基础入门,到案例分析、再到现在的高级进阶。其中不但我自己学习到了很多东西,同时也帮助了很多需要的小伙伴。今天我就继续来和大家分享在jQuery高级开发中对元素标签体的遍历常用的几种方法。我们以一个案例的形式进行讲解,假如我们需要遍历的是如下ul标签中的li标签:<body> <ul id="city"> <li>北京</li> <li>上海</li> <li>天津</li> <li>重庆</li> </ul> </body>一、JS的遍历方式首先第一种:利用js对象进行遍历利用js对象的方法进行遍历和我们平常的for循环遍历是一样的思路和解法,首先我们应该获取到需要遍历的元素标签,然后使用for循环方法对其中存在的标签进行遍历:下面以一个实例来进行讲解。遍历四个li标签,并且弹出其中的内容,如果标签体内容是“上海”,则不弹出!$(function (message) { // 获取到UI下的所有Li标签 var citys = $("#city li") // 利用js中的for循环进行遍历 // 将获取到的li标签数组进行遍历 for (var i = 0; i < citys.length; i++) { // 循环内容判断 if ("上海" == citys[i].innerHTML){ // break; continue; } // 输出获取到的li标签中的内容 alert(i + citys[i].innerHTML); } });二、JQuery的遍历方式1. jQuery对象.each(callback)使用该方法时需要在each()中实现function()方法,在function()方法中可以进行赋参数,也可以不赋参数,首先我们来看不用赋予参数的一种,这种方法只能用于获取元素,而不能显示当前是第几个元素。如下:$(function (message) { // 获取到UI下的所有Li标签 var citys = $("#city li") // 利用jQuery对象的each进行遍历 // 利用this进行遍历 citys.each(function () { // alert(this.innerHTML); alert($(this).html()); }); });其中的this表示:集合中的每一个元素对象第二种是在function()中赋予参数:jquery对象.each(function(index,element){});* index:就是元素在集合中的索引* element:就是集合中的每一个元素对象利用这种方式可以回调函数返回值:如结束本次循环或结束整个循环吗,但是并不是使用break,在这里使用的是return true/false* false:如果当前function返回为false,则结束循环(break)。* true:如果当前function返回为true,则结束本次循环,继续下次循环(continue)实例代码:$(function (message) { // 获取到UI下的所有Li标签 var citys = $("#city li") // 利用jQuery对象的each进行遍历 // 利用给function赋值获取对象文本 citys.each(function (index,element) { if ("上海" == $(element).html()){ return true; //结束本次循环 } // js方式 // alert(index + ":" + element.innerHTML); // jQuery方式s alert(index + ":" + $(element).text()); }); });2. $.each(object, [callback])使用这种方法和上面那种方法相似,只不过最前面不是jQuery对象了,而是一个$符号,jQuery对象被放到了each()里面,但实现还是和上面一样的。如下:$(function (message) { // 获取到UI下的所有Li标签 var citys = $("#city li") // 利用$.each()方法 $.each(citys, function () { alert($(this).html()); }); });3. for..of方法这种方法是jquery 3.0 版本之后提供的方式语法格式是:for(元素对象 of 容器对象)同样是容ul标签中取出li标签元素,代码如下:$(function (message) { // 获取到UI下的所有Li标签 var citys = $("#city li") // 利用for---of的方式 for (li of citys){ alert($(li).html()) } });最后附上面四种实现的完整源码。<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function (message) { // 获取到UI下的所有Li标签 var citys = $("#city li") // 利用js中的for循环进行遍历 // 将获取到的li标签数组进行遍历 for (var i = 0; i < citys.length; i++) { // 循环内容判断 if ("上海" == citys[i].innerHTML){ // break; continue; } // 输出获取到的li标签中的内容 alert(i + citys[i].innerHTML); } // 利用jQuery对象的each进行遍历 // 利用this进行遍历 /* citys.each(function () { // alert(this.innerHTML); alert($(this).html()); }); */ // 利用给function赋值获取对象文本 /*citys.each(function (index,element) { if ("上海" == $(element).html()){ return true; } // js方式 // alert(index + ":" + element.innerHTML); // jQuery方式s alert(index + ":" + $(element).text()); });*/ // 利用$.each()方法 /* $.each(citys, function () { alert($(this).html()); });*/ // 利用for---of的方式 /* for (li of citys){ alert($(li).html()) }*/ }); </script> </head> <body> <ul id="city"> <li>北京</li> <li>上海</li> <li>天津</li> <li>重庆</li> </ul> </body> </html>有问题的小伙伴记得在评论区留言提出!我是灰小猿!我们下期见!编辑
hello,你好呀,我是灰小猿,一个超会写bug的程序猿!今天这篇文章来和大家分享一下在springboot中如何集成redis,并实现主从架构,进行数据的简单存储。我的Redis是部署在Windows系统下面的,所以在这里附上Redis在Windows环境下的安装地址和安装说明。一、Windows环境下安装Redis首先去官网下载Redis的安装包,官方下载地址:https://github.com/tporadowski/redis/releases在其中选择当前版本即可。下载之后解压压缩包,得到这样的文件目录:打开cmd命令行,切换到该redis的文件目录下。运行:redis-server.exe redis.windows.conf输入之后,显示这样的页面就说明Redis服务器运行成功了!这个时候这个命令行窗口不要关闭,一旦关闭,Redis服务就停止了!这一点以后在开发的时候也是一样的,需要注意!现在打开一个新的cmd窗口,同样定位到Redis的目录下,运行如下命令:redis-cli.exe -h 127.0.0.1 -p 6379运行这个命令的原因是连接到redis的服务器,其中的地址为本地地址,6379为redis的默认端口号,设置键值对因为我们知道Redis中数据的存储都是以键值对的形式来到的,所以我们可以以键值对的形式来在Redis中存储一个数据,书写格式如下set key value比如存储key为Mykey,value为huixiaoyuan的内容,则输入set Mykey huixiaoyuan根据key获取value根据key来获取value,我们可以直接以get的形式获取。如获取我们刚才设置的key为Mykey的value值,那么直接:get Mykey就可以获取到对应的value值了,这样在Windows环境下Redis的安装就算是完成了,以后在使用的过程中记得,Redis的窗口不要关闭就可以了。二、SpringBoot连接Redisspringboot连接Redis时需要在pom文件中导入所需的jar包依赖,依赖如下: <!-- 加入jedis依赖 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> (1)使用Jedis类直接连接Redis服务器在springboot环境下连接redis的方法有很多,首先最简单的就是直接通过jedis类来连接,jedis类就相当于是redis的客户端表示。连接方法如下: /** * redis连接测试01 */ @Test public void redisTest01() { //连接本地的 Redis 服务 Jedis jedis = new Jedis("localhost"); // 如果 Redis 服务设置了密码,需要用下面这行代码输入密码 // jedis.auth("123456"); System.out.println("连接成功"); //查看服务是否运行 System.out.println("服务正在运行: "+jedis.ping()); }运行后结果:通过这种方式进行连接时,springboot会自动的去本地寻找redis服务器进行连接,如果没有找到那么就会报错,如果你去阅读jedis的底层源码,你会发现Jedis类有多种构造方法,常用的几个是使用默认地址和端口//不传值,那么使用默认的127.0.0.1地址,6379端口就访问 public Jedis()使用指定地址和默认端口//只传入目的地址,那么使用指定的地址和默认的端口号去访问 public Jedis(String host)使用指定地址和端口//传入目的地址和端口号,那么使用指定的地址和端口号去访问 public Jedis(String host, int port)(2)通过配置文件进行连接在springboot中,当然是可以通过配置文件的形式来设置各种连接参数了,Redis也是一样的,在yml文件中进行如下配置:注意:这是没有使用连接池的,如果使用连接池,需要在下边增加配置,关于使用连接池的可以继续往下看。##redis配置信息 spring: redis: database: 0 #redis数据库索引,默认为0 host: 127.0.0.1 #redis服务器地址 port: 6379 #redis服务器连接端口 password: #redis服务器连接密码,默认为null timeout: 5000 #redis连接超时时间通过配置文件来进行配置之后,我们就可以使用springboot中的一个工具类来操作Redis的操作了,springboot会自动读取配置文件中的配置信息,然后通过该配置信息去连接Redis服务器,springboot中提供操作Redis的工具类有两个,分别是:StringRedisTemplate和RedisTemplate,StringRedisTemplate和RedisTemplate的区别如下在进行序列化时,RedisTemplate使用的是 JdkSerializationRedisSerializer,而StringRedisTemplate使用的是StringRedisSerializerStringRedisTemplate继承了RedisTemplate<String,String>,而RedisTemplate 定义为 RedisTemplate<K, V>,所有StringRedisTemplate就限定了K,V为String类型的相同处体现在他们对Redis的操作上,RedisTemplate和StringRedisSerializer都定义了五种对Redis的操作,分别对应这Redis中的五种数据类型。redisTemplate.opsForValue(); //操作字符串 redisTemplate.opsForHash(); //操作hash redisTemplate.opsForList(); //操作list redisTemplate.opsForSet(); //操作set redisTemplate.opsForZSet(); //操作有序set那么在使用的时候,这两个类应该如何选择呢?如果你的redis数据库里面本来存的是字符串数据,或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可,》但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。接下来我以StringRedisSerializer为例子,来给大家演示一下使用StringRedisSerializer操作Redis的方法, /** * springboot主从连接测试, * 使用springRedisTemplate操作 */ @Test public void redisTest06() { // 操作字符型 stringRedisTemplate.opsForValue().set("test06","Test06"); System.out.println(stringRedisTemplate.opsForValue().get("test06")); // 设置key的过期时间,30秒 stringRedisTemplate.expire("test06", 30 * 1000, TimeUnit.MILLISECONDS); // 根据key获取过期时间 Long test06ExpireTime = stringRedisTemplate.getExpire("test06"); System.out.println("根据key获取过期时间:" + test06ExpireTime); // 根据key获取过期时间,并且换算成指定单位 Long test06ExpireTimeToUnit = stringRedisTemplate.getExpire("test06", TimeUnit.SECONDS); System.out.println("根据key获取过期时间,并且换算成指定单位:" + test06ExpireTimeToUnit); // 检查key是否存在,返回布尔类型 Boolean test06IsExist = stringRedisTemplate.hasKey("test06"); System.out.println("检查key是否存在,返回布尔类型:" + test06IsExist); }在上面的操作中,有一点关于获取和设置key过期时间的操作,当时在操作的时候对其进行了一下探究,在这里分享给大家stringRedisTemplate中获取过期时间的getExpire()方法的说明如果最开始没有设置过期时间,那么就返回-1,数据在没有达到Redis数据最大限额的情况下会一直存在.如果设置了过期时间,但是数据还未过期,就返回剩余时间,如果到了过期时间,那么数据会被删除如果数据被删除或者不存在,那么就返回-2.三、使用连接池操作Redis和使用mysql数据库一样,Redis在springboot中也是有连接池的,上面在yml中写入配置文件的时候,我有和大家说过可以在yml配置文件中写入连接池参数,那么配置如下:##redis配置信息 spring: redis: database: 0 #redis数据库索引,默认为0 host: 127.0.0.1 #redis服务器地址 port: 6379 #redis服务器连接端口 password: #redis服务器连接密码,默认为null timeout: 5000 #redis连接超时时间 jedis: pool: #连接池配置 max-active: 8 #连接池最大连接数 max-wait: -1 #连接池最大阻塞等待时间 max-idle: 8 #连接池中的最大空闲连接数 min-idle: 0 #连接池中的最小空闲连接数使用连接池时还有一种不需要写入配置文件的方法,使用这种方法就需要在构造函数中传入参数。并且将配置信息写入到配置类中,当然,在进行实际的项目开发的时候,还是将配置信息写入到配置文件中会好一点。 /** * redis连接测试01 * 建立简单主从架构 */ @Test public void redisTest02() { // 配置redis连接池 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); // 在指定时刻通过连接池能够获取到的最大的jedis的数量 jedisPoolConfig.setMaxTotal(20); // 最大空闲jedis的数量 jedisPoolConfig.setMaxIdle(10); // 最小空闲jedis的数量 jedisPoolConfig.setMinIdle(5); // 建立redis连接池,设置本地地址,端口号,连接超时时间和读写超时时间,如果没有连接密码,那么久为null JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379, 300, null); // 新建一个jedis,jedis:redis在Java中的客户端实现 Jedis jedis = null; try { // 从连接池中获取到一个jedis资源 jedis = jedisPool.getResource(); // 设置key-value,并获取value System.out.println(jedis.set("hxy", "888")); System.out.println(jedis.get("hxy")); } catch (Exception e) { e.printStackTrace(); } finally { // 注意!!这里不是关闭连接,只是将jedis归还到连接池 if (jedis != null) { jedis.close(); } } }以上是不使用配置文件的情况下,将参数传入到Jdispool类中来实现连接池的,如果使用了配置文件,那么直接调用Jdispool的无参构造即可了,其他的操作和上面代码的都是一样的,我就不重复写了。最后在操作完的时候,别忘了使用jedis.close();将jedis归还到连接池即可!关于springboot连接Redis的操作,就先分享这些,当然Redis的操作肯定远远不止这些,之后小猿慢慢和大家分享吧!**一键三连加关注,灰小猿带你上高速!我是灰小猿,我们下期见呀!**
Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!今天依然是不写bug,而是来解决bug,情况在这样的,在进行springboot的项目打包的时候,出现了这样的报错:[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ springboot_01_helloworld ---[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO] Using 'UTF-8' encoding to copy filtered properties files.[INFO] Copying 1 resource编辑重点在中间两行,使用'UTF-8'编码复制过滤资源。 也就是说我们现在使用的编码格式是有问题的,那么我们就应该配置一下我们项目的编码方式,我在网上找到了几种解决办法,然后都试了试,把我经过尝试确认可以解决的方案分享给大家,解决方案一:配置编码格式为UTF-8但是这种方式我尝试了之后没有用,但是很多朋友的项目使用这种方式还是可以解决的,所以我推测这个应该是和版本有关系的。具体的操作就是在pom.xml文件中的<properties></properties>标签下增加一行配置编码格式的代码:<properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>然后再次运行打包,一般就会成功!但是对于程序员来说意外总是会在意想不到的情况下出现,所以也有不成功的,对于这种,看方案二。解决方案二:降低Maven版本另一种情况一般都是使用maven版本太高了,在程序中降低一下maven的版本就行了,我尝试的是降低到3.0.2版本就可以了,具体操作是在pom.xml配置文件的最下面,<build></build>标签中的<plugins></plugins>标签下加入如下代码,修改maven的版本:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin>编辑之后重新运行打包,出现了BUILD SUCCESS,问题解决:编辑上面的两种方案单独配置其中的一个即可解决问题,如果单独配置其中一个解决不了的话,那你还是两个方法都配置上吧!如果小伙伴们还有其他的解决方案,欢迎在评论区留言提出!我是灰小猿,我们下期见!
目录解决方案一:修改pom.xml文件配置解决方案二,修改apache-maven-3.2.2中的配置Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!今天继续来做一名优秀的bug修复工!编辑遇到的问题是这样的,在使用maven工具来测试搭建程序运行时,本来搭建项目本身是没有问题的,该建的文件夹、源码什么的都建好了,但是在运行的时候就发生了这样的报错:[ERROR] Failure executing javac, but could not parse the error[ERROR] 错误 不再支持源选项 5。请使用 6 或更高版本。[ERROR] 错误 不再支持目标选项 1.5。请使用 1.6 或更高版本。具体如下图所示这样:编辑大概意思就是:执行Java程序时出错了,但是无法解析错误类型,但是其实这一句不是最重要的,最重要的是它下面这一句提示,“错误 不再支持源选项 5。请使用 6 或更高版本。”和“ 错误 不再支持目标选项 1.5。请使用 1.6 或更高版本。”。其实看到这句话,经验丰富的老程序猿们大概都知道是什么错误了。编辑就是有一些地方使用的东西过时了,目前已经不再支持了。那到底是什么过期了呢?原因:引发这个错误的主要原因是maven配置文件中默认的JDK已经不再使用了,所以导致了程序无法运行,解决办法:将默认的JDK版本修改成我们电脑上目前有的JDK版本,不知道自己电脑JDK版本的小伙伴可以在cmd中输入“Java -version”查看;比如我的是10.0版本。编辑知道了你的JDK版本之后,对于解决有两种方法:解决方案一:修改pom.xml文件配置这种方法需要修改当前运行工程项目的pom.xml配置文件中的内容,在其中添加如下代码。作用是告诉当前工程使用哪个版本的JDK运行。如我的JDK版本是10.0.1,所以版本就填10,但是这种方法使用之后只能对当前这个项目有效,对于其他使用默认JDK的工程就不管用了!<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <java.version>10</java.version> <maven.compiler.source>10</maven.compiler.source> <maven.compiler.target>10</maven.compiler.target> </properties>解决方案二,修改apache-maven-3.2.2中的配置这种方法需要修改我们电脑上的apache-maven-3.2.2的配置,具体操作是:1、找到apache-maven-3.2.2文件下的setting.xml文件,setting.xml一般存放在路径apache-maven-3.6.1\conf\settings.xml下2、在setting.xml文件中添加jdk版本说明,3、在settings.xml文件中找到如下标签并修改JDK版本为当前电脑上的版本<profile> <id>jdk-10.0.1</id> <activation> <activeByDefault>true</activeByDefault> <jdk>10</jdk> </activation> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>10</maven.compiler.source> <maven.compiler.target>10</maven.compiler.target> </properties> </profile>补充:有时候按照上述步骤修改了JDK版本之后还是报如下错误:[ERROR] Failure executing javac, but could not parse the error:[ERROR] javac: 无效的目标发行版: 10.0.1[ERROR] 用法: javac <选项> <源文件>[ERROR] 使用 --help 可列出可能的选项编辑 说明是你的版本号没写对,如我的是10.0.1版本,那么配置文件中就写10,不要写10.0.1。之后再使用maven运行命令mvn conpile,得到如下提示:BUILD SUCCESS编辑说明运行成功!没有问题!好了,关于maven运行报错的解决就分享到这里,小伙伴们还有新的建议和解决方案的话欢迎留言提出!我是灰小猿,我们下期见!编辑
Hello,你好呀,我是灰小猿,一个超会写bug的程序猿!今天利用spring的IOC容器连接数据库的时候又遇到了bug,所以赶紧在这里记录一下。情况是这样的:在IOC容器中配置连接mysql数据库的时候,进行连接测试,出现了这样的报错。java.sql.SQLException No suitable driver意思就是数据库驱动无法连接了,然后就去网上查找相关解决,网上的方法也很多,但是都不是我遇到的,我在这里总结一下出现这个错误的可能原因和解决。1、数据库连接时的user、password、jdbcUrl、DriverClass这几个参数书写错误这个情况是在开发中经常遇到的问题,很多时候是由于我们书写不规范造成的,数据库连接时的user一般为root,password一般为admin(当然也可能是你自己设定的)对于jdbcUrl,标准的书写是:jdbc:mysql://localhost:3306/数据库名其中:jdbc:mysql:// 是指JDBC连接方式;localhost: 是指你的本机地址;3306 :SQL数据库的端口号;有很多小伙伴说这个不是特别好记,经常记不住,我在这里教给大家一个对比记忆法。这个网站大家应该都写过吧?http://localhost:8080/bookstorehttp:是传输协议,localhost:8080是访问地址后面跟着是的具体访问的是哪一个。而jdbc:mysql://localhost:3306/数据库名的记忆是和它一样的。最后一个是DriverClass,它所对应的参数是com.mysql.jdbc.Driver对于这一个参数,其实也不用记忆,我们可以直接找到数据库连接的jar包mysql-connector-java-5.1.7-bin.jar,在它的下面找到com.mysql.jdbc,再在下面找到Driver.class这个类,点开之后,在它的详细信息里面就可以看到这个连接类的全名。编辑检查以上这几个参数的书写是否正确,如果任何一个没写对,那么就会报这样的错误,我当时就是因为jdbc:mysql://localhost:3306/数据库名中mysql后面没加“:”,添加上去之后,再次尝试连接,问题解决:编辑2、c3p0-config.xml中的配置文件出现问题这种情况一般是由于jar包的问题,所以需要将数据库连接时所需要的jar包重新导入一下。关于java.sql.SQLException No suitable driver报错我目前遇到的可以解决的方案也就这些,小伙伴们还有其他新的解决方案的欢迎留言提出。之后再有新的解决我也会在这篇文章继续更新。我是灰小猿!我们下期见!编辑
JOptionPane类是Swing程序设计中进行弹窗设置的主要方式,本文将详细对Java弹窗进行总结,包括弹窗的设置方法和对内容的读取!敬请阅读!目录四种消息提示框五种消息类型九种对话框参数确认对话框输入对话框消息对话框选择对话框自定义消息图标Hello!你好哇,我是灰小猿,一个超会写bug的沙雕程序猿!今天来和大家分享一个Swing程序设计中关于JOptionPane类的使用,该类的作用呢,其实主要就是设置弹窗,所以在这里也就和大家总结了常用的弹窗设置的方法以及JOptionPane类详细使用说明!话不多说上教程!JOptionPane类属于Swing组件中的一种,所以导入方式如下:import javax.swing.JOptionPane;四种消息提示框在该类中常用的常用的四种消息提示框为: showConfirmDialog(); 确认对话框 showInputDialog(); 输入对话框 showMessageDialog(); 消息对话框 showOptionDialog(); 选择对话框 五种消息类型并且每一种消息框都有五种不同的消息类型,消息类型不同时,弹窗所对应的图标也就不同,以下是这五种消息类型: 消息类型 消息参数 显示图标 错误消息 ERROR_MESSAGE 编辑 提示消息 INFORMATION_MESSAGE 编辑 警告消息 WARNING_MESSAGE 编辑 提问消息 QUESTION_MESSAGE 编辑 简约无图标 PLAIN_MESSAGE 无图标,直接显示消息内容 在使用不同类型的消息框时,输入不同的消息类型参数,就可以得到相应的消息框。九种对话框参数每一种消息提示框都对应有不同的参数的方法,从而得到不同的效果,但总结起来,这四种消息提示框的方法中都基本需要这九个参数: 参数 含义 parentComponent 对话框所在的容器 Message 对话框现实的内容 Title 对话框标题 Option type 选择按钮类型 Message type 消息类型 Icon 自定义消息图标 initialSelectionValue 默认选项或信息 selectionValues 选择选项 Options 操作选项 因为这四种对话框中所需要的参数都是以上九种,所以接下来对每一种对话框进行分析,确认对话框确认对话框(showConfirmDialog)有以下四种构造函数,其中的参数与上表相对应:1、JOptionPane.showConfirmDialog(parentComponent, message) 2、JOptionPane.showConfirmDialog(parentComponent, message, title, optionType) 3、JOptionPane.showConfirmDialog(parentComponent, message, title, optionType,messageType) 4、JOptionPane.showConfirmDialog(parentComponent, message, title, optionType, messageType, icon)实例如下:JOptionPane.showConfirmDialog(null,"这是确认对话框吗?","提示",JOptionPane.OK_OPTION,JOptionPane.QUESTION_MESSAGE); //确认对话框效果如下:编辑对确认消息对话框消息进行接收的方法:int userOption = JOptionPane.showConfirmDialog(null,"这是确认对话框吗?","提示",JOptionPane.OK_OPTION,JOptionPane.QUESTION_MESSAGE); //确认对话框 //如果用户选择的是OK if (userOption == JOptionPane.OK_OPTION) { System.err.println("是"); }else { System.out.println("否"); }输入对话框输入对话框(showInputDialog)有六种构造函数,分别如下:1、JOptionPane.showInputDialog(message); 2、JOptionPane.showInputDialog(parentComponent, message); 3、JOptionPane.showInputDialog(message, initialSelectionValue); 4、JOptionPane.showInputDialog(parentComponent,message,initialSelectionValue) 5、JOptionPane.showInputDialog(parentComponent,message, title, messageType); 6、JOptionPane.showInputDialog(parentComponent, message, title, messageType, icon, selectionValues, initialSelectionValue)下面有两个关于该对话框的实例:1、显示输入框,供用户输入,实例如下:JOptionPane.showInputDialog(null,"请输入你的生日:","输入",JOptionPane.WARNING_MESSAGE); //输入对话框效果如下:编辑普通输入框情况下获取用户输入内容的方法:String info = JOptionPane.showInputDialog(null,"请输入你的生日:","输入",JOptionPane.WARNING_MESSAGE); //输入对话框 System.out.println(info);2、设置一个下拉框,供用户选择输入,最后一个参数表示下拉框默认显示的内容,实例如下:String [] options = {"A选项","B选项","C选项","D选项"}; JOptionPane.showInputDialog(null,"请输入你的选项:","提示",JOptionPane.QUESTION_MESSAGE,null,options,options[2]);效果如下:编辑下拉框情况下获取用户输入内容的方法:String [] options = {"A选项","B选项","C选项","D选项"}; String info = (String)JOptionPane.showInputDialog(null,"请输入你的选项:","提示",JOptionPane.QUESTION_MESSAGE,null,options,options[2]); System.out.println(info);消息对话框消息对话框(showMessageDialog)有三种构造函数,具体如下:1、JOptionPane.showMessageDialog(parentComponent, message); 2、JOptionPane.showMessageDialog(parentComponent, message, title, messageType); 3、JOptionPane.showMessageDialog(parentComponent, message, title, messageType, icon);实例如下:JOptionPane.showMessageDialog(null,"这里是消息提示对话框!","消息提示",JOptionPane.WARNING_MESSAGE); //消息对话框效果如下:编辑选择对话框选择对话框(howOptionDialog)只有一种构造函数如下:JOptionPane.showOptionDialog(parentComponent, message, title, optionType, messageType, icon, options, initialValue)使用实例如下。最后一个参数表示默认选择的内容,:String [] options = {"A选项","B选项","C选项","D选项"}; JOptionPane.showOptionDialog(null,"请选择你的选项:","提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,options,options[0]); //选择对话框*/效果如下:编辑选择对话框下获取用户选项的方法:String [] options = {"A选项","B选项","C选项","D选项"}; int n = JOptionPane.showOptionDialog(null,"请选择你的选项:","提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,options,options[0]); //选择对话框*/ System.out.println(options[n]);自定义消息图标自定义对话框图标的方法如下:ImageIcon icon = new ImageIcon("it.jpg"); //注意设置图片尺寸,50*50px较适合 JOptionPane.showMessageDialog(null, "这是自定义图标!","提示",JOptionPane.WARNING_MESSAGE,icon); //该消息框的提示图标会被自定义的图标覆盖掉效果如下:编辑关于JOptionPane类中弹窗的使用就先分享到这里,之后还会对其他使用继续更新!觉得有用记得点赞关注哟!大灰狼陪你一起进步!编辑
2022年05月