H2 数据库配置DATABASE_TO_UPPER区分大小写无效

背景 刚接触这个h2内存数据库,被这个问题折腾2天了,我使用的是mybatis-plus,而H2默认 表名、列名都是大写,和mybatis plus默认的策略有冲突(SQL大写变小写加下划线),虽然可以配置关闭掉,但全部大写还是看着不习惯…… 所以百度搜了下关闭的方法,在url链接上加上 DATABASE_TO_UPPER=FALSE 就行了,但这问题就来了,由于我加了 AUTO_SERVER=TRUE 也就是混合模式,在idea中修改数据就会 报错: 1 2 3 4 5 [90079][90079] org.h2.jdbc.JdbcSQLSyntaxErrorException: Schema "information_schema" not found; SQL statement: select catalog_name from information_schema.catalogs [90079-200]. Schema "information_schema" not found; SQL statement: select catalog_name from information_schema.catalogs [90079-200] (458 ms) 解决办法 后面搜索到 github同样有人遇到了这个问题,给出的解决方法是使用 DATABASE_TO_LOWER=TRUE 参数。记得删除原来的库重新生成 。 我的配置如下: 1 2 3 4 spring.datasource.url=jdbc:h2:./db/qq_bot;DATABASE_TO_LOWER=TRUE;AUTO_SERVER=TRUE;AUTO_SERVER_PORT=9092;USER=sa;PASSWORD=sa; #spring.datasource.h2.username=admin #spring.datasource.h2.password=admin spring.datasource.h2.driver-class-name=org.h2.Driver 至于我为啥把用户名密码配置在url里…….那就是另外个问题了,哈哈哈 使用H2需要注意的问题 1、如果修改了url配置,原来的数据库要删除重新生成,因为在第一次创建数据库的时候就写死了,无法修改。 2、关于混合模式,我一直以为配置了,AUTO_SERVER=TRUE;AUTO_SERVER_PORT=9092; 就可以使用tcp直接连接进行修改了,虽然端口开放了但会说密码错误 ,其实只是可以使用相同的url再次连接而已。 参考文章: https://github.com/h2database/h2database/issues/485

2021年3月27日 · 1 分钟 · 浅忆

关于TDengine使用上一些注意事项(坑) - 未完

第一次使用时序数据库,本来想用influxdb,搜了下说是国产的TDengine 性能更好,sql和原生差不多,所以就想尝试下,但学到现在一路的坑啊…… 这里我使用的是TDengine Docker版,安装命令 1 docker run -d -v /etc/taos:/etc/taos -p 6030:6030 -p 6035:6035 -p 6041:6041 -p 6030-6040:6030-6040/udp tdengine/tdengine:2.0.0.0 注意版本号,默认账户密码为:root/taosdata 常见问题 1、 java.sql.SQLException: TDengine Error: Invalid timestamp 如果本地时区要和服务端一样 解答:https://github.com/taosdata/TDengine/issues/4345# 2、本地驱动版本、maven TDengine 版本、服务端版本 要一致 3、本地开发需要设置TDengine驱动环境变量 1 -Djava.library.path=C:\TDengine\driver 4、TDengine Error: Unable to resolve FQDN 这个居然还要保持主机名一致…….也就是要设置host ,docker版服务端也要在docker里设置,但官网提供的docker创建命令并未配置环境变量。

2021年3月11日 · 1 分钟 · 浅忆

RabbitMQ Java Client 并发问题思考(一)

此篇文章仅作为个人笔记,由于初学难免有理解错误的地方,请大佬指正~ 由于我这个部分没有使用SpringBoot,使用的是RabbitMq java Client API 所以在Springboot上的有些功能用不了,只能手动实现,故在思维上走了一个坑。 测试代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 public static void main(String[] args) { //连接工厂 ConnectionFactory factory = new ConnectionFactory(); // factory.useNio(); // factory.setNioParams(new NioParams().setNbIoThreads(4)); factory.setHost("xxx.xxx.xxx.xxx"); factory.setPort(port); factory.setUsername("username"); factory.setPassword("password"); factory.setVirtualHost("msgpush"); // f.setConnectionTimeout(5000); // f.setHandshakeTimeout(3000); ExecutorService service = Executors.newFixedThreadPool(30); factory.setSharedExecutor(service); // 设置自动恢复 factory.setAutomaticRecoveryEnabled(true); factory.setNetworkRecoveryInterval(2); factory.setTopologyRecoveryEnabled(true);// 设置不重新声明交换器,队列等信息。 System.out.println("检索请求的最大频道数:" + factory.getRequestedChannelMax()); // f.setRequestedChannelMax(10); try { // Channel channel = f.newConnection().createChannel(); //建立连接 Connection c = factory.newConnection("push Client"); c.addShutdownListener(new ShutdownListener() { @Override public void shutdownCompleted(ShutdownSignalException e) { System.out.println( "断线了......"); } }); //建立信道 Channel ch = c.createChannel(); //声明队列,如果该队列已经创建过,则不会重复创建 //ch.queueDeclare("QueueWX", false, false, false, null); System.out.println("等待接收数据"); // 单条消息的大小限制,一般设为0或不设置,不限制大小 int prefecthSize = 0; // 告诉RabbitMQ不要同时给消费端推送n条消息,一旦有n个消息还没ack,则该consumer将block掉,直到有ack;注意在自动应答下不生效 int prefecthCount = 5; // 表示是否应用于channel上,即是channel级别还是consumer级别 boolean global = true; ch.basicQos(3); //消费者取消时的回调对象1 CancelCallback cancelHandel = new CancelCallback() { @Override public void handle(String consumerTag) throws IOException { System.out.println(consumerTag + " 链接已断开"); } }; /*微信*/ DeliverImpl deliverWx = new DeliverImpl(ch, MQEnum.QUEUE_WX); ch.basicConsume(MQEnum.QUEUE_WX.getData(), false, deliverWx, cancelHandel); /*企业微信*/ DeliverImpl deliver = new DeliverImpl(ch, MQEnum.QUEUE_WORKWX); //第二个参数为消息回执,消息确认处理完成,为true为自动确认,只要消息发送到消费者即消息处理成功;为false为,手动发送确认回执,服务器才认为这个消息处理成功 ch.basicConsume(MQEnum.QUEUE_WORKWX.getData(), false, deliver, cancelHandel); /*钉钉*/ DeliverImpl deliverDing = new DeliverImpl(ch, MQEnum.QUEUE_DINGDING); ch.basicConsume(MQEnum.QUEUE_DINGDING.getData(), false, deliverDing, cancelHandel); /*tg*/ DeliverImpl deliverTg = new DeliverImpl(ch, MQEnum.QUEUE_TG); ch.basicConsume(MQEnum.QUEUE_TG.getData(), false, deliverTg, cancelHandel); } catch (IOException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); } } ...

2021年3月9日 · 4 分钟 · 浅忆

国内WordPress启用谷歌验证码(noCaptcha )

众所周知,noCaptcha 的验证接口和css是被屏蔽的,所以可以使用 recaptcha.net 这个google在国内的域名。想着有轮子绝不撸代码的想法,试了几款插件,找到一款对代码修改最小的插件(或者直接不用修改,我目前使用的这款主题需要手动修改)。 1、安装插件 https://cn.wordpress.org/plugins/advanced-nocaptcha-recaptcha/ 2、启用并设置插件 注册 recaptcha 秘钥。https://www.google.com/recaptcha/admin/ 3、修改主题代码(可选) 同理,如果评论的时候没有进行验证,提交没有显示错误信息,那么只需要对提交评论的 g-recaptcha-response 字段就行判断一下就可以了。 每款主题的输错错误方式不一样,所以自己修改~ 同时还需要添加验证代码 1 2 anr_verify_captcha() 成功时返回值为true,否则为false。

2021年3月1日 · 1 分钟 · 浅忆

Spring Boot 通过SMTP发送电子邮件(ssl/tls)

使用的技术: Spring Boot 2.3.2 Java Mail 1.6.2 Maven 3 Java 8 1、添加依赖 1 spring-boot-starter-mail 1 2 3 4 5 <!-- send email --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 2、配置 application.properties 这里得注意下了,除了邮件服务商说明同时支持tls或者ssl,否则需要将tls/ssl分开配置 ,这里我使用得是outlook,所以只支持 tls 587端口,一开始我配置成ssl,走了一个坑。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username=username spring.mail.password=password # Other properties spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.connectiontimeout=5000 spring.mail.properties.mail.smtp.timeout=5000 spring.mail.properties.mail.smtp.writetimeout=5000 # 这里是tls的配置项,如果没有使用587,则要注释掉 # TLS , port 587 spring.mail.properties.mail.smtp.starttls.enable=true # 这里是ssl的配置项,如果没有使用465,则要注释掉 # SSL, post 465 #spring.mail.properties.mail.smtp.socketFactory.port = 465 #spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory 1 2 3 4 5 6 7 8 如果是这个错误,那么就是你把tls/ssl的配置弄反了。 nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: smtp.office365.com, port: 587; nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?; message exceptions (1) are: Failed message 1: javax.mail.MessagingException: Could not connect to SMTP host: smtp.office365.com, port: 587; nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?] with root cause 3、发送文本邮件 1 2 3 4 5 6 7 8 9 10 11 import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; @Autowired private JavaMailSender javaMailSender; void sendEmail() { SimpleMailMessage msg = new SimpleMailMessage(); msg.setTo("to_1@gmail.com", "to_2@gmail.com", "to_3@yahoo.com"); msg.setSubject("Testing from Spring Boot"); msg.setText("Hello World \n Spring Boot Email"); javaMailSender.send(msg); } 4、发送html格式的邮件 1 2 3 4 5 6 7 8 9 10 @GetMapping("sendMail") void sendMain() throws MessagingException { MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true); message.setFrom("浅忆博客(系统)<server@curlc.com>"); message.setTo("xxxxx@qq.com"); message.setSubject("HTML邮件"); message.setText("<h1>Check attachment for image!</h1>", true); mailSender.send(mimeMessage); } 5、发送HTML电子邮件和文件附件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import org.springframework.core.io.ClassPathResource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; void sendEmailWithAttachment() throws MessagingException, IOException { MimeMessage msg = javaMailSender.createMimeMessage(); // true = multipart message MimeMessageHelper helper = new MimeMessageHelper(msg, true); helper.setTo("to_@email"); helper.setSubject("Testing from Spring Boot"); // default = text/plain //helper.setText("Check attachment for image!"); // true = text/html helper.setText("<h1>Check attachment for image!</h1>", true); // hard coded a file path //FileSystemResource file = new FileSystemResource(new File("path/android.png")); helper.addAttachment("my_photo.png", new ClassPathResource("android.png")); javaMailSender.send(msg); } ...

2021年2月17日 · 2 分钟 · 浅忆

吐槽下贵州电信宽带公网IP问题

背景 自从贵州在搞大数据后,大概在18年还是17年底,贵州电信就回收了所有的家庭公网ip,当时我家里宽带的也被回收了,刚了2天,贵州电信一直把这个责任推给办宽带的营业厅和安装师傅,我所在的地区欠发达,人家安装师傅和营业厅工作人员也不知道怎么弄,一直好言好语给我打了好几次电话,最后成功拿到公网IP最关键的一句话是“以前我的宽带都有公网IP”,我就让安装师傅就把问题再反馈到上一级,后面机房的人给我打电话说弄好了,重启光猫后确实有公网了(中间有变成内网过1次,又是刚了2天)。 2021-02-16 我在贵阳又办了一根千兆的宽带,可笑的是千兆上传还是30Mbps(这30Mbps还是当年工信部强制出了个文件,才开始从20Mbps升级到30Mbps),光猫也不给万兆或者2.5G光猫,速度也不达标(白天还好,能跑930Mbps,晚上高峰期就只有650Mbps了),公网ip?更别想了,客服回复永远只有这几句话 目前暂未提供IP地址更改服务 目前我公司提供的IP地址多数都是100开头的,只要您能正常登录QQ、访问网站,即表示宽带网络正常。同时IP地址是我公司宽带接入服务器动态分配的,暂未提供IP地址更改服务。 所以现在是bt下载没速度,NAS不能玩,为了所谓的大数据把ip资源给某些公司,不得已去华为云买了台贵阳地区5Mpbs 的vps做内网穿透,把摄像头和NAS映射出去,延迟倒是和内网一样,但是5Mbps的上传能做啥,卡的一批。不过有点欣慰的是可能也知道回收公网IP 搞得大家都不高兴,IPV6推进倒是蛮快得,电信和联通都分配了/60 的ipv6(手机数据也给了),但现在v6的路由瞎跳,开了反而影响正常上网,哎…… 2021-2-20 09:30: 昨天投诉后,10000号回访,说ip资源有限,无法给新用户公网ip,老用户可以ip回退,说到要工信部投诉,回复是“这是您的权益”,看来真的挺刚的…… 中间我打4008810000投诉过当地电信,然而更牛,直接说这是业务问题,请打10000号,然后直接挂了,这个投诉电话也是摆设?emm……???要是有用我打这个投诉电话做啥???我投诉当地电信居然说这是业务问题,又推给10000号?真的把我气笑了。 然而又能怎么办呢,只能将就用ipv6了,不过对这贵州电信真的是一生黑,过段时间携号转网了…… 附图 这里借用这个链接的图片,我问的回答也是一样的 https://zhidao.baidu.com/question/1772589045169142300.html 收集关于贵州电信公网IP的链接: https://tieba.baidu.com/p/6112677755

2021年2月16日 · 1 分钟 · 浅忆

PVE 常用命令

将lvm转换为qcow2 1 qemu-img convert -O qcow2 -c /dev/mapper/pve-vm--103--disk--1 13103.qcow2 将备份后的vma转为qcow2(备份时选择不压缩,得到vma文件,再解压,再转换为qcow2,文件比较大) 1 2 3 4 vma extract vzdump-qemu-100-2019_01_31-13_11_02.vma temp/ qemu-img convert -f raw temp/disk-drive-scsi0.raw -O qcow2 myvm-disk1.qcow2 #如果需要esxi导入则需要加水-o参数 qemu-img convert -f raw temp/disk-drive-ide0.raw -o adapter_type=lsilogic,subformat=streamOptimized,compat6 -O vmdk 100.vmdk 直通 1 qm set 100 -sata0 /dev/disk/by-id/ata-Colorful_xxxxxxxxxxxxxxxxxxx

2021年2月5日 · 1 分钟 · 浅忆

IKOULA C-StorageII 5折机器

前几天IKOULA 5折活动就上了这款机器,12.99欧的样子,蛮不错的~ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ---------------------------------------------------------------------- CPU Model : Intel(R) Xeon(R) CPU E31220 [url=home.php?mod=space&uid=175]@[/url] 3.10GHz CPU Cores : 4 CPU Frequency : 2530.147 MHz CPU Cache : 8192 KB Total Disk : 3687.4 GB (3.0 GB Used) Total Mem : 7946 MB (836 MB Used) Total Swap : 1023 MB (0 MB Used) System uptime : 0 days, 0 hour 2 min Load average : 0.44, 0.25, 0.10 OS : Debian GNU/Linux 9 Arch : x86_64 (64 Bit) Kernel : 4.15.18-30-pve TCP CC : cubic Virtualization : Dedicated Organization : AS21409 Ikoula Net SAS Location : Paris / FR Region : Île-de-France ---------------------------------------------------------------------- I/O Speed(1st run) : 179 MB/s I/O Speed(2nd run) : 177 MB/s I/O Speed(3rd run) : 173 MB/s Average I/O speed : 176.3 MB/s ---------------------------------------------------------------------- Node Name Upload Speed Download Speed Latency Speedtest.net 939.86 Mbps 940.75 Mbps 3.06 ms Beijing CU 413.42 Mbps 659.80 Mbps 222.46 ms Shanghai CT 0.51 Mbps 450.41 Mbps 211.26 ms Guangzhou CT 2.32 Mbps 13.37 Mbps 227.53 ms Guangzhou CU 0.28 Mbps 255.96 Mbps 300.72 ms Shenzhen CU 0.53 Mbps 856.65 Mbps 191.32 ms Hongkong CN 372.65 Mbps 906.42 Mbps 193.00 ms Singapore SG 0.94 Mbps 748.87 Mbps 249.70 ms Tokyo JP 101.93 Mbps 2.91 Mbps 215.84 ms --------------------------------------------------------------------- 硬盘是新的~ ...

2021年2月2日 · 2 分钟 · 浅忆

cloudflare(cf) ssl 无法部署的一个问题

背景 前几天由于云筏那里把我的域名从cf处删除后,导致解析全部回源,ssl证书异常! 后来用了ion的cfp版本,但是ssl一直处于 待颁发(错误) 状态,将鼠标移到三角感叹号出发现报错 caa error: xxx.x 这才想起申请let’s 通配符证书时加了CAA记录 1 0 issue "letsencrypt.org" 解决方法 所以这里有2种处理方法 将 let’s 的caa 记录删掉 或者将cf的证书颁发机构也加入CAA 0 issue “digicert.com” CAA:允许域所有者指示允许哪些CA为其颁发证书。 所以加了let’s 的CAA记录就会导致其他的CA颁发证书失败,这个时候就需要将带颁发的CA加入CAA。

2021年1月6日 · 1 分钟 · 浅忆

关于OVH或SYS(soyoustart)能不能做邮件服务器问题

老早就想知道了,问了论坛没啥回应,今天就去翻了下sys的tos,其中 https://www.soyoustart.com/ie/termsofservice/version/Special_Conditions_for_So_You_Start_Dedicated_Server_2013-12-05.pdf 第七条就是关于邮件的,机翻如下 1 2 3 4 5 6 7 8 9 10 11 12 13 第7条:防止供应商网络发送垃圾邮件的措施供应商应实施技术措施体系,以防止从其基础设施中发送欺诈性电子邮件和垃圾邮件。 供应商应监视从服务器到互联网上端口25(SMTP服务器)的传出流量,这应包括通过自动工具监视流量。 供应商不得对流出的流量进行过滤或拦截,而应延迟几秒钟。 这些操作应由供应商在服务器和互联网之间并行进行。 对已发送的电子邮件不执行任何操作。 供应商不得对电子邮件进行任何标记,也不得以任何方式修改客户发送的电子邮件。 在供应商进行这些操作期间,除统计数据外,不得存储任何信息。 该操作应由供应商定期且以全自动方式进行,并且客户确认在监视端口25(SMTP端口)的流量期间不涉及人工干预。 如果来自客户服务器的外发流量(包括电子邮件)被识别为垃圾邮件或欺诈性电子邮件,则供应商应通过电子邮件通知客户并阻止服务器的SMTP端口。 即使服务器被识别为垃圾邮件,供应商也不应保留从服务器SMTP端口发送的电子邮件的任何副本。 客户必须通过“开始使用技术协助”请求解除SMTP端口的阻塞。 任何被识别为垃圾邮件的新电子邮件都将导致供应商较长时间重新封锁SMTP端口,具体取决于供应商的合理判断。 如果发生供应商第三次阻塞SMTP端口的情况,则供应商保留拒绝取消SMTP端口的任何新请求的权利。 大概意思是可以做邮件服务器,但是不得发送垃圾邮件,ovh不会保存邮件副本也不会标记,但是如果被程序识别到垃圾邮件会封禁25端口,需要工单解封,超过3次则永久关闭25端口。

2020年12月10日 · 1 分钟 · 浅忆