首页
归档
动态
友链
关于
Search
1
网易云音乐黑胶会员月月免费赠送
2,331 阅读
2
十年之约RSS聚合订阅服务上线
2,207 阅读
3
rsyslogd内存占用过高解决方案
1,853 阅读
4
Nginx反代MinIO后,上传文件签名异常
1,827 阅读
5
工资发放日的区别
1,820 阅读
零碎
标本
码海
工具
其他
登录
Search
标签搜索
北京
摄影
Java
旅行
生活
学习笔记
教程
Linux
服务器
软件
SpringBoot
Windows
日记
服务
Spring
系统
福利
数据库
SQL
Oracle
萧瑟
累计撰写
173
篇文章
累计收到
1,057
条评论
首页
栏目
零碎
标本
码海
工具
其他
页面
归档
动态
友链
关于
搜索到
40
篇与
码海
的结果
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日
517 阅读
4 评论
2022-08-07
Oracle定义DES加密解密及MD5加密函数
最近在研究公司的中台,通过 数据库服务化 提供接口对外使用,部分敏感数据需要加密,且根据密文可解密,这让我就发现了数据库加密函数,现在分享给大家。DES加密函数create or replace function encrypt_des(p_text varchar2, p_key varchar2) return varchar2 is v_text varchar2(4000); v_enc varchar2(4000); raw_input RAW(128) ; key_input RAW(128) ; decrypted_raw RAW(2048); begin v_text := rpad( p_text, (trunc(length(p_text)/8)+1)*8, chr(0)); raw_input := UTL_RAW.CAST_TO_RAW(v_text); key_input := UTL_RAW.CAST_TO_RAW(p_key); dbms_obfuscation_toolkit.DESEncrypt(input => raw_input,key => key_input,encrypted_data =>decrypted_raw); v_enc := rawtohex(decrypted_raw); dbms_output.put_line(v_enc); return v_enc; end;DES解密函数create or replace function decrypt_des(p_text varchar2,p_key varchar2) return varchar2 is v_text varchar2(2000); begin dbms_obfuscation_toolkit.DESDECRYPT(input_string => UTL_RAW.CAST_TO_varchar2(p_text),key_string =>p_key, decrypted_string=> v_text); v_text := rtrim(v_text,chr(0)); dbms_output.put_line(v_text); return v_text; end;MD5加密函数CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2) RETURN VARCHAR2 IS retval varchar2(32); BEGIN retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) ; RETURN retval; END;函数使用示例DES加密:select encrypt_des('', '密文');DES解密:select decrypt_des('', '密文')MD5加密:md5('');结尾语此函数未对null和空数据进行判断,可能会出现错误,请自行调整业务需求
2022年08月07日
289 阅读
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日
292 阅读
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日
605 阅读
6 评论
2022-05-22
Joe主题对接腾讯LBS展示IP属地
上次偶然逛CSDN看到腾讯的LBS服务支持IP定位,而且还支持IPv6地址定位,这个是其他LBS供应商所不支持的(百度地图、高德地图),所有腾讯LBS服务还算良心。我们一步一步对接主题吧,今天先来申请应用AK。注册账号打开腾讯位置服务官网,点击登录,直接使用QQ登录或微信登录即可,如果单独注册需要输入手机号之类,麻烦的事情,但是使用QQ登录/微信登录后也需要校验一下手机号,但是个人信息不用填写太多。使用QQ登录/微信登录后会提示注册或绑定账号,这个时候我们直接选择注册账户即可。你看这样简单吧,输入手机号和邮箱就OK,不用填写过多信息,下次可以直接使用QQ或者微信登录即可。创建应用打开控制台,左侧有一个应用管理,点击后可创建应用,输入应用名称和应用类型即可,无需输入域名、备案信息啥的,所有这方便无需担心。一个应用可以添加多个Key,一个Key每日可调用10000次,并发5次每秒。这时候我们选择WebService API服务即可,选择后有三种方案,域名白名单、授权IP、签名校验,一般我们会部署在服务器上,所以可以选择授权IP,这样方便一些;域名白名单和签名校验限制有些多,且我们这次对接主题也是以授权IP为主。保存后我们就能拿到一个Key,这里我们简称AK,下面开始对接Joe主题展示博友访客IP属地信息。添加主题调用方法2022.05.25:为了个人隐私,以下代码已去除城市和区县信息,仅显示国家和省 核心方法代码位置:Joe/core/function.php 在末尾添加以下代码/* 腾讯Lbs IP定位服务 */ function curl_tencentlbs_ip($ip) { //应用Key也就是上面所说的AK,修改成自己的Key即可 $key = 'XXX-XXX'; $url = 'https://apis.map.qq.com/ws/location/v1/ip?ip='.$ip.'&key='.$key; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'); $content = curl_exec($ch); curl_close($ch); if($content) { $json = json_decode($content,true); if($json['status'] == 0 ) { $resjson = $json['result']['ad_info']; if($resjson['province']=='北京市'||$resjson['province']=='天津市'||$resjson['province']=='上海市'||$resjson['province']=='重庆市') { return $resjson['nation'].$resjson['city']; } return $resjson['nation'].$resjson['province']; } } return ''; }上面调用接口后,处理以下国内的直辖市,这样就不会显示成北京市北京市了。修改主题评论相关代码评论代码位置:/Joe/public/comment.php需要修改的位置大概在末尾最后一个方法,位置112行。也可以在需要显示评论信息的位置插入下方嵌入点代码即可,我是把IP信息放在agent旁边了,这样不是特别显眼。<?php echo curl_tencentlbs_ip($comments->ip); ?>以下示例代码从96行到尾部<?php function threadedComments($comments, $options) { ?> <li class="comment-list__item"> <div class="comment-list__item-contain" id="<?php $comments->theId(); ?>"> <div class="term"> <img width="48" height="48" class="avatar lazyload" src="<?php _getAvatarLazyload() ?>" data-src="<?php _getAvatarByMail($comments->mail); ?>" alt="头像" /> <div class="content"> <div class="user"> <span class="author"><?php $comments->author(); ?></span> <?php if ($comments->authorId === $comments->ownerId) : ?> <i class="owner">作者</i> <?php endif; ?> <?php if ($comments->status === "waiting") : ?> <em class="waiting">(评论审核中...)</em> <?php endif; ?> <div class="agent"><?php echo curl_tencentlbs_ip($comments->ip); ?> <?php _getAgentOS($comments->agent); ?> · <?php _getAgentBrowser($comments->agent); ?></div> </div> <div class="substance"> <?php _getParentReply($comments->parent) ?> <?php echo _parseCommentReply($comments->content); ?> </div> <div class="handle"> <time class="date" datetime="<?php $comments->date('Y-m-d'); ?>"><?php $comments->date('Y-m-d'); ?></time> <span class="reply joe_comment__reply" data-id="<?php $comments->theId(); ?>" data-coid="<?php $comments->coid(); ?>"> <i class="icon fa fa-pencil" aria-hidden="true"></i>回复 </span> </div> </div> </div> </div> <?php if ($comments->children) : ?> <div class="comment-list__item-children"> <?php $comments->threadedComments($options); ?> </div> <?php endif; ?> </li> <?php } ?>效果如下:其他博客主题,应该也可以适用。
2022年05月22日
500 阅读
43 评论
2022-05-02
Oracle trunc()函数
功能描述用于截取时间或者数值,返回指定的值。语法(1)日期处理:TRUNC(date,[fmt]) -- date 为必要参数,是输入的一个date日期值 -- fmt 参数可忽略,是日期格式,缺省时表示指定日期的0点。(2)数值处理:TRUNC(number,[decimals]) -- number 为必要参数,是输入的一个number数值 -- decimals 参数可忽略,是要截取的位数,缺省时表示截掉小数点后边的值。例子(1)处理日期:--sysdate和trunc(sysdate)是不一样的 sysdate在当天的零时零分零秒等于trunc(sysdate) select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), to_char(trunc(sysdate), 'yyyy-mm-dd hh24:mi:ss') from dual t; --年 select trunc(sysdate, 'yy') "当年第一天" from dual; select trunc(sysdate, 'yyyy') "当年第一天" from dual; select trunc(sysdate, 'year') "当年第一天" from dual; --季度 select trunc(sysdate, 'q') "当前季度的第一天" from dual; select trunc(add_months(sysdate,3), 'Q') -1/24 "这个季度最后一天23点" from dual; --月 select trunc(sysdate, 'mm') "当月第一天" from dual; select trunc(sysdate, 'month') "当月第一天" from dual; select trunc(last_day(sysdate)+1) "下个月第一天的0点" from dual; --周 select trunc(sysdate, 'd') "本周的第一天,周日起" from dual; select trunc(sysdate,'day') "本周的第一天,周日起" from dual; select next_day(TRUNC(SYSDATE ), 'TUESDAY' ) + 12/24 "下个星期二中午12点" from dual; select TRUNC(LEAST(NEXT_DAY(SYSDATE, 'SATURDAY'), NEXT_DAY(SYSDATE, 'SUNDAY'))) + (6*60+10)/(24*60) "下个周六日早上6点10分" from dual; --天 select trunc(sysdate+1) "今晚12点" from dual; select trunc(sysdate+1) + (8*60+30)/(24*60) "明天早上8点30分" from dual; --时 select trunc(sysdate, 'hh')"当前小时" from dual; select trunc(sysdate, 'hh24') "当前小时" from dual; --分 select trunc(sysdate, 'mi') "当前分钟" from dual; select trunc(sysdate,'mi') + 10/ (24*60) "10分钟后的时间"from dual; --秒 select sysdate + 10/(24 * 60 * 60) "10秒钟后" from dual;--trunc没有精确到秒的精度(2)处理数值:--123.56,将小数点右边指定位数后面的截去; select trunc(123.567,2) from dual; --100,第二个参数可以为负数,表示将小数点左边指定位数后面的部分截去,即均以0记; select trunc(123.567,-2) from dual; --123,默认截去小数点后面的部分; select trunc(123.567) from dual;
2022年05月02日
135 阅读
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日
1,827 阅读
2 评论
2022-03-31
Oracle数据库异常ORA-00909:参数个数无效
今天在工作过程中遇到一个问题,模糊查询后台拼接的时候报错,错误异常为:ORA-00909:参数个数无效,简单分析了一下代码,问题可能出现在模糊查询拼凑SQL的时候。而常规在MySql中无异常,Oracle中会出现此问题。问题代码DATA_TABLE_NAME LIKE CONCAT('%',#{tableName},'%')解决示例DATA_TABLE_NAME LIKE CONCAT(CONCAT('%',#{tableName}),'%')问题原因在Oracle中CONCAT函数每次只能进行两个字符串的拼接,两个以上就会报错.
2022年03月31日
349 阅读
1 评论
2022-03-15
OpenJDK 64-Bit Server VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal UNKNOWN to handler- the VM may need to be forcibly terminated
这是提醒你 CMS 垃圾收集器 在 JDK 9 就开始被标注为 @Deprecated,JDK 11 支持的垃圾回收器为 G1 和 ZGC,而 ZGC 在 JDK 11 还处于实验阶段。参考资料修改 config/jvm.options 配置文件,将:-XX:+UseConcMarkSweepGC 改为:XX:+UseG1GC ## GC configuration # 注释CMS #-XX:+UseConcMarkSweepGC # 使用G1 -XX:+UseG1GC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly
2022年03月15日
524 阅读
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日
219 阅读
2 评论
1
2
3
4