
spring
文章平均质量分 88
spring框架全家桶,包括:springmvc、spring-boot...
赶路人儿
一个十年以上编程人员,擅长使用java、python、C++等语言,具有广告投放、个性化推荐引擎等超大规模系统开发经验。
展开
-
Spring AOP 源码解析
之前写过 IOC 的源码分析,那篇文章真的有点长,看完需要点耐心。很多读者希望能写一写 Spring AOP 的源码分析文章,这样读者看完 IOC + AOP 也就对 Spring 会有比较深的理解了。今天终于成文了,可能很多读者早就不再等待了,不过主要为了后来者吧。本文不会像 IOC 源码分析那篇文章一样,很具体地分析每一行 Spring AOP 的源码,目标读者是已经知道 Spring IOC 源码是怎么回事的读者,因为 Spring AOP 终归是依赖于 IOC 容器来管理的。阅读建议:1、先转载 2022-03-20 17:20:23 · 1748 阅读 · 0 评论 -
Spring IOC 容器源码分析
Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。本文采用的源码版本是 4.3.11.RELEASE,算是 5.0.x 前比较新的版本了。为了降低难度,本文所说的所有的内容都是基于 xml 的配置的方式,实际使用已经很少转载 2022-03-20 16:29:58 · 408 阅读 · 0 评论 -
Aware注入Spring底层组件&原理
1、Aware接口Aware 接口,提供了类似回调函数的功能; 我们声明的Bean想要使用Spring 容器底层的一些组件(Application Context,Bean Factory)需要实现xxxAware接口,在创建对象的时候,会调用接口规定的方法注入相关组件;Aware接口定义:一个标记超接口,表明一个 bean 有资格被特定框架对象的 Spring 容器通过回调样式的方法。实际的方法签名由各个子接口决定,但应该通常只包含一个接受单个参数的返回 void 的方法。常见的子接口有:.原创 2022-01-27 21:02:42 · 786 阅读 · 0 评论 -
spring BeanPostProcessor处理器原理
一、简介BeanPostProcessor处理器是Spring开放式架构中必不可少的亮点之一,给足用户权限根据自己的业务需求去更改或者扩展Spring,当然除了BeanPostProcessor外还有其他PostProcessor。BeanPostProcessor在调用初始化方法前及调用初始化方法只会分别调用它的postProcessBeforeInitialization和postProcessAfterInitialization方法,用户可以根据自己的业务需求做相应的处理。二、使用先来看看Bea转载 2022-01-27 16:41:22 · 803 阅读 · 0 评论 -
spring单例bean中依赖了原型bean引发的问题
spring中bean的作用域:众所周知,在Spring容器中,bean的scope默认是singleton单例的。如果在singleton的bean中依赖了prototype的bean,那么会出现下面的问题,原型的bean每次获取的都是同一个对象。看一个例子:1)单例Bean:package com.along.dao; import org.springframework.beans.factory.annotation.Autowired;import org.spri转载 2021-05-10 12:07:57 · 435 阅读 · 0 评论 -
spring应用从多个properties文件中加载数据的问题
<context:property-placeholder>标签<context:property-placeholder>标签提供了一种优雅的外在化参数配置的方式,不过该标签在Spring配置文件中只能存在一份!!!众所周知,Spring容器是采用反射扫描的发现机制,通过标签的命名空间实例化实例,当Spring探测到容器中有一个org.springframework.beans.factory.config.PropertyPlaceholderConfigurer的Bea原创 2021-05-07 15:46:35 · 1241 阅读 · 0 评论 -
spring-boot整合redis(多数据源)
官网:https://spring.io/projects/spring-data-redisSpring Data Redis是Spring Data系列的一部分,可轻松配置并从Spring应用程序访问Redis,并支持low-level和hight-level的抽象接口。可以看到spring data下面共提供了如下技术方案:市面上已经有 Redis、Redisson、Lettuce 等优秀的 Java Redis 工具库,为什么还要有 Spring Data Redis 呢?对于下层,原创 2021-04-29 16:39:44 · 2808 阅读 · 2 评论 -
spring data jpa介绍以及基础示例
JPA介绍JPA的全称是Java Persistence API,提供了一个规范,用于将数据通过Java对象持久化、读取和管理数据库中的关系表。所以JPA本质上就是一种ORM规范,它的目标是实现ORM的天下归一。1、java数据库编程的进化史:1)jdbc:jdbc是jdk提供数据库操作最基础的api,它提供了一套操作数据库的标准规范,不同的数据库厂商通过自己的驱动jar来适配该规范。Class.forName("com.mysql.cj.jdbc.Driver");conn = D原创 2020-09-10 20:18:53 · 905 阅读 · 0 评论 -
springboot web项目debug启动后自动断点在SilentExitException 解决
使用eclipse开发springboot web项目,在main方法类上使用debug启动后,会自动断点进入SilentExitException ,如图:解决办法 :window->preferences ->java->debug 取消“suspend execution on uncaught exceptions”选项即可...转载 2020-08-13 20:16:07 · 1219 阅读 · 0 评论 -
SpringBoot 获取spring bean方式
在使用spring框架中我们都知道,某个类如果使用了@Service、@Autowire 这种依赖注入的方式引用了其他对象,在另外一个类中,只有通过spring的IOC容重中获取这个类的实例时,那些被依赖的对象才能正确被初始化,否则那些被依赖的对象都是null。所以就有一个问题,在普通类中如何获取spring ioc容器中的bean(spring 托管的bean)。我们都知道,在spring中ApplicationContext这个上下文对象是获取bean的基础。在spring boot中,我们可以原创 2020-08-07 10:17:30 · 5634 阅读 · 1 评论 -
自定义spring boot starter
Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增。在传统Maven项目中通常将一些层、组件拆分为模块来管理,以便相互依赖复用,在Spring Boot项目中我们则可以创建自定义Spring Boot Starter来达成该目的。接下来,我们演示如何创建一个spring boot starter。先创建一个Maven项目并引入依赖,pom.xml...转载 2019-02-28 20:50:32 · 435 阅读 · 0 评论 -
使用shedlock将spring schedule上锁
在实际开发中由于项目部署在分布式或集群服务器上,代码中如果使用spring-boot的schedule定时任务,那么就会导致定时任务多次触发。解决这个问题思路很简单,就是通过分布式锁,多个应用实例上的定时任务在执行前先去获取锁,那个实例获取到了锁,哪个示例上的定时任务去执行。本文介绍shelLock(https://github.com/lukas-krecan/ShedLock),给spri...原创 2018-11-20 11:42:40 · 5886 阅读 · 4 评论 -
springboot+druid sql监控页面无法显示sql语句
1、无法显示sql监控数据:按照这篇文章配置好springboot+mybatis+druid,然后打开http://127.0.0.1:8080/druid 页面,可以看到数据源、web监控等信息,但是无法看到sql监控。一直怀疑是配置问题,后来发现是版本。pom.xml中开始引入的是<dependency><groupId>com.alibaba<...原创 2018-07-17 11:33:45 · 8045 阅读 · 2 评论 -
springmvc+mybatis序列化json数据出现双引号等问题解决
我们系统架构采用springboot(springmvc)+mybatis,用mybatis查寻mysql数据后,直接放到List<Map>这样的结构中,这样做非常简单,无需定义实体类,通过springmvc的@ResponseBody注解可以直接将其序列化成json数据,然后返回给前段js来处理。但是,这里遇到了一些问题。1、强制转换异常: 如果用List<...原创 2018-06-26 23:04:35 · 4921 阅读 · 0 评论 -
springboot中使用spring-session实现共享会话到redis(二)
上篇文章介绍了springboot中集成spring-session实现了将session分布式存到redis中。这篇在深入介绍一些spring-session的细节。1、session超时:在tomcat中,如果要设置session的超时,我们可以在web.xml或者springboot的application.properties中直接配置即可,例如在springboot中设置:server....原创 2018-06-19 15:13:35 · 14014 阅读 · 4 评论 -
springboot中使用spring-session实现共享会话到redis
在集群环境中做session共享是必不可少的一步,你想想当用户的请求经过nginx转发到A机器进行登录,然后下一步的操作转发到了B机器,这个时候用户信息是存储在A机器上的web容器中,B机器就识别不了这个用户,这个时候就需要做session共享了。传统session共享解决方案有:1)使用tomcat自身的集群方式:session信息在不同tomcat的jvm中复制,无法做到大规模集群;2)ngi...原创 2018-06-15 19:30:11 · 4737 阅读 · 1 评论 -
springboot启动嵌入式tomcat报错找不到jar包,关键字:FileNotFoundException,derbyLocale_cs.jar,StandardJarScanner.scan
异常:java.io.FileNotFoundException: /Users/lanhuajian/.m2/repository/org/apache/derby/derby/10.13.1.1/derbyLocale_cs.jar (No such file or directory) at java.util.zip.ZipFile.open(Native Method) ~[?:...转载 2018-06-11 20:38:27 · 7608 阅读 · 3 评论 -
springboot设置默认首页、url的项目名、session等
1、设置默认首页:@Configurationpublic class DefaultView extends WebMvcConfigurerAdapter{ @Override public void addViewControllers( ViewControllerRegistry registry ) { registry.addViewControll...原创 2018-06-11 19:19:24 · 19622 阅读 · 2 评论 -
springboot 拦截器(interceptor)
springmvc中有两种很普遍的AOP实现:1.过滤器(Filter)2.拦截器(Interceptor)之前文章已经介绍过filter的用法,这里重点介绍interceptor。1)定义interceptor:public class SessionInterceptor extends HandlerInterceptorAdapter { private static String[] ...原创 2018-06-11 19:14:36 · 8986 阅读 · 3 评论 -
maven项目引入spring boot依赖之后filter不生效的问题
创建一个maven的springboot项目:pom.xml如下:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0...转载 2018-06-11 18:04:02 · 3487 阅读 · 0 评论 -
SpringBoot热部署、修改jsp后重启问题解决
在使用1.5.5springboot时,修改jsp后必须要重启服务器才能生效,这对开发者来说是不可容忍的!之前使用springmvc或者1.3.1版本的springboot时,没有发现这个问题的。github上有人说spring-boot对JSP的重新编译会导致不可接受性能降低在生产环境上。通过google,找到了下面两种解决方法:1、使用开发模式:官方说法是开发模式默认关闭,引用DevTools...原创 2018-06-06 22:18:17 · 6143 阅读 · 2 评论 -
springboot静态资源处理(二)
之前有个一片文章介绍springmvc和springboot的静态资源文件处理方式,本文再根据一个示例彻底把springboot的静态资源文件使用方法介绍一下。1、application.properties:# 页面默认前缀目录server.jsp-servlet.init-parameters.development=truespring.mvc.view.prefix=/page/sp...原创 2018-06-06 21:58:29 · 1239 阅读 · 0 评论 -
Spring MVC和springboot静态资源处理
1、springmvc:优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往使用 *.do 、 *.xhtml等方式。这就决定了请求URL必须是一个带后缀的URL,而无法采用真正的REST风格的URL。如果将DispatcherServlet请...原创 2018-05-29 11:45:25 · 19925 阅读 · 4 评论 -
springboot servlet、filter、listener开发
springboot的最大特点是把底层的servlet和容器都屏蔽起来,给我们暴露的就是controller和各种注解。本文介绍如何在springboot上要做一些低层次的servlet、filter、listener之类的开发。在spring boot中添加自己的Servlet有两种方法:(Filter和Listener也是如此)。 1、在代码中添加注册的方式: 1)自定义servlet、fil...原创 2018-05-28 20:23:09 · 1027 阅读 · 1 评论 -
springboot mybatis 事务管理
声明式的事务管理是基于AOP的,在springboot中可以通过@Transactional注解的方式获得支持,这种方式的优点是:1)非侵入式,业务逻辑不受事务管理代码的污染。2)方法级别的事务回滚,合理划分方法的粒度可以做到符合各种业务场景的事务管理。我们在springboot+mybatis+druid基础上,加上事务功能。在j2ee的三层架构中,通常是在service层中添加事务。在设计se...转载 2018-05-28 14:27:55 · 825 阅读 · 0 评论 -
spring-boot整合mybatis和druid连接池(多数据源+动态数据源)
多数据源、动态数据源 这两篇文章分别详细介绍了springboot、mybatis、druid如何进行静态的多数据源配置,以及动态切换多数据源。本文对二者进行一个整合,即:在一个项目中有多个数据源,每一个数据源分别都是读写分离的进行动态切换。1、pom.xml:同之前两篇文章2、项目结构:3、application.properties和数据源配置:1)application.properties...原创 2018-05-26 18:50:18 · 38083 阅读 · 7 评论 -
spring-boot整合mybatis和druid连接池(动态数据源——读写分离)
上一篇文章介绍了 spring-boot整合mybatis+druid连接池实现多数据源,在这个例子中我们为每个DataSource都初始化一个与之对应的SessionFactory,从而实现连接化多个数据源。再仔细体会一下,会发现这种方式有一点静态的味道。在实际需求中,我们经常会遇到mysql的读写分离、冷热分离等需求,这种情况虽然也可以看成多数据源的一种情况,用上面的方式去处理,但是有没有更好...原创 2018-05-26 16:33:23 · 10375 阅读 · 5 评论 -
spring-boot整合mybatis和druid连接池(多数据源)
上一篇文章介绍了 spring-boot整合mybatis和druid连接池如何配置和使用,本篇文章是上篇的扩展,如果业务中出现了需要从多个数据源中获取数据,到底该如何实现?本文主要介绍在一种最为简单的实现方案:多数据源 - 多实例。 在上篇文章中不难看出Spring Boot中,通过为该数据源DataSource初始化一个与之对应的SessionFactory,从而实现连接。因此在面对多数据源的...原创 2018-05-26 13:22:18 · 11588 阅读 · 1 评论 -
spring-boot整合mybatis和druid连接池
这篇文章介绍了spring-boot整合mybatis,文章主要介绍了如何使用spring-boot和mybatis连接mysql数据裤,没有涉及到连接池,但现实中我们都会使用一款数据库连接池作为缓冲,提高性能。接下来我们重点介绍druid连接池。Spring Boot中默认支持的连接池有dbcp,dbcp2, hikari三种连接池,Druid来自于阿里系的一个开源连接池(地址: https:/...原创 2018-05-25 21:16:32 · 14819 阅读 · 4 评论 -
spring-boot整合jsp
spring-boot 支持多种模版引擎:FreeMarker Groovy Thymeleaf (Spring 官网使用这个) Velocity JSP (Spring Boot官方不推荐) 接下来我们教大家如何在spring-boot中使用jsp。1、pom.xml加入支持jsp的依赖:<dependency> <groupId>org.apache.tomcat...原创 2018-05-24 11:40:25 · 1368 阅读 · 0 评论 -
spring-boot集成log4j
Spring Boot日志系统默认使用的是logback,灵活性不高,很多时候我们需要使用log4j,只需要一些少量的配置就可以实现。首先,去除springboot默认的日志框架;然后,加入spring-boot对log4j的支持。<parent> <groupId>org.springframework.boot</groupId> &...原创 2018-05-23 22:56:39 · 1030 阅读 · 0 评论 -
配置spring-boot内置web容器
1、对server的几个常用的配置做个简单说明:# 项目contextPath,一般在正式发布版本中,我们不配置 server.context-path=/myspringboot # 错误页,指定发生错误时,跳转的URL。请查看BasicErrorController源码便知 server.error.path=/error # 服务端口 server.port=9090 ...原创 2018-05-23 22:21:53 · 1979 阅读 · 0 评论 -
使用maven打包spring-boot web工程
Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat、weblogic等等),当然在此之前你要对程序入口做简单调整。1、打包成jar:Spring Boot 打成jar包要可以运行,必须使用Spri...原创 2018-05-23 22:09:52 · 2518 阅读 · 0 评论 -
spring-boos中引入mybatis示例
上一篇文章介绍了如何使用spring-boot搭建一个简单的web应用。这篇重点介绍如何把mybatis引入到其中。1、pom.xml中引入:<properties> <mybatis-spring-boot>1.2.0</mybatis-spring-boot> <mysql-connector>5.1.39</mysql-c...原创 2018-05-23 20:52:15 · 722 阅读 · 0 评论 -
spring-boot搭建简单的web开发环境
1、在eclipse中创建maven简单(quick)应用:接下来输入group id和artifact id。。。2、在pom文件中引入spring-boot: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star...原创 2018-05-23 20:02:14 · 408 阅读 · 0 评论