Spring相关
文章平均质量分 60
fall_hat
这个作者很懒,什么都没留下…
展开
-
@Transactional失效问题
最近开发的时候,遇到一个 @Transactional注解失效的问题。场景是:方法A和方法B都在同一个类里,方法A没有 @Transactional注解,方法B有 @Transactional注解,A方法调用B方法,结果事务一直没生效,debug日志说是事务没有被spring管理。后面研究好久发现了原因:这是由于Spring AOP代理的原因造成的,因为只有当 @Transactional 注解的方法在类以外被调用的时候,Spring 事务管理才生效。 解决办法就是避免同一类中自调用或者使用 Aspect原创 2022-03-26 13:22:14 · 484 阅读 · 0 评论 -
spring的三级缓存 解决循环依赖
对于Spring循环依赖的情况总结如下:不能解决的情况:1. 构造器注入循环依赖 2. prototype field属性注入循环依赖能解决的情况:1. field属性注入(setter方法注入)循环依赖「Spring的循环依赖的理论依据基于Java的引用传递」,当获得对象的引用时,「对象的属性是可以延后设置的」。spring创建bean的流程:对Bean的创建最为核心三个方法解释如下:createBeanInstance:例化,其实也就是调用对象的「构造方法」实例化对象populate原创 2021-01-05 15:38:20 · 655 阅读 · 0 评论 -
批处理框架spring batch-part1
核心概念Job和Step是spring batch执行批处理任务最为核心的两个概念。jobJob是一个封装整个批处理过程的一个概念。Job在spring batch的体系当中只是一个最顶层的一个抽象概念,体现在代码当中则它只是一个最上层的接口。一个job是我们运行的基本单位,它内部由step组成。job本质上可以看成step的一个容器。一个job可以按照指定的逻辑顺序组合step,并提供了我们给所有step设置相同属性的方法,例如一些事件监听,跳过策略。JobInstanceJobInstanc原创 2020-11-30 14:50:24 · 286 阅读 · 1 评论 -
spring的重试机制---@Retryable
pom <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency>应用启动类开启retry@EnableRetrypublic class Application { .......}在指定方法上标记@Retryable来开启重试.原创 2020-11-06 16:17:12 · 297 阅读 · 0 评论 -
spring核心的AOP原理
分类在 Spring 中 AOP 代理使用 JDK 动态代理和 CGLIB 代理来实现,默认如果目标对象是接口,则使用 JDK 动态代理,否则使用 CGLIB 来生成代理。原创 2020-10-28 10:35:26 · 203 阅读 · 0 评论 -
自定义注解配合AOP对方法实现通用功能
增加AOP的maven<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.7.4</version> </dependency> <dependency> .原创 2020-10-24 18:05:18 · 373 阅读 · 0 评论 -
Spring Boot 定时任务 @Scheduled
Java 定时任务的几种实现方式基于 java.util.Timer 定时器,实现类似闹钟的定时任务使用 Quartz、elastic-job、xxl-job 等开源第三方定时任务框架,适合分布式项目应用使用 Spring 提供的一个注解: @Schedule,开发简单,使用比较方便,也是本文介绍的一种方式创建定时任务在项目启动类上添加 @EnableScheduling 注解,开启对定时任务的支持编写定时任务类和方法,定时任务类通过 Spring IOC 加载,使用 @Component原创 2020-06-28 15:42:47 · 198 阅读 · 0 评论 -
spring 的bean初始化和销毁前的操作
第一种注解: 通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作第二种是XML配置: 通过 在xml中定义init-method 和 destory-method方法第三种是接口实现: 通过bean实现InitializingBean和 DisposableBean接口...原创 2020-06-12 15:23:35 · 154 阅读 · 0 评论 -
spring注解@lazy,bean懒加载
该注解是在单实例bean是使用,当使用@Scope注解的singleton属性时,bean的实例会在IOC容器创建的时候被加载,但是如果在创建bean的时候加上@lazy注解,则bean的实例会在第一次使用的时候被创建。原创 2020-06-12 15:08:09 · 540 阅读 · 0 评论 -
spring如何开启bean的多例模式
@Component @Service等这些注解默认是单例模式,在spring初始化的时候建立对象,想使用多例模式时,多加一个@Scope(“prototype”)注解,就成了多例模式,在使用对象的时候初始化对象。原创 2020-06-12 14:56:47 · 2586 阅读 · 0 评论 -
spring-boot中spring.jackson的ObjectMapper失效及解决办法
因为js不支持太长的Long类型,而我后端使用的是Long类型,所以我需要在将结果转换成json格式时全局的将Long类型转换成String类型。我使用的是继承ObjectMapper类,//@Component//public class CustomObjectMapper extends ObjectMapper {//// public CustomObjectMapper() {// super();// SimpleModule simpleModu原创 2020-05-28 15:26:08 · 5018 阅读 · 0 评论 -
Spring Boot使用拦截器
拦截器有两种实现方式: 1.实现 HandlerInterceptor 接口 2.继承 HandlerInterceptorAdapter 抽象类(看源码最底层也是通过 HandlerInterceptor 接口 实现)HandlerInterceptor方法介绍 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws E原创 2020-05-28 11:49:08 · 131 阅读 · 0 评论 -
StringRedisTemplate不能存数组和对象的解决办法
使用ObjectMapper或者Gson将数组或者对象序列化之后存,取的时候再反序列化。原创 2020-05-11 15:59:42 · 1615 阅读 · 2 评论 -
SpingData JPA之ExampleMatcher实例查询
List<TableColumnGetResVO> list = new ArrayList<>(); TableColumns tableColumnsQuery = new TableColumns(); if(StringUtils.isNotBlank(reqVO.getTableName())){ tableColumnsQuery.setTableName(reqVO.getTableName());原创 2020-05-09 17:59:42 · 1412 阅读 · 0 评论 -
idea jpa根据表生成实体类和Repository
1、连接数据库(mysql)1.1 打开 MySQL1.2 配置 DataSource 和 Driver2、生成实体类的设置2.1 File → Project Structure,给项目添加JPA2.2 打开persistence视图2.3 配置 Database Scheme右键项目名称:2.4 生成的实体类可以看到,注解下面有红色波浪线,报错大概都是这样的:2.5 解决生...原创 2020-04-24 10:45:56 · 2119 阅读 · 3 评论 -
Springboot2.x使用jpa的多数据源时驼峰转换失效
若在单数据源配置下应当无需配置该项,同时发现本应该默认将驼峰属性名映射为_拼接名称策略也失效,说明自定义配置源时覆盖了默认配置或者导致默认配置失效。解决方法就只能自己工程内实现该类的配置datasource: first: driver-class-name: com.mysql.cj.jdbc.Driver username: root passw...原创 2020-03-31 11:56:23 · 2146 阅读 · 0 评论 -
明明白白的PostConstruct注解
这个注解是java自带的注解。Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个...原创 2020-03-18 18:09:20 · 220 阅读 · 0 评论 -
@ConfigurationProperties 注解
此注解属于Springboot的注解作用使用此注解可以将配置文件的字段直接赋值到对象属性。可以赋值一般的字符串类型和数组,map.使用原创 2020-03-18 18:05:27 · 121 阅读 · 0 评论 -
pa使用Example快速实现动态查询
限制属性不支持嵌套或者分组约束,比如这样的查询 firstname = ?0 or (firstname = ?1 and lastname = ?2)灵活匹配只支持字符串类型,其他类型只支持精确匹配总结通过在使用springdata jpa时可以通过Example来快速的实现动态查询,同时配合Pageable可以实现快速的分页查询功能。对于非字符串属性的只能精确匹配,比如想查询在某个时...原创 2020-03-12 09:49:29 · 669 阅读 · 0 评论 -
明明白白的spring boot jpa 实现拦截器
第一步: 实现 hibernate接口。重写方法public class JpaInterceptor implements StatementInspector { @Override public String inspect(String sql) { System.out.println("进入拦截器" + sql); sql+= " a...原创 2020-03-11 14:13:39 · 2239 阅读 · 0 评论 -
使用 Spring Boot AOP 实现 Web 日志处理和分布式锁
AOP 的核心概念切面(Aspect):通常是一个类,在里面可以定义切入点和通知。连接点(Joint Point):被拦截到的点,因为 Spring 只支持方法类型的连接点,所以在 Spring 中连接点指的就是被拦截的到的方法,实际上连接点还可以是字段或者构造器。切入点(Pointcut):对连接点进行拦截的定义。通知(Advice):拦截到连接点之后所要执行的代码,通知分为前置、后置...原创 2020-03-10 11:06:39 · 248 阅读 · 0 评论 -
springboot执行完任务后实现终止进程
import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;@Slf4jpublic class StartupRunner implements Comman...原创 2020-01-08 17:17:15 · 3801 阅读 · 0 评论 -
SpringBoot在启动时的多环境配置以及加载顺序
java -jar app.jar --spring.profiles.active=dev原创 2019-12-06 16:01:33 · 715 阅读 · 0 评论 -
spring data jpa查询自定义查询字段
@Query(value = "SELECT a.city city,sum(m.page_view) view from t_ques m " + "LEFT JOIN attractions a on m.spot_name=a.name where m.ques_time<= ?1 and a.province_code=?2 GROUP BY a.city O...原创 2019-11-05 12:27:17 · 1146 阅读 · 0 评论 -
jpa的乐观锁
悲观锁和乐观锁-悲观锁,简单的理解就是把需要的数据全部加锁,在事务提交之前,这些数据全部不可读取和修改。-乐观锁,使用对数据进行版本校验和比较,来对保证本次的更新时最新的,否则就失败。悲观锁select * from user where uid=1 for update;update user set name='bac' where uid=1;这样,uid为1的这行记录,就...原创 2019-10-25 17:26:37 · 388 阅读 · 0 评论 -
springboot单元测试-junit4和junit5
1.在想测试的方法里使用idea的代码自动生成功能,在该类下右键,点击generate,选择test,因为这里没有我们 想要的测试框架,所以我们随便选择一个测试框架,目的就是为了生成包和代码,然后找到生成的代码,在类上面添加@RunWith(SpringRunner.class)@SpringBootTest这两个注解。在测试方法上加@Test注解就可以了@RunWith(SpringRu...原创 2019-10-23 18:22:40 · 950 阅读 · 0 评论 -
从容器中获取bean的方法
@Slf4j@Component(“beanHeader”)public class BeanHeader implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(Applicat...原创 2019-09-30 15:13:23 · 822 阅读 · 0 评论 -
springboot自动化配置原理
@EnableAutoConfiguration当@EnableAutoConfiguration启用时,spring在启动时扫描项目的classpath中的jar包,寻找包含spring.factories文件的jar包,加载需要自动加载的config然后选择器根据beancondition过滤掉不符合条件的config最后ClassParser把配置加载到spring容器@Spri...原创 2019-08-10 16:34:43 · 160 阅读 · 0 评论 -
spring AOP 最常用的execution解释
例: execution(* com.demo..service.*.*(..))execution 表达式的主体 第一个* 代表任意的返回值 com.demo aop所横切的包名 包后面.. 表示当前包及其子包 第二个* 表示类名,代表所有类 .*(..) 表示任何方法,括号代表参数 .. 表示任意参数例: execution(* com.demo..service.*Se...原创 2019-06-27 14:37:53 · 584 阅读 · 0 评论 -
spring data for jpa 实现多条件排序
List<Order> orders=newArrayList<Order>();orders.add(newOrder(Direction.ASC,"c"));orders.add(newOrder(Direction.DESC,"d"));Pageable pageable=newPageRequest(pageNumber, pa...原创 2019-04-12 08:46:04 · 536 阅读 · 0 评论 -
spring cloud 使用配置中心Config properties 配置文件优先级
启动脚本参数注入 > Config 配置中心配置 > 本地native properties配置文件 > default 默认 properties配置文件原创 2018-11-14 12:54:50 · 1248 阅读 · 0 评论 -
spring注解
声明Bean的注解:@Component : 组件,没有明确的角色@Service : 在业务逻辑层(service层)使用@Repository : 在数据访问层(dao层)使用.@Controller : 在展现层(MVC--SpringMVC)使用注入Bean的注解:@Aautowired : Spring提供的注解.@Inject : JSR-330提供的注解...原创 2018-10-30 17:17:19 · 142 阅读 · 0 评论 -
看看Spring data jpa
Spring Data框架和Spring Data JPA简介Spring Data : Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。下面给出SpringData 项目所支持 NoSQL 存储:MongoDB (文档数据库)Neo4j(图形数据库)Redis(键/值存储)Hbase(列族数据库)SpringData 项目所支持的关系数据存储技术:JDBCJPA...原创 2018-03-31 15:03:58 · 170 阅读 · 0 评论 -
看看Springboot
从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot你可以不...原创 2018-03-31 14:58:00 · 249 阅读 · 0 评论