Caused by: com.oracle.svm.core.jdk.UnsupportedFeatureError: No classes have been predefined during the image build to load from bytecodes at runtime.

spirngboot项目,graalvm native 编译完成后运行服务运行报错,

Caused by: com.oracle.svm.core.jdk.UnsupportedFeatureError: No classes have been predefined during the image build to load from bytecodes at runtime.

看帖子说是jdk版本问题,可我是用的graalvm编译的没错呀。后测试发现跟springboot版本有关,springboot3.1.0会报这个错,3.0.4和3.0.7测试过没问题

反序列化错误com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `***` (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information

在junit中用jackson做反序列化的时候报错

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of *** (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information

原因是用了2个class继承一个interface,反序列化interface时无法找到用哪个class结果出了异常,网上能搜到的解决方法是写个配置类,如:@Bean注解创建ObjectMapper、重写configureMessageConverters方法。

发现了一个更简单的方式,是在属性中加@JsonDeserialize注解如:

//这里I是interface I2是I的实现类
@JsonDeserialize(contentAs=I2.class)
public interface I{
  Integer a;
}

这样Junit中的反序列化就能跑通了

发现个vue绑定boolean的小bug

测试用的版本为3.2.47

比如<div v-if=”state.myobj.isTrue”></div>

class myobj
{
isTrue:boolean
}

自定义了一个myobjd对象,里面有个isTrue,如果是boolean类型,通过改变isTrue=true或false是无法控制div是否显示的。

如果isTrue是个number类的,如<div v-if=”state.myobj.isTrue==1″></div>

class myobj
{
isTrue:number
}

然后通过state.myobj.isTrue=1或=0能控制div是否显示

不知是bug还是用法有问题

http-vue-loader是个好东西

需要写个简单的小项目,3个网页跳转,有些逻辑处理

想到了用vue,简单处理不用构建工具编译,创建了3个html,分别使用vue处理模板和逻辑显示,这时增加了个需求,有个悬停的音频播放按钮要贯穿3个页面,这要分开写,页面一跳转音频就停止了。

这时就需要一个能在html中加载多个vue模板的的功能,终于发现了:
http-vue-loader

官网github例子中主要是用作子组件和如何添加到当前页,实际使用时发现搭配vue-router也十分好用,跟使用构建工具没有什么大差别。

html中: 
const Question=httpVueLoader('question.vue')
  const routes = [
        { path: '/question', component: Question },
    ]

question.vue中:
<script>
    module.exports = {
        data() {
        ......
         }
    }
</script>

//唯一的使用差异可能也就是 module.exports  这里了

vue的tinymce-vue原来只是个script加载器

tinymce比较好用,自定义一些功能也很方便。使用中发现加载总是不是那么迅速,一开始以为性能就是这样的,通过加载记录发现tinymce中的js组件居然都是加载tinymce官网的资源,一直在访问外网能不慢么。

就想tinymce-vue是vue组件呀,都install进来了,怎么还在走外网呢?打开tinymce-vue包发现实际上就是个script加载器,使用tinymce-vue后,实际上不需要install tinymce也能运行,他会判断本地是否有tinymce环境,没有的话,就直接创建script标签加载网页版本的js文件,再使用普通网页的方式初始化tinymce组件。

目前的解决方式是把tinymce-vue中scriptloader复制到本地再改下js路径,把资源放到自己的服务器,这样就稳多了

maven提交中央仓库需要注意的地方

标准流程网上有很多跟着做就行,注意的点有几个

1.groupId要留意别写错,有时提示403可能不是账号问题是groupId没对上

2.gpg公钥上传服务器,我的win10命令行上传提示失败,结果发现公钥的网页可以支持文件上传

3.deploy成功发布后release是删除不了,所以release版本慎重点发布,开发的时候用SNAPSHOT版本就很好。release版本是可以在mvnrepository.com搜索到的。


jpa ddl=update 无法创建新表的问题


场景是阿里云rds1个实例有两个库,正式库和beta库。springboot 1.5.22 jpa 发现beta库自动建表正常,正式库只能更新无法创建新表。 两个库使用相同账号。

每次更新正式服都很被动。给源码打断点发现,正式服只会执行合并操作,并且检测到的是beta服的表,很诡异。主要是因为正式库和beta在一个实例里,然后账号权限可以访问两个库。可能是jpa有bug,会检登录测账号下的所有库,导致如果beta服已经创建了表,正式服在创建相同名字表时只会执行表合并不创建新表。

处理方式是拆分俩账号,每个账号只分配能访问一个库的权限就解决了。。

k8s节点rsyslogd内存占用高

服务器是k8s一个节点,经常警告内存占用高,实际top查看并没有看到占用高的进程。

使用命令查看:

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

发现rsyslogd竟然占用了37.9…这不是坑么。

通过 systemctl status rsyslog 并没有发现别人家说的配置错误等问题

重启下rsyslogd服务解决,再观察下吧

systemctl restart rsyslog