博客
Java 单例模式
双重校验懒汉式单例public class Singleton {
//1. 避免jvm指令重排 由于JVM具有指令重排的特性,执行顺序有可能变成 1-3-2。指令重排在单线程下不会出现问题,但是在多线程下会导致一个线程获得一个未初始化的实例。例如:线程T1执行了1和3,此时T2调用 ge
Java 工厂模式
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
Java 模板模式
public abstract class Template {
public final void templ() {
System.out.println("开始");
code();
System.out.println("结束");
}
public abstract v
Java 装饰者模式
接口Printerpublic interface Printer {
void start();
void print();
void stop();
}
实现类 HPPrinter
public class HPPrinter implements Printer {
Java Proxy.newProxyInstance动态代理
定义接口public interface Student {
void buy();
String talk();
}
实现类public class Lisi implements Student {
@Override
public void buy() {
System.ou
Spring自定义注解加载和使用
Spring在扫描类信息的使用只会判断被@Component注解的类所以任何自定义的注解只要带上@Component(当然还要有String value() default "";的方法,因为Spring的Bean都是有beanName唯一标示的)都可以被Spring扫描到,并注入容器内例: Spr
SpringDataJPA + SQL Server 分页查询返回page0_字段
在配置了方言后, 使用 jpa 的分页查询(Pageable)时, sql返回的字段都变成了这样{
"page1_": "2020121800040029834",
"page2_": 19.25,
"page3_": null,
"page0_": "2020-12
SpringBoot连接Redis服务出现Command timed out
docker 部署的redis一直出现超时docker pull redis
网上的都说要设置这个值spring.redis.timeout=50000
然而实际使用过程中仍然超时查看redis 服务端配置-bash# cat redis.conf | grep tcp-k
tcp-keepali
SpringBoot RedisTemplate 操作不同的库
其他开发解决不了redis切换库, 于是通过消息队列, 让其他项目去操作对应的库, 太奇葩了, PM居然不管???@Bean("redisTemplateForDb6")
public RedisTemplate<Object, Object> redisTemplate(RedisConnecti
Jenkins + Gitee 持续集成
接上文/article/537098261463302145 Jenkins安装JDK安装将jdk-8u171-linux-x64.rpm(oracle官网下载)上传至服务器执行安装命令rpm -ivh jdk-8u171-linux‐x64.rpm
RPM方式安装JDK,其根目录为:/usr/ja
Redis实现分布式锁
boolean redisRes = stringRedisTemplate.opsForValue().setIfAbsent(key, value)
原子操作当key不存在, 存入value,返回true当key存在, 不进行操作, 返回false当处于redis事务中 , 返回null
SQL SERVER timestamp类型 不能使用java.sql.Timestamp类型对应
实际应该使用 CONVERT ( bigint, addTimestamp)进行转换, 然后用long接值
JPA + SQL SERVER 列名无效
用实体类接返回结果报列名无效.暂时只能用List<Map<String, Object>>
Maven插件自动构建项目镜像
搭建docker私有仓库docker pull registry
启动容器docker run ‐di --name=registry -p 5000:5000 registry
打开浏览器 输入地址http://localhost:5000/v2/_catalog看到{"repositories"
SpringCloud (一) : 创建工程
在idea中, 创建maven工程blog-parent引入基本依赖<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o
SpringCloud Bus 刷新不了配置
不要使用@Value("${config.test}")
private String test;
改为使用@ConfigurationProperties(prefix = "config")
@Component
public class UserConfig{
private String
Windows 创建软链接
比如将chrome的缓存从系统盘重定向到其他盘mklink /D sourcePath targetPath
示例mklink /D "C:\Users\root\AppData\Local\Google\Chrome\User Data\Default" D:\soft\chrome\Defaul
Chrome翻译插件url指向国内站点
安装google翻译插件找到安装路径将translate.google.com全部替换成translate.google.cn将文件夹复制出来加载已解压的拓展程序
日志规范
日志中要打印参数错误示例 @GetMapping("/share_coupon")
public ActionResult shareCoupon(Long couponSn) {
//validate code
try {
retur
AOP拦截controller方法注入参数 代替@RequestBody
效果如下加上@Pass放弃aop拦截注入,使用spring mvc的参数注入核心方法package com.github.aop;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxm