实践问题及解答:
1.问:用户数据莫名其妙的插入了2条一模一样的数据,创建时间是一样的,记录id加了1; 答:接口只有getUserInfo,判断是否有这个用户,没有则直接创建;创建语句加锁3秒这个用户。
2.问题:mapper的xml自己写的SQL语句报找不到,没有和java方法映射关联 原因: tk.mybatis.spring.annotation.MapperScan; org.mybatis.spring.annotation.MapperScan; 使用tk时MapperScan包名不要引用错了,名字一样包名不同很容易出错,查看tk源码,引用了mybastis的,使用了tk必然会存在这个问题,但tk又比较省事。
3.sonar常见错误
1)、Double check误区 www.cs.umd.edu/~pugh/java/…
@NotThreadSafe
public class DoubleCheckedLocking {
private static Resource resource;
public static Resource getInstance() {
if (resource == null) {
synchronized (DoubleCheckedLocking.class) {
if (resource == null)
resource = new Resource();
}
}
return resource;
}
static class Resource {
}
}
@ThreadSafe
public class SafeLazyInitialization {
private static Resource resource;
public static synchronized Resource getInstance() {
if (resource == null)
resource = new Resource();
return resource;
}
static class Resource {
}
}
//Using "volatile":
class ResourceFactory {
private volatile Resource resource;
public Resource getResource() {
Resource localResource = resource;
if (localResource == null) {
synchronized (this) {
localResource = resource;
if (localResource == null) {
resource = localResource = new Resource();
}
}
}
return localResource;
}
static class Resource {
}
}
2)、类判断 if (instance != null && instance.getClass().getName().equals(String.class.getName())) 改成 instance instanceof String
3)、文件流未关闭
4)、随机数 new Random【错】 VS SecureRandom.getInstanceStrong()【对】