Apache RocketMQ 是一款 低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。
这些应用场景中,数据操作方面的共同特点是:
对于这样的数据,我们更适合使用 MongoDB来实现数据的存储。
| SQL术语 | MongoDB术语 |
|---|---|
| database | database |
| table | collection |
| row | document |
| column | field |
官网下载,选择msi的形式下载文件
双击打开,选择Custom 自定义安装目录比如说D
,选择自己想要的地址,一直next就行了在最后的页面,安装 "Install MongoDB Compass" 不勾选,否则可能要很长时间都一直在执行安装
官网下载,选择zip的形式下载文件,解压到本地
进入解压后的文件夹,和bin目录同级下创建data和logs文件夹
由于业务需要,得对pdf文件进行盖章上传,需要jks文件进行解密获取秘钥,demo将jks文件放在resource中可以正常解密,而将代码结合在主程序中就提示错误Invalid keystore format,前提是密码正常,jks文件正常有效
首先不通过Thread.currentThread().getContextClassLoader().getResource("test.jks")的方式获取文件,先将文件存在其他盘的绝对路径中,进行测试,文件可以正常加载解密
第二步将Thread.currentThread().getContextClassLoader().getResource("test.jks")方法获取路径,复制出来写死在配置项中,加载文件,提示错误Invalid keystore format。
从两个测试来看,首先从第一个测试来看jks文件是正常的,密码正确,第二个测试来看不是类加载的加载问题,路径正常,但是加载器的路径是target/classes路径下面的文件,这个路径的文件有问题,源文件8kb,打开target路径查看,文件是12kb,说明maven打包的时候文件被修改了,导致解密错误
在模块的pom文件中添加resources内容进行过滤文件,第一个是resource表示resources目录下都是资源文件需要打包,第二个resouce表示需要过滤stamp/* 目录下的文件,不要替换占位符
xml<project>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>stamp/*</exclude>
</excludes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
开发过程中一直提示数据库错误,内部类型转换异常,排查字段命名和数据库是否对应,数据类型是否相同都没问题,发现之前实体对象使用@builder类型来构建对象的注解导致的问题
text### Error querying database. Cause: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'VALUE_TYPE' from result set. Cause: java.sql.SQLException: 无法转换为内部表示
工作中很多时候需要从Class类中获取属性的值,下面会基础获取,以及结合工作内容
java
public class Main {
public static void main(String[] args) {
Person person = new Person("张三", 25);
try {
Field nameField = Person.class.getDeclaredField("name");
Field ageField = Person.class.getDeclaredField("age");
// 设置访问权限,如果属性是私有的
nameField.setAccessible(true);
ageField.setAccessible(true);
// 获取属性值
String name = (String) nameField.get(person);
int age = (int) ageField.get(person);
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}