- 博客(34)
- 资源 (1)
- 收藏
- 关注
原创 Spring参数解析器、消息转换器
Spring参数解析器、消息转换器,HandlerMethodArgumentResolver 和 HttpMessageConverter
2024-09-18 23:35:21 935
原创 BeanDefinition的解析时机
传统的SpringMVC项目允许标签和注解(@Configration)同时存在,从标签和注解中解析BeanDefinition的时机是不一样的。
2024-01-21 16:52:55 909
原创 @ControllerAdvice和ResponseBodyAdvice
@ControllerAdvice与ResponseBodyAdvice
2022-07-09 12:43:20 1565 1
原创 SpringBoot中使用@JsonFormat无效
日期格式数据入库对于日期格式的数据,一般前台会传入一个13位的Long类型,在Controller中使用@RequestBody可以将long类型的数据直接转换成Date类型,存入数据库时也不需要做额外的工作。日期格式查询当我们需要查询日期信息时,一般会将其转换成宜读格式,如"yyyy-MM-dd"格式。此时可以直接在实体类字段上加上@JsonFormat(pattern = “yyyy-MM-dd”),如下:class Stu { @JsonFormat(pattern = "yyyy-MM-d
2022-05-18 18:03:19 12033
原创 SpringBoot请求处理流程
正常流程DispatcherServlet#doDispatch请求处理流程可以参照DispatcherServlet的doDispatch方法。将其简化如下:public void doDispatch() { try { try { getHandler();//获取拦截器和处理器 applyPreHandle();//应用前置拦截器 handle();//执行处
2022-04-16 23:00:40 1029
原创 SpringBoot引入hibernate.validator参数校验
添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>或者 <dependency> <groupId>o
2022-04-10 18:39:34 4663
原创 Web项目结构
常见项目结构SpringMvc中处理静态资源在SpringMvc中处理静态资源时,在设置资源路径时可以有两种方式,一种是从webapp目录下找,以/开头,另一种是以classpath开头,标识从类路径下找,是一种简便写法,可以用第一种方式替换。WEB-INF的含义WEB-INF里面放不允许客户端访问的资源,比如我们的class文件、配置文件、三方依赖。允许客户端访问的资源不应该放在这。所以推荐结构为:...
2022-02-26 11:00:02 817 1
原创 Java 多态
Java对象,在调用方法时,会根据方法的实际类型决定具体调用哪个方法,这种机制叫动态绑定,也叫多态。这里总结几个注意点静态方法,私有方法,final方法,构造方法不具备多态条件因为这些方法一定不会被重写,在编译期就能确定具体会调用哪个方法被重写的方法才具有多态性在运行时根据调用对象的实际类型确定具体调用哪个方法通过 【实例.属性】的方式获取属性值时,是根据实例的类型决定具体获取父类的属性还是子类的属性。父类和子类可以拥有相同名称的属性,它们的类型可以不同。在方法(不管该方法是否具有多态性)中使
2022-01-07 18:06:38 203
原创 nginx反向代理中的/
nginx在前后端分离项目中常用作反向代理服务器。在配置的过程中有一些细节需要注意location会被完全替换加入有如下配置location /api/ { proxy_pass http://serverIp:port/someProject; }前端发起请求http://localhost:80/api/get那么代理之后的url是http://serverIp:port/someProjectget因为原url中/api/被完全替换了,所以l
2021-12-11 23:34:02 443
原创 k8s1.21 安装ingress-nginx
k8s, ingress-nginx,Deployment+NodePortk8s的ingress-nginx可以通过只占用node的两个端口(分别是http和https)来发布多个服务,而nodePort类型的Service,有几个服务就需要占用node几个端口,不利于端口管理。所以今天我们就来安装ingress,并且发布两个服务。
2021-12-11 12:43:39 4606
原创 SpringBoot常见的Bean生命钩子函数执行顺序
分界点 -> 构造函数自动注入一般在构造函数之前,比如@Autowired、@Value、@Resource等;在构造函数之后的主要有:@PostConstruct修饰的方法InitializingBean的afterPropertiesSet()方法@Bean的initMethod属性指定的方法那么这三个钩子函数的先后顺序优势怎样的呢?interface S extends InitializingBean { void init();}@Bean(initMet
2021-12-09 10:28:00 985
原创 isInterrupted、interrupt和interrupted
由易到难开始介绍吧isInterrupted最容易理解的,查看线程是否被打断,没有副作用。可以自己询问自己,也可以在A线程中询问B线程。 Thread A = new Thread(() -> { //自己询问自己 Thread.currentThread().isInterrupted(); },"A"); A.start(); Thread B = new Thread(() ->
2021-11-19 23:44:54 829
原创 ThreadLocal
作用保证共享变量线程安全原理通过为每个线程创建资源备份,使得线程之间不再竞争唯一的资源解释class User{ public String nameNotSafe = ""; public ThreadLocal<String> nameSafe = new ThreadLocal<>();}当多个线程操作同一个User对象时,nameNotSafe是真的只有一份,谁都可能修改它,它线程不安全;当线程修改nameSafe时,这个nameSafe也是只
2021-11-19 17:20:50 318
原创 Log4j2注意点
前提约定日志级别由低到高: Trace < Debug < Info < Warn < ErrorLogger、Appender和PatternLayout数量关系Logger : Appender = 1 : nAppender : PatternLayout = 1 : 1一个Logger可以有多个Appender,一个Appender只允许有一个PatternLayout。<Console name="console" target="SYSTE
2021-11-14 21:35:02 310
原创 k8s发布vue、springboot项目
前提你已经有了一个k8s集群,如果没有,可以参考CentOS7搭建k8s集群预期效果前端、后端和数据库分别通过三个Service表示,相互之间通过Service的CLUSTER-NAME:port来相互访问,而不是通过CLUSTER-IP:port来相互访问,因为每次重新部署Service,CLUSTER-IP都会变。思路前端:nginx + vue创建镜像后端:Java + springboot项目创建镜像数据库:MySQL镜像难点:前端怎么访问后端?后端怎么访问数据库?nginx肯定要
2021-10-10 11:03:11 555
原创 nodePort、port、targetPort和containerPort
containerPort用在deployment的container标签下,与Dockerfile文件中EXPOSE的端口应一致nodePort、port、targetPort用在service组件中nodePort:k8s服务对外暴露服务的端口,暴露之后,可以对外提供服务port:k8s服务之间相互访问的端口targetPort:当一个pod中有多个容器时,Service怎么知道要选择哪个容器的端口呢?就是根据targetPort来确定。一般来说targetPort应该是对外提供服务的容器的端口
2021-10-10 10:44:21 2062
原创 CentOS7搭建k8s集群
这里写自定义目录标题准备条件硬件准备docker的准备k8s源的准备镜像准备安装软件初始化master节点排错注意点参考准备条件硬件准备请确保CPU至少2核,内存2G内核4以上(包括4)centOS7内核升级.禁用防火墙如果是多台虚拟机,需要保证虚拟机hostname不同。如果几台虚拟机是复制出来的,很可能忘记修改hostname、静态IPsystemctl stop firewalldsystemctl disable firewalld禁用SELINUX临时禁用sete
2021-09-27 22:22:51 779 1
原创 K8S无法使用本地镜像 ErrImageNeverPull
单节点集群单节点集群应该保证在master节点上可以调度:kubectl taint nodes --all node-role.kubernetes.io/master-单节点集群要想使用本地镜像需要满足两个条件1 - imagePullPolicy设置为IfNotPresent(如果本地没有,才从远程仓库拉取) 或者 Never(只从本地拉取)2 - 本地要有这个镜像。在单节点集群上这个条件一般都能满足这条命令允许master节点调度,但有时候却不灵。。。一主多从这种模式要想使用本地镜
2021-04-23 11:26:19 10808 4
原创 docker网络和应用发布
这里写自定义目录标题docker网络1 - 创建docker网络2 - 创建MYSQL容器实例3 - 创建SpringBoot应用docker网络docker网络有三种模式:1 - none2 - host3 - 桥接本文演示以下内容:1 - 将应用打包成镜像,并以容器的方式运行;2 - 容器持久化mysql数据库3 - 使应用容器可以通过固定名称连接数据库容器,而不是通过ip连接。基本思路就是:1 - 创建一个docker内部网络发布应用和数据库2 - 通过docker的端口映射将
2021-04-12 17:36:30 115
原创 java动态代理
特点1 - 基于接口2 - 不能代理枚举对象import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;interface Person{ public void sayHello(String name);}class Tom implements Person{ @Override public void s
2021-02-24 18:50:36 106
原创 Java瑣碎知識點
枚舉類中定義方法enum S{ D(1){ public void f1(){System.out.println("ddd");} } private int i; S(int i){ this.i = i; } public void f1(){ System.out.println("sss"); }; } public static void main(String[] args) {
2021-01-06 16:41:50 90
原创 ==和equal
==和equal== 比較的是地址,對基本類型和引用類型都可以用equal比較的是字面量,只對引用類型可用對於String要注意編譯時常量池,即在運行前能確定值的字符串會被存進常量池,String s1 = "s";String s2 = "s";則s1 == s2和s1.equal(s2)都是true,因爲s1,s2指向常量池中相同的地址 String s = new String("sss"); String d = new String("sss");
2020-12-23 15:34:54 101
原创 IDEA对maven项目打包
在项目中经常需要打jar包,或是集成工具类,或是做一个带main入口的可运行程序。如果你只希望对项目中某一个Java文件打包,这是不明智的,很有可能在解决依赖上浪费很多时间,如果你就恶的它足够重要,就给他单独建一个maven工程。
2020-07-07 21:11:59 594
原创 IDEA打包包含多个Main文件的项目
IDEA打包包含多个Main文件的项目如果项目中包含多个main方法,用IDEA怎么打包?1.创建一个单纯的maven项目2.创建结构如下,每个main函数简单的输出自己的类名![在这里插入图片描述](https://img-blog.csdnimg.cn/20200705081016378.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L
2020-07-05 08:42:55 3092 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人