1、nacos读取配置不正确问题
nacos客户端通过调用/listener接口监听配置信息是否修改,核心方法为:ConfigCacheService#isUptodate
public static boolean isUptodate(String groupKey, String md5, String ip, String tag) {
String serverMd5 = ConfigCacheService.getContentMd5(groupKey, ip, tag);
return StringUtils.equals(md5, serverMd5);
}
public static String getContentMd5(String groupKey, String ip, String tag) {
CacheItem item = CACHE.get(groupKey);
if (item != null && item.isBeta) {
if (item.ips4Beta.contains(ip)) {
return item.md54Beta;
}
}
if (item != null && item.tagMd5 != null && item.tagMd5.size() > 0) {
if (StringUtils.isNotBlank(tag) && item.tagMd5.containsKey(tag)) {
return item.tagMd5.get(tag);
}
}
return (null != item) ? item.md5 : Constants.NULL;
}
nacos将所有配置信息缓存在CACHE中,然后以名称空间、group、data ID作为key,取得配置信息后计算md5值比较。
注意:public的名称空间id是空,不是public,如果指定配置中心名称空间为public,调用/listener从缓存中获取不到配置,item值为null,则判断新旧md5值不相等。
2、mybatis if test条件判断数组参数
mybatis做if test判断的时候,如果参数只用来做条件判断,查看sql参数的时候会发现参数根本没传,所以条件接收到的参数会一直是空的。如果参数是数组
<if test='aa != null and aa.length > 0 and aa[0] == "0"'>
。。。
</if>
可以通过aa[0]判断第几个元素的值作为条件
3、mybatis一对多分页查询
一对多查询分页问题,之前踩过这个坑,但是没有记录,今天又遇到了,记录一下:
使用collection标签,传参用column,用主表的column作为从表的参数
<resultMap type="com.xxx" id="xxxStatusRecoResult">
<result property="id" column="r_id" />
<result property="status" column="r_status" />
<collection property="recordDetailsList" ofType="com.xxxStatusRecordDetails"
select="selectDetails" column="r_id"/>
</resultMap>
<select id="selectDetails" resultMap="xxxStatusRecordDetailsResult">
select d.id d_id, ..., d.status d_status, d.marks d_marks
from xx_status_record_details d
where d.xx_status_id = #{id}
</select>
4、table中加标签v-model的三种方式
vue官网提供了使用原生input的方式
props: ['value'],
render: function (createElement) {
var self = this
return createElement('input', {
domProps: {
value: self.value
},
on: {
input: function (event) {
self.$emit('input', event.target.value)
}
}
})
}
如果想用el-input:
建议使用插槽的方式,先设置scope: true,然后在table中添加template标签
<template #xxx="{scope}">
<el-input v-model="scope.row.xxx" placeholder="请输入"></el-input>
</template>
5、el-table使用v-if控制列动态显示隐藏
v-if判断的变量刷新时调用el-table原生方法doLayout,并在动态显示隐藏列el-table-column标签中添加属性 key=“name”
6、oracle有的表名查询不到
oracle表和字段是有大小写的区别。oracle默认是大写,如果我们用双引号括起来的就区分大小写,如果没有,系统会自动转成大写。
7、redis单点和集群配置属性不同
redis:
# host: 192.168.1.90
# port: 6379
# password: 123456
cluster:
nodes:
- xxx:7000
- xxx:7001
- xxx:7002
- xxx:7003
- xxx:7004
- xxx:7005
8、flyway启动报错
No value provided for placeholder expressions: ${billNo}. Check your configuration!
flyway把sql脚本中的${}当作占位符参数解析,但是又没有找到billNo参数导致的
解决方法:修改flyway.conf文件的placeholderReplacement属性,默认为true,改为false
9、获取验证码报错
Caused by: java.lang.InternalError: java.lang.reflect.InvocationTargetException
at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:86)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
at java.desktop/java.awt.Font.getFont2D(Font.java:497)
at java.desktop/java.awt.Font$FontAccessImpl.getFont2D(Font.java:237)
at java.desktop/sun.font.FontUtilities.getFont2D(FontUtilities.java:139)
at java.desktop/sun.font.StandardGlyphVector.initFontData(StandardGlyphVector.java:1132)
at java.desktop/sun.font.StandardGlyphVector.init(StandardGlyphVector.java:1121)
at java.desktop/sun.font.StandardGlyphVector.<init>(StandardGlyphVector.java:167)
at java.desktop/java.awt.Font.createGlyphVector(Font.java:2734)
at com.google.code.kaptcha.text.impl.DefaultWordRenderer.renderWord(DefaultWordRenderer.java:66)
at com.google.code.kaptcha.impl.DefaultKaptcha.createImage(DefaultKaptcha.java:43)
可能是由于linux服务器缺少swing 需要的字体。
yum install dejavu-sans-fonts fontconfig -y
服务器安装字体后重启应用,问题解决。
10、查询oracle表创建时间
SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME = 'xxx'
yum install dejavu-sans-fonts fontconfig -y
服务器安装字体后重启应用,问题解决。
10、查询oracle表创建时间
SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME = 'xxx'