spring
文章平均质量分 72
Dongguabai
这个作者很懒,什么都没留下…
展开
-
Spring获取注入Bean中方法上的注解
由于 Bean 可能是代理,使用原始的 Java 反射可能会无法获取注解,所以获取 Bean 方法上的注解可以使用 Spring 提供的工具类:原创 2022-03-19 09:25:31 · 975 阅读 · 0 评论 -
使用Spring @DependsOn控制bean加载顺序
使用Spring @DependsOn控制bean加载顺序spring容器载入bean顺序是不确定的,spring框架没有约定特定顺序逻辑规范。但spring保证如果A依赖B(如beanA中有@Autowired B的变量),那么B将先于A被加载。但如果beanA不直接依赖B,我们如何让B仍先加载呢?控制bean初始化顺序可能有些场景中,bean A 间接依赖 bean B。如Bean B应该需要更新一些全局缓存,可能通过单例模式实现且没有在spring容器注册,bean A需要使用该缓存;转载 2021-12-15 17:20:13 · 399 阅读 · 0 评论 -
关于 Spring 事务注解 this 调用失效的一个细节
下面这个是一个非常经典的 Spring 事务注解失效的例子:@Serevicepublic class TestService { @Resource private TestMapper testMapper; @Transactional public void method1() { int re = testMapper.insert(); int a = 1/0; } public void method2()原创 2021-10-29 09:20:11 · 3323 阅读 · 2 评论 -
Spring何时为使用事务注解的bean创建代理 ?
本文基于Springboot 2.1.0JPA应用分析总结。// AnnotationAwareAspectJAutoProxyCreator 基类 AbstractAutoProxyCreator 代码片段// 接口 BeanPostProcessor 定义的方法@Overridepublic Object postProcessAfterInitialization(@Nullable Object bean, String beanName) { if (bean !...转载 2021-10-06 20:19:58 · 227 阅读 · 0 评论 -
分布式事务之 Spring 事务抽象和源码实现
现在 Spring 已经成为了 Java 开发事实上的标准,各种 Java 框架几乎都需要提供与 Spring/Spring Cloud 集成的包。所以在研究 Java 分布式事务的一些框架之前,需要对 Spring 自身的事务抽象有一定的了解。相关文章:一次群聊“事件”引发的对 @Transactional 和 MyBatis 的思考事务抽象Spring 在 Java EE 规范的基础下提供了事务抽象,无论我们使用的是 Hibernate 还是 MyBatis,或者 JDBC 操作数据库,.原创 2021-10-02 01:33:35 · 198 阅读 · 0 评论 -
分布式事务之 Spring 编程式事务
相关文章:分布式事务之 Atomikos上一篇文章《分布式事务之 Atomikos》中提到了 Atomikos 比较适合实现单服务多数据源的分布式事务场景。那么接下来再看一个分布式事务的场景,这也是很多项目常用的使用方式: /** * 下单 */ @Transactional public void order(){ localOrderService.update(); //本地事务1 localGiftService.update(); //本地事务2,与本地事务1是原创 2021-09-27 14:10:32 · 379 阅读 · 0 评论 -
Spring事务传播机制Propagation.REQUIRES_NEW详解及测试
REQUIRES_NEW官方文档解释:Create a new transaction, and suspend the current transaction if one exists.意思是,创建一个新事务,如果当前存在事务,将这个事务挂起。也就是说如果当前存在事务,那么将当前的事务挂起,并开启一个新事务去执行REQUIRES_NEW标志的方法。先来总结一下结果:1.标志REQUIRES_NEW会新开启事务,外层事务不会影响内部事务的提交/回滚2.标志REQUIRES_NEW的内部事务的异常转载 2021-09-27 08:39:05 · 10963 阅读 · 1 评论 -
关于多个事务并发执行的一个问题
今天群里一个哥们提了一个问题,他面试中遇到的,问题大概是这么个意思:现在有10个任务,每个任务需要执行10s,用线程池并发处理,每个线程会插入数据,需求:只要有一个线程插入数据失败了,其他的所有线程的数据都需要回滚。这个是一个并发事务问题,也可以说是一个分布式事务问题,解决方案也不少,这里基于一种两阶段提交的方式进行处理。即这里主线程作为事务协调者,多个线程作为参与者,直到参与者全部执行了事务操作后会给协调者返回执行结果,在此期间协调者会一直阻塞,同时参与者也会阻塞直到协调者收到所有参与者的执行结果,原创 2021-03-24 21:39:53 · 978 阅读 · 1 评论 -
原生AspectJ用法分析以及Spring-AOP原理分析
前言前两天看了一些关于spring aop以及AspectJ的文章,但是总是感觉非常的乱,有的说spring aop跟aspectj相互独立,有的说spring aop依赖于aspectj,有的甚至直接把两者混为一谈。很多专门讲Aspectj的文章也只是搬运了AspectJ的语法,就那么一两点东西,讲来讲去也没有什么新意。甚至很多甚至都是面向IDE编程(教你怎么安装插件,点击菜单),对AspectJ的使用方式和工作原理都不去分析,离开了IDE的支持甚至连编译都不会了。我认为咱们这些码农平时习惯用IDE并转载 2021-03-17 14:52:46 · 1706 阅读 · 1 评论 -
Spring框架中@Lazy延迟加载原理和使用细节
一、@Lazy延迟加载原理如果某个类想要使它在Spring启动时不加载我们听的最多的便是为其加上@Lazy注解或者在@ComponentScan扫描注解中设置lazyInit为true即可完成。那么我们先来看看这两者分别的实现原理。1.延迟加载原理1.1 @Lazy三种配置方法我们使用延迟加载一般有三种实现方式,第一种也是最原始的配置方式是在XML文件中直接配置标签属性:<bean id="XXX" class="XXX.XXX.XXXX" lazy-init="true"/&g转载 2021-03-16 22:59:27 · 1046 阅读 · 0 评论 -
记一次事务的坑 Transaction rolled back because it has been marked as rollback-only
转自:https://www.jianshu.com/p/f89771cae115PROPAGATION_REQUIRES_NEW,原有事务B新起事务A,事务A中的commit和rollback不会影响外部事务B的commit和rollback,相互独立,如果事务A抛出异常,肯定会影响外部是B的。 PROPAGATION_NESTED,表示嵌套事务,看如下示例:ServiceA { /** * 事务属性配置为 PROPAGATION_REQUIRED */转载 2021-03-12 10:24:50 · 644 阅读 · 0 评论 -
理解Spring的事务传播机制
Spring其中一个强大之处在于,他是支持声明式事务的。而用好声明式事务的前提是,要理解Spring的事务传播机制。本文详细介绍了Spring事务传播机制。Spring的事务传播类型Spring的事务传播机制类型定义在了Propagation枚举类中。主要有以下几种类型。下面主要对常用的PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED做详细介绍。PROPAGATION_REQUIREDPROPAGAT转载 2021-03-08 22:30:41 · 539 阅读 · 0 评论 -
对 Spring 中的 @RequestBody json 请求数据做 XSS 过滤
关于xss过滤,网上大都是是对 param的,这个很多文章了 定义过滤器。XSSFilter 不说了,参考 https://blog.csdn.net/yucaifu1989/article/details/61616554还有就是对所有@ResponseBody 返回内容做XSS过滤的方案:MappingJackson2HttpMessageConverter 的objectMapper 做设置参考 百度那么对 @RequestBody 的 json 数据怎么过滤呢:spring处转载 2020-11-17 14:08:57 · 2858 阅读 · 1 评论 -
Could not copy property ‘id‘ from source to target异常
BeanUtils是我们在web开发中经常用到的一个工具类,当一个对象中有多个甚至几十个字段,我们去修改该对象信息时,可能只修改其中的几个或十几个,通过spring的BeanUtils的copyProperties方法可以快速实现,当然,这只是BeanUtils的一个常用功能,更多关于BeanUtils的强大之处可以参考apihttp://www.apihome.cn/api/spring/beanutils.html或是http://blog.csdn.net/shimiso/article/detai转载 2020-08-13 12:54:42 · 3074 阅读 · 0 评论 -
Sping Data Redis 使用事务时,不关闭连接的问题
项目中使用到了Redis,框架为springMVC+tomcat+Redis+Mysql最后决定用spring-data-redis来开发,配置好连接池,进入使用,似乎一切正常。配置了两块redis,一个专门做读,一个专门做些, 配置的XML文件如下,这是一个专做写的redis配置:<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" val.转载 2020-07-08 19:07:39 · 859 阅读 · 2 评论 -
Spring整合Mybatis SQL语句的输出
【1.修改Spring-Mybatis】<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <-- 添加此行代码 ,并创建一个mybatis-config.xml--> <property name="conf转载 2020-07-07 15:00:05 · 372 阅读 · 0 评论 -
RestTemplate的异常:Not enough variables available to expand
当使用 RestTemplate 可能会遇到异常:Not enough variables available to expand典型如下:@Autowiredprivate RestTemplate restTemplate;String url = "http://localhost:8080/search?people={\"name\":\"jack\",\"age\":18}";String email = restTemplate.getForObject(url, Stri转载 2020-06-21 17:44:10 · 4404 阅读 · 0 评论 -
BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/
今天处理一个历史老项目的时候,我修改了一个类,出现了这样的异常:[INFO]2020-05-28 15:27:48 [main] org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.registerDefaultFilters(210) | JSR-330 'javax.inject.Named' annotation found and supported for component s原创 2020-05-28 15:36:52 · 1912 阅读 · 1 评论 -
关于 Spring 中的 FactoryBean
一般我们会使用如 XML、@Bean、@Componet 等方式去注册,但是如果在 Bean 的实例化过程非常复杂,如有很多逻辑处理、层层依赖、复杂依赖等,这在第三方整合的时候尤为重要。FactoryBean 是 Spring 提供的基于接口编码的方式帮助我们向 Spring 容器中注册组件,相比注解和配置,更加灵活。最常见的比如 MyBatis 与 Spring 整合,这是从我之前学习 MyBatis 的笔记中截取的相关配置:FactoryBean 接口有三个方法:public interface原创 2020-05-20 12:43:21 · 358 阅读 · 0 评论 -
Spring 用了哪些设计模式?
1. 策略模式 2. 工厂方法模式 3. Builder模式 4. 小结 关于设计模式,如果使用得当,将会使我们的代码更加简洁,并且更具扩展性。本文主要讲解Spring中如何使用策略模式,工厂方法模式以及Builder模式。1. 策略模式关于策略模式的使用方式,在Spring中其实比较简单,从本质上讲,策略模式就是一个接口下有多个实现类,而每种实现类会处理某一种情况。我们以发奖励为例进行讲解,比如我们在抽奖系统中,有多种奖励方式可供选择,比如积分,虚拟币和现..转载 2020-05-15 22:07:57 · 382 阅读 · 0 评论 -
理解 Spring Order 注解
我们都知道 @Order 是控制优先级的,越小优先级越高,那么问题来了,是控制什么的优先级呢(虽然不能太“杠”,但是个人认为有时候还是得咬文嚼字)。有博客(相关链接见文末)的说法是“注解 @Order 的作用是定义 Spring 容器加载 Bean 的顺序”,其相关示例如下:定义了三个 Bean:@Component@Order(1)public class Cat { ...原创 2020-05-02 09:20:56 · 1756 阅读 · 1 评论 -
Spring 计时器 StopWatch
有时候要测试某个东东的执行效率,每次都得写一堆 System.currentTimeMillis(),很显然一般会封装一下,避免重复造轮子,可以直接使用 Spring 提供的工具 StopWatch。其实在 Spring Boot 程序启动后都会打印的启动时间,也是基于这个类来的:2020-04-25 17:09:41.468 INFO 60479 --- [ main] ...原创 2020-04-25 21:23:30 · 675 阅读 · 0 评论 -
Spring 中,定时任务接口 SchedulingConfigurer
Spring 中,创建定时任务除了使用@Scheduled 注解外,还可以使用 SchedulingConfigurer。@Schedule 注解有一个缺点,其定时的时间不能动态的改变,而基于 SchedulingConfigurer 接口的方式可以做到。SchedulingConfigurer 接口可以实现在@Configuration 类上,同时不要忘了,还需要@EnableSchedul...转载 2020-04-15 16:42:40 · 6586 阅读 · 0 评论 -
Spring 手动注册之条件装配
Spring 条件装配有两种方式:@Profile:基于当前环境配置方式;@Conditional:基于编程方式;@Profile先看一个例子:@SpringBootApplicationpublic class ConditionBootstrap { public static void main(String[] args) { SpringAppl...原创 2020-04-13 21:47:33 · 265 阅读 · 0 评论 -
Spring 手动注册之 @Import 注解
在 Spring 3.0 之前,我们想基于不同的模块引入相关配置,可以在 xml 中使用:<import resource="./app1.xml"/>在 JavaConfig 模式中,我们可以使用 @Import 注解:Indicates one or more <em>component classes</em> to import &mda...原创 2020-04-11 15:54:00 · 408 阅读 · 0 评论 -
Spring Aware 接口
分析有时候我们会需要在 Spring 项目中使用到 ApplicationContext,到网上搜索到时候会有这么一种解决方案:实现 ApplicationContextAware 接口:import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;...原创 2020-04-09 08:49:28 · 224 阅读 · 0 评论 -
为什么BeanPostProcessor的回调函数没被调用
public class MyBean implements BeanPostProcessor {public void say(){ System.out.printf("hello");}public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansExcep...转载 2020-04-08 17:48:12 · 786 阅读 · 0 评论 -
Spring 中的注解 @Value("#{}") 与 @Value("${}") 的区别
1@Value("#{}") SpEL表达式@Value("#{}") 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量@RestController@RequestMapping("/login")@ComponentpublicclassLoginController{@Value...转载 2020-04-08 15:42:11 · 328 阅读 · 0 评论 -
排查读写分离失效原因
今天组内一哥们反应说项目中读写分离出现了 BUG:明明加了读库的注解,而且日志也是显示应该要读从库,但是居然还是从主库中读取的数据。于是排查了一下原因,原因就是因为在数据源切换之前使用了声明式事务。首先介绍一下这个项目中读写分离的实现方式:基于注解(AOP) + AbstractRoutingDataSource;这是个很常见的使用方式,但是我个人不太推荐这个方式,因为基于注解可设置范围过大,如...原创 2020-02-28 15:19:13 · 662 阅读 · 0 评论 -
JDBC Connection XXX will not be managed by Spring
有时候在SQL日子上会出现这样的信息:也就是说Connection没有被Spring管理,也就是说现在没有进行事务控制。也就是个猜测,可以简单验证一下:在Service中有两个相同内容的方法,一个被事务控制一个没有:测试一下:测试结果:第一个被Spring事务控制的方法输出的是“will be managed by Spring”,第二个没有被Spring事务控...原创 2018-08-26 01:32:12 · 70798 阅读 · 5 评论 -
InitializingBean简单使用
InitializingBean接口为bean提供了初始化执行的方法,即afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。下面简单示例:这是一个Spring组件Filer:实现了afterPropertiesSet方法:在这个方法中使用了一个被Autowired注入的Spring Bean:debug启动项目:可以正常...原创 2018-07-08 01:39:46 · 2243 阅读 · 0 评论 -
RestTemplate 接口请求总结
一、获取接口返回状态码使用getForEntity调用接口,返回结果调用getStatusCode()方法取得HttpStatus对象,然后就可以调用里面的各种方法来满足你的需求了//判断接口返回是否为200 public static Boolean ping(){ String url = domain + "/it/ping"; try{ ...转载 2019-09-04 14:35:25 · 585 阅读 · 0 评论 -
Spring学习(一)Spring注解驱动开发(2)
xml文件的包扫描原来使用xml方式进行包扫描时是这么使用的:<context:component-scan base-package="com.dongguabai"/>根据实际情况有时也会将Controller组件和其他组件分开:springmvc.xml中:applicationContext.xml中:@ComponentScan注解方式进行包...原创 2018-06-02 18:21:33 · 493 阅读 · 0 评论 -
Spring构造器注入方式
这样的一个好处是可以提早加载,而且不能修改。这个参数是Spring进行传递的。这个@Autowired可以写也可以不写。 使用set()方法诸如也可以。普通的set方法是将传入的参数赋给相应的属性,和直接autowired效果一样。但是也有一些情况会在set方法里面写一些处理逻辑,这是就需要在set方法上进行标注...原创 2018-06-10 23:45:46 · 770 阅读 · 4 评论 -
@Scope注解
转自:https://www.cnblogs.com/lonecloud/p/5937513.html@Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)这个是说在每次注入的时候回自动创建一个新的bean实例@Scope(value=ConfigurableBeanFactory.SCOPE_SINGLETON)单例模式,在整个应用中只...转载 2018-06-24 02:08:53 · 1749 阅读 · 0 评论 -
mybatis与mybatis-spring版本不一致出现的问题
今天无意中看到的一个异常,记录一下。框架是SSM:版本为:运行出现异常:修改mybatis版本为:1.3.0:原创 2018-06-25 13:01:08 · 3918 阅读 · 0 评论 -
Spring/SpringBoot中的拦截顺序(异常抛出顺序)
原创 2018-07-02 16:40:56 · 3804 阅读 · 0 评论 -
BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the Applic
今天启动一个很老的项目出现了这样一个异常:再往上看看:发现是有两个重名的Service。更名即可。原创 2018-07-06 10:58:55 · 927 阅读 · 0 评论 -
在工具类中静态方法使用Spring的组件
/** * @author Dongguabai * @date 2018/9/27 10:14 */@Componentpublic class VwOrgSupport { /** * 可显示最低级别orgType */ private static final String LOWEST_ORGTYPE_05 = "05"; priv...原创 2018-10-22 17:21:27 · 490 阅读 · 0 评论 -
Spring IO Platform
转自:https://www.jianshu.com/p/ce29422e3d1aSpring IO Platform reference对Spring IO的介绍如下:Spring IO Platform is primarily intended to be used with a dependency management system. It works well with bo...转载 2018-11-04 21:27:36 · 156 阅读 · 0 评论