首页
归档
友链
关于
Search
1
网易云音乐黑胶会员月月免费赠送
4,175 阅读
2
十年之约RSS聚合订阅服务上线
3,915 阅读
3
工资发放日的区别
2,882 阅读
4
rsyslogd内存占用过高解决方案
2,615 阅读
5
Nginx反代MinIO后,上传文件签名异常
2,431 阅读
零碎
标本
码海
工具
其他
登录
Search
标签搜索
北京
摄影
生活
Java
旅行
学习笔记
教程
服务器
Linux
日记
软件
SpringBoot
服务
Windows
数据库
福利
Spring
系统
SQL
docker
萧瑟
累计撰写
207
篇文章
累计收到
1,514
条评论
首页
栏目
零碎
标本
码海
工具
其他
页面
归档
友链
关于
搜索到
16
篇与
SpringBoot
的结果
2025-08-06
TOPIAM v1.1.0 源码启动及异常处理
TOPIAM源码启动教程及前端运行过程中的异常问题处理方案。 开源不易,请尊重开源的知识成果;码字不易,搬运请注明出处。
2025年08月06日
53 阅读
1 评论
2023-04-23
Java+Selenium学习笔记
Selenium介绍Selenium是一个用于Web应用程序自动化测试工具,背后有google 维护源代码,支持全部主流浏览器,支持主流的编程语言,包括:java,Python,C#,PHP,Ruby等特点开源、免费多浏览器支持:FireFox、Chrome、IE、Opera、Edge;多平台支持:Linux、Windows、MAC;多语言支持:Java、Python、Ruby、C#、JavaScript、C++;对Web页面有良好的支持;简单(API 简单)、灵活(用开发语言驱动);支持分布式测试用例执行。chromeDriver驱动下载:http://chromedriver.storage.googleapis.com/index.html下载的驱动要和自己安装的谷歌浏览器版本相互匹配项目依赖包最新版可以在mvnrepository查找,链接如下<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>${selenium.version }</version> </dependency> 使用手册1 导航1.1 打开网页driver.get("https://www.baidu.com") driver.navigate.to("https://www.baidu.com") // 区别:get是有逻辑的跳转,而navigate.to是直接跳转到该页面,没有任何逻辑 // 参考:https://blog.csdn.net/gaokao2011/article/details/171699691.2 获取当前页面url//返回的是字符串 String url = driver.getCurrentUrl(); //https://www.baidu.com System.out.println(url); 1.3 返回上一页driver.navigate.back();1.4 前进下一页面driver.navigate.forward();1.5 刷新当前页面driver.navigate.refresh();1.6 获取当前页面的titleString title = driver.getTitle(); //返回字符串 System.out.println(title); //百度一下,你就知道2 窗口、Tabs当driver打开一个新窗口时,若想操作新窗口上的元素,则需要将driver切换到新窗口2.1 获取当前窗口句柄//返回字符串 String currentWindowHandle = driver.getWindowHandle();2.2 获取所有窗口句柄//返回字符串集合 Set<String> allWindowHandles = driver.getWindowHandles(); 2.3 切换到新窗口//newHandle为要切换的新窗口的句柄 driver.switchTo().window(newHandle); 2.4 关闭窗口或tabsdriver.close();2.5 会话结束时退出浏览器driver.quit();3 Frames and IFrames当页面上有iframe和frame元素时,若想操作iframe和frame下的html元素,则需要切换driver3.1 切换到指定iframe或frameWebElement element_iframe = driver.findElement(By.id("iframe1")); driver.switchTo().frame(element_iframe);3.2 切换回父页面driver.switchTo().defaultContent();4 window管理4.1 获取窗口大小int width = driver.manage().window().getSize().getWidth(); int height = driver.manage().window().getSize().getHeight(); Dimension size = driver.manage().window().getSize(); int width = size.getWidth(); int height = size.getHeight();4.2 设置窗口大小driver.manage().window().setSize(new Dimension(1024,768));4.3 获取窗口位置int x = driver.manage().window().getPosition().getX(); int y = driver.manage().window().getPosition().getY(); Point position = driver.manage().window().getPosition(); int x = position.getX(); int y = position.getY();5 设置窗口5.1 设置窗口位置driver.manage().window().setPositon(new Point(0,0));5.2 最大化窗口driver.manage().window().maximize();5.3 全屏窗口driver.manage().window().fullscreen();6 定位driver.find 或 element.findfindElement(By.id("XXX")) findElement(By.name("XXX")) findElement(By.className("XXX")) findElement(By.cssSelector("XXX")) findElement(By.linkText("XXX")) findElement(By.partialLinkText("XXX")) findElement(By.tagName("XXX")) findElement(By.xpath("XXX")) findElements(By.id("XXX")) findElements(By.name("XXX")) findElements(By.className("XXX")) findElements(By.cssSelector("XXX")) findElements(By.linkText("XXX")) findElements(By.partialLinkText("XXX")) findElements(By.tagName("XXX")) findElements(By.xpath("XXX"))7 执行js脚本//声明一个js执行器 JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("alert(123)");
2023年04月23日
289 阅读
0 评论
2022-12-22
Java mybatis中#和$的区别
在mybatis中#和$的主要区别是:#传入的参数在SQL中显示为字符串,$传入的参数在SqL中直接显示为传入的值. #方式能够很大程度防止sql注入,$方式无法防止Sql注入; 1、传入的参数在SQL中显示不同#传入的参数在SQL中显示为字符串(当成一个字符串),会对自动传入的数据加一个双引号。例:使用以下SQLselect id,name,age from student where id =#{id} 当我们传递的参数id为 "1" 时,上述 sql 的解析为: select id,name,age from student where id ="1"$传入的参数在SqL中直接显示为传入的值例:使用以下SQLselect id,name,age from student where id =${id} 当我们传递的参数id为 "1" 时,上述 sql 的解析为: select id,name,age from student where id =12、#可以防止SQL注入的风险(语句的拼接);但$无法防止Sql注入。3、$方式一般用于传入数据库对象,例如传入表名。4、大多数情况下还是经常使用#,一般能用#的就别用$;但有些情况下必须使用$,例:MyBatis排序时使用 order by 动态参数时需要注意,用$而不是#。
2022年12月22日
143 阅读
0 评论
2022-09-11
oracle.jdbc.driver.OracleDriver is deprecated.Having use oracle.jdbc.OracleDriver.
最近的状态就是忙、加班、加班。刚刚闲下来,想起来今天项目中遇到一个异常,有些强迫症就想把它解决了,顺便水篇文章。oracle.jdbc.driver.OracleDriver is deprecated.Having use oracle.jdbc.OracleDriver.这个原因是:oracle.jdbc.driver.OracleDriver连接过时了,改成oracle.jdbc.OracleDriver即可.水完文章睡觉,明天继续加班。
2022年09月11日
795 阅读
4 评论
2022-06-08
SpringCloud Nacos命名空间配置
今天研究公司自己的SpringCloud框架,发现好多配置都搞的环境变量,因为开发周期短,又不能给开发细说,所以需要内置写死,这样就方便大伙快速开发,但是一直有一个问题,服务注册到Nacos一直注册不到配置的命名空间,而是注册到默认的public空间下了。使用万能的度娘,查到的资料和配置文件,都是一样的内容,但还是注册不到自定义的命名空间下。后来请教了研发中心的大佬们,才解决这个问题。顺便做一个配置文件的小记录,分享给大家,希望也能解决各位的问题(本人小菜鸡,欢迎各位指导)。spring: application: name: @artifactId@ cloud: nacos: discovery: server-addr: ${NACOSENDPOINTS:nacos-address:8848} namespace: ${NACOS_NAMESPACE:${spring.profiles.active}} config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yml shared-configs: - application.${spring.cloud.nacos.config.file-extension} namespace: ${NACOS_NAMESPACE:${spring.profiles.active}}与度娘查到的资料唯一不同的是在discovery下增加一个namespace命名空间。
2022年06月08日
498 阅读
7 评论
2022-05-25
Java初步实现RSS内容订阅
最近一直在优化十年之约的RSS接口,感觉抓取每天抓取的频率和内容有点少,而且我也想订阅一些其他的RSS内容,就简单研究了一些。RSS是什么?RSS是一种网页内容联合格式(web content sydication format)。它的名字是Really Simple Syndication的缩写。RSS是XML的一种。所有的RSS文档都遵循XML 1.0规范,该规范发布在W3C网站上。 在一个RSS文档的开头是一个节点和一个规定的属性version,该属性规定了该文档将以RSS的哪个版本表示。如果该文档以这个规范来表示,那么它的version属性就必须等于2.0。 在节点的下一级是一个独立的节点,该节点包含关于channel的信息和内容。简单实现抓取POM引入rome包,这里我们用最新版的,不再使用旧版本<dependency> <groupId>com.rometools</groupId> <artifactId>rome</artifactId> <version>1.15.1</version> </dependency>package com.bcrjl.backend.snzy.rss; import com.rometools.rome.feed.synd.SyndEntry; import com.rometools.rome.feed.synd.SyndFeed; import com.rometools.rome.io.SyndFeedInput; import com.rometools.rome.io.XmlReader; import lombok.extern.slf4j.Slf4j; import java.net.URL; /** * RSS 订阅 * * @author xiaose * @date 2022-05-25 */ @Slf4j public class FeedGrabFocus { public static void main(String[] args) { try { String url = "https://blog.yanqingshan.com/feed/"; try (XmlReader reader = new XmlReader(new URL(url))) { SyndFeed feed = new SyndFeedInput().build(reader); System.out.println(feed.getTitle()); System.out.println("***********************************"); for (SyndEntry entry : feed.getEntries()) { System.out.println(entry); System.out.println("***********************************"); } System.out.println("Done"); } } catch (Exception e) { e.printStackTrace(); } } }接下来就要整合域名和quartz定时任务来搞一下动态订阅数据。
2022年05月25日
920 阅读
6 评论
2022-04-22
Nginx反代MinIO后,上传文件签名异常
很早之前自己搭建了一个MinIO对象存储服务,使用Nginx进行反代,但是使用SpringBoot对接的时候,上传文件总是报错。错误内容The request signature we calculated does not match the signature you provided. Check your key and signing method.错误内容大概是因为Nginx反代后请求签名与您提供的签名不匹配。Nginx配置文件我的配置文件server { listen 80; server_name minio.home.com; client_max_body_size 20M; #PROXY-START/ location / { proxy_pass http://127.0.0.1:9000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; add_header X-Cache $upstream_cache_status; # Set Nginx Cache add_header Cache-Control no-cache; expires 12h; } #PROXY-END/ }修改为官方的配置文件即可解决此问题server { listen 80; server_name minio.home.com; client_max_body_size 20M; #PROXY-START/ location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://localhost:9000; # If you are using docker-compose this would be the hostname i.e. minio # Health Check endpoint might go here. See https://www.nginx.com/resources/wiki/modules/healthcheck/ # /minio/health/live; } #PROXY-END/ }参考文档setup-nginx-proxy-with-minio
2022年04月22日
2,431 阅读
2 评论
2022-03-01
[转载]SpringBoot项目优化和Jvm调优
项目调优作为一名工程师,项目调优这事,是必须得熟练掌握的事情。在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。在这边有一篇比较好的文章,推荐给大家! SpringBoot项目配置Tomcat和JVM参数修改配置文件关于修改配置文件application.properties SpringBoot项目详细的配置文件修改文档 其中比较重要的有:server.tomcat.max-connections=0 # Maximum number of connections that the server accepts and processes at any given time. server.tomcat.max-http-header-size=0 # Maximum size, in bytes, of the HTTP message header. server.tomcat.max-http-post-size=0 # Maximum size, in bytes, of the HTTP post content. server.tomcat.max-threads=0 # Maximum number of worker threads. server.tomcat.min-spare-threads=0 # Minimum number of worker threads.Jvm调优关于Jvm调优Oracle官网有一份指导说明: Oracle官网对Jvm调优的说明 有兴趣大家可以去看看。Jvm调优实战未设置JVM参数的情况我现在有一个项目,默认情况下,没有设置任何Jvm参数。下面我来启动看一下。看一下堆栈分配:很明显默认的最大堆内存分配了8个G。很明显的不合理嘛。下面我们来设置下Jvm参数例如要配置JVM这么一大段参数:-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC方式一:如果你用的是IDEA等开发工具,来启动运行项目,那么要调试JDK就方便太多了。只需要将参数值设置到VM options中即可。设置成功,我的GC日志和堆栈分配都已经OK了。GC日志:堆栈分配:方式二:适用于在项目部署后,在启动的时候,采用脚本或者命令行运行的时候设置。先在项目路径下,给项目打包:清理就项目mvn clean打包新项目: mvn package -Dmaven.test.skip=true打包完成后进入可运行Jar包的路径下:执行启动设置Jvm参数的操作。$ java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar这个时候,你再看监控,你就会发现,已经是Ok的了。堆栈都是按照启动时候,设置的Jvm参数启动的。关于这些设置的JVM参数是什么意思,请参考第二步中的oracle官方给出的调优文档。我在这边简单说一下:-XX:MetaspaceSize=128m (元空间默认大小)-XX:MaxMetaspaceSize=128m (元空间最大大小)-Xms1024m (堆最大大小)-Xmx1024m (堆默认大小)-Xmn256m (新生代大小)-Xss256k (棧最大深度大小)-XX:SurvivorRatio=8 (新生代分区比例 8:2)-XX:+UseConcMarkSweepGC (指定使用的垃圾收集器,这里使用CMS收集器)-XX:+PrintGCDetails (打印详细的GC日志)知识点:JDK8之后把-XX:PermSize 和 -XX:MaxPermGen移除了,取而代之的是-XX:MetaspaceSize=128m (元空间默认大小)-XX:MaxMetaspaceSize=128m (元空间最大大小)JDK 8开始把类的元数据放到本地化的堆内存(native heap)中,这一块区域就叫Metaspace,中文名叫元空间。使用本地化的内存有什么好处呢?最直接的表现就是java.lang.OutOfMemoryError: PermGen 空间问题将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上Metaspace就可以有多大(貌似容量还与操作系统的虚拟内存有关?这里不太清楚),这解决了空间不足的问题。不过,让Metaspace变得无限大显然是不现实的,因此我们也要限制Metaspace的大小:使用-XX:MaxMetaspaceSize参数来指定Metaspace区域的大小。JVM默认在运行时根据需要动态地设置MaxMetaspaceSize的大小。好啦,祝大家学习和工作顺利啦!文章原文: SpringBoot项目优化和Jvm调优
2022年03月01日
457 阅读
2 评论
2022-01-08
Java根据URL下载图片至客户端、服务器示例整合上传又拍云对象存储
Java根据URL下载图片至客户端、服务器示例整合又拍云上传
2022年01月08日
698 阅读
1 评论
2022-01-06
SpringBoot设置文件上传大小限制异常解决方案
SpringBoot默认上传文件大小超限,会报以下异常:org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.报错的原因是:springBoot项目自带的tomcat对上传的文件大小有默认的限制,SpringBoot官方文档中展示:每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。解决方法:请在配置文件(application.properties/application.yml)中加入如下设置即可低版本: 1.Xspring.http.multipart.max-file-size=10MB spring.http.multipart.max-request-size=10MB高版本: 2.Xspring.servlet.multipart.max-file-size=30Mb spring.servlet.multipart.max-request-size=30Mb或者spring.servlet.multipart.maxFileSize=10MB spring.servlet.multipart.maxRequestSize=20MB
2022年01月06日
445 阅读
0 评论
1
2