记录开发小问题

1,@Value无法注入

情况1:变量使用static和final进行修饰,无法注入

清空2:该变量所在类重新实例化了

2,sql生产异常

情况,使用0作为查询条件是,sql中判断条件是否存在时,0!="的结果是是false,因为数字0会被xml等价于"",因此条件按不成立,条件下的sql将无法拼接上sql

3,xml中,部分符号跟xml原生符号相同,如<和>比较符号需要借助&lt;或者&gt;进行处理

4,xml中使用#{}取参数动态作为数据库字段时,sql结果什么也没查到

xml动态解析sql时,#{}和${}效果不同,字段应选择后者取值

  • #{ }解析为一个 JDBC 预编译语句(prepared statement)的参数标记符?。会给传入的参数加一个双引号
  •  ${ } 仅仅为一个纯粹的字符串(String)替换,在动态 SQL 解析阶段将会进行变量替换,将传入的参数直接显示生成在sql中,不会添加引号

5,一个方法有两个实现类,且实现类为继承关系,程序固定调用子类

疑惑spring自动注入会同时注入子类父类,是如何选择调用子类的?最后发现两个实现类都并未使用注解注入,而是通过应该一个配置文件实例化子类后,把子类@bean注入,因此,父类并未使用spring自动加载管理,容器中只有一个实现类。

6,使用逆向生成后,启动项目发现classnotfound,原因是生成的mapper文件类路径前出现了空格,影响了xml解析,所以启动失败

7,nginx挂载静态资源是,配置路径为root    /home/VUE/x86_master/dist;

/home:存放所有普通用户系统用户的默认工作目录(又称为宿主目录),例如用户帐号“zhangsan”对应的宿主目录位于“/home/zhangsan”

/root: 为Linux系统超级用户root的宿主目录,默认情况下只有root的宿主目录在根目录下,而不是在/home下

8,挂载静态资源未生效,反复修改配置文件始终没有效果

误把解压完成的nginx安装包当作安装路径,配置解压的配置文件,导致始终没有效果,怀疑人生,后发现安装时,未指定安装路径,会默认安装到/usr/local/nginx,配置文件也在该路径,经配置,成功生效。

9,idea ctrl shift f快速搜索键失效

原因:可能是与其他软件的快捷键冲突,如搜狗,该快捷键组合为切换繁简,关掉该快捷键即可

10,使用工具类时,需要注入一个service,于是加了一个静态变量并且使用@Autowired注入

结果是爆了空指针,查资料了解到,静态变量是类变量,不是对象的属性,而是属于类的,spring自动注入是在容器中实例化对象,因此无法注入静态变量,会出现空指针。

如果非要注入的话,可以在定义一个普通类,使用spring自动注入对象,然后使用@Component和@PostConstruct()实现静态类加载Spring自动注入,再@PostConstruct方法下将注入的对象赋值给静态对象,完成注入

@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。
@PostConstruct 在构造函数之后执行,init()方法之前执行。

执行顺序:Constructor >> @Autowired >> @PostConstruct

11,代码连接上测试环境数据库后,一直报错,加载不属于本项目的类,出现文件找不到错误

本地启动并不会报错,考虑是其他环境上的因素引起,观察错误栈信息,发现确实存在redis相关报错,通过redis断点找到上级方法,最后发现一个redis时间监听器被注册进来,排查该监听器属于redis.session包的组件,该包用于共享session,本项目暂不需用到本功能,因此,将该依赖删除,则可以避免该错误
 

12,前端接收的邮件正文,出现<>号时,无法解析,因为当浏览器识别到<时,就会把该部分当标签解析,解析异常。

通过HtmlUtil.escape()方法将< > & " '转成字符实体,防止浏览器错误解析

13.从本地注册服务注册到nacos,本地可以访问,把其中一个服务放在环境上注册到nacos,openfeign调用超时

多网卡环境下,注册到nacos的ip可能是虚拟网卡ip,不是机器ip,导致nacos在寻找服务时,不能正确定位到服务位置,可以在配置文件中指定机器ip,或者将两个服务都放在环境上,就可以正常调用

14,记录邮件系统调用病毒检查模块,但是fed对应处理MQ消息的的消费者不能马上收到消息,要过好几个消失才能收到消息,但手动点击发送可以消费

排查,在rocket-console上发现,消费者模块,fed所在组订阅的topic时retry队列,而普通队列订阅的时另一个,考虑是因为topic没有被消费者组订阅到,导致消费者一直没有取拉取消息,而主动推送可以成功,于是查询哪些地方是属于这个消费组,后发现在邮件系统和fed各存在一个消费者同组但订阅不同topic,rocketMq允许一个组订阅多尔topic,但不允许同组的各个消费者分别订阅不同topic,会产生关联关系覆盖,导致消息无法顺利接收,后将bigmail上的消费者所属组改变,解决

15,观摩别的项目代码,发现项目类中很多属性都没有使用@AUTOwired,但是可以使用,我自己试了一下就空指针,看到有构造方法初始化了这些类,猜想是通过构造方法注入的,但是却也没看到哪里调用了该构造方法,于是不能理解,自己查看资料
最后百度到

 Spring 4.3 及以后的版本中,如果这个类只有一个构造方法,那么这个构造方法上面也可以不写 @Autowired 注解,也就是单一构造方法不用写注解也可以注入,采用的构造器注入。

16.在继承QuartzJobBean来实现业务时,@Autowired无法注入到服务上,导致null空指针


通过网上查询原来:Spring容器可以管理Bean,但是Quartz的job是自己管理的,如果在Job中注入Spring管理的Bean,需要先把Quartz的Job也让Spring管理起来。

17,使用网络路径下载资源时候,需注意对中文的url加密,明文中文可能会导致在程序中乱码无法下载

18,使用jar包运行的程序中,使用相对路径是指相对jar包的路径进行解析,如果创建目录,会在jar包中创建,但是jar包本身不可写,因此无法创建

a,获取jar包路径,然后使用绝对路径创建

b,获取系统临时目录来创建文件


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值