spring事务失效的一些场景

1、@Transactional只能作用在public修饰的方法上spring事务的实现AbstractFallbackTransactionAttributeSource类的computeTransactionAttribute方法中有个判断,如果目标方法不是public,则TransactionAttribute返回null,即不支持事务。2、方法用final修饰这样的话会导致事务的失效,因为spring事务底层实现使用了代理,aop,通过jdk的动态代理或者cglib,生成了代理类,在代理类中实现了事务功能,如果方法被final修饰,无法重写该方法,也就无法添加事务的功能了3、方法内部调用同一个service中A方法调用B方法。如果两个方法都写了@Transactional,B方法发生异常,AB都会回滚。同一个service中A方法调用B方法。A方法没有加@Transactional,B方法加了@Transactional,B方法发生异常,AB都不会回滚。同一个service中A方法调用B方法。A方法加@Transactional,B方法没有加@Transactional,B方法...

springboot使用websocket

Springboot集成websocket1.介绍WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道。实时推送数据/通知到浏览器方法一1、引入WebSocket依赖包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>2、编写WebSocket实现方法@ServerEndpoint(value="/websocket/{id}")@Componentpublicclas...
代码星球 代码星球·2023-02-26

SpringBoot中必须掌握的45个注解

1.SpringBoot/spring@SpringBootApplication:包含@Configuration、@EnableAutoConfiguration、@ComponentScan通常用在主类上;@Repository:用于标注数据访问组件,即DAO组件;@Service:用于标注业务层组件;@RestController:用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody;@Controller:用于标注是控制层组件,需要返回页面时请用@Controller而不是@RestController;@Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注;@ResponseBody:表示该方法的返回结果直接写入HTTPresponsebody中,一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTPresponsebody中;比如异步获取json数据,加上@respons...

idea通过springboot初始化器新建项目

1、通过初始化器新建项目,勾选后对应生成的pom文件以及生成的包路径2、生成项目后点击稍后弹出的自动自动导入maven工程的改变,当pom中有依赖改变时会自动刷新导入依赖3、删除自动生成项目的不需要的文件如果自己练习时不想要test文件夹,那么也可以删除,同时还得删除pom中的依赖...

SpringBoot RabbitMQ 七种工作模式介绍

简单模式很简单:生产者、队列和消费者。生产者向队列发送消息,消费者监听队列并消费消息工作模式工作:一个生产者,一个队列和多个消费者。生产者向队列发送消息,多个消费者监听同一个队列的消费消息发布/订阅模式发布/订阅:发布/订阅模式包括一个生产者、一个交换机、多个队列和多个消费者。交换机(Exchange)直接绑定到队列。生产者通过交换机(Exchange)将消息存储在绑定到交换机的队列中,消费者监听队列并消费路由模式路由:路由模式可以根据路由键将消息发送到指定队列。Exchange和队列通过路由键绑定。生产者通过Exchange和路由键将消息准确地发送到队列。消费者监听队列并消费消息主题模式主题:主题模式支持在路由模式的基础上进行通配符操作。交换机会根据通配符将消息存入匹配队列,消费者监听队列并消费标头模式Header:header模式取消了路由key,而是使用header中的key/value对来匹配。匹配成功后,会通过交换机将消息发送到队列中,由消息制造者获取和消费RPC模式RPC:RPC方式主要用于获取消费者的处理结果。通常,生产者将消息发送给消费者。消费者收到消息并消费后,将处理...

springcloud的子项目有哪些

springcloudconfig:配置管理工具,支持使用git存储配置内容,支持应用配置的外部化存储,支持客户端配置信息刷新,加解密配置内容等springcloudbus:事件、消息总线、用于在集群(例如,配置变化事件)中传播状态变化,可以与springcloudconfig联合实现热部署springcloudnetflix:针对多种netflix组件提供的开发工具包,其中包括eureka、hystrix、zuul、archaius等netflix-eureka:一个基于rest服务的服务治理组件,包括服务注册中心,服务注册与服务发现机制的实现,实现了云端负载均衡和中间层服务器的故障转移netflix-hystrix:容错管理工具,实现断路器模式,通过控制服务的节点,从而对延迟和故障提供更强大的容错能力netflix-ribbon:客户端负载均衡的服务调用组件netflix-feign:基于ribbon和hystrix的声明式服务调用组件netflix-zuul:微服务网关,提供动态路由,访问过滤等服务netflix-archaius:配置管理API,包含一系列配置管理API,提供动...
开发笔记 开发笔记·2021-04-28

springcloud是什么

SpringCloud 是一个微服务框架,相比dubbo 等,springcloud 提供全套的分布式系统解决方案。SpringCloud基于SpringBoot,为云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。...
开发笔记 开发笔记·2021-04-28

修改Springboot启动端口的应用参数

可以用命令行参数来修改端口号java-jar打包之后的SpringBoot.jar --server.port=8000也可以把修改端口号的配置放到JVM参数里:-Dserver.port=8011这样启动的端口号就被修改为8011了。...

撸一撸Spring Cloud Ribbon的原理-负载均衡策略

在前两篇《撸一撸SpringCloudRibbon的原理》,《撸一撸SpringCloudRibbon的原理-负载均衡器》中,整理了Ribbon如何通过负载均衡拦截器植入RestTemplate,以及调用负载均衡器获取服务列表,如何过滤,如何更新等的处理过程。因为,负载均衡器最终是调用负载均衡策略的choose方法来选择一个服务,所以这一篇,整理Ribbon的负载均衡策略。 策略类RandomRuleRoundRobinRuleRetryRuleWeightedResponseTimeRuleClientConfigEnabledRoundRobinRuleBestAvailableRulePredicateBasedRuleAvailabilityFilteringRuleZoneAvoidanceRule 他们的位置在:ribbon-loadbalancer-2.2.2.jarcom.netflix.loadbalancer 类继承关系RandomRule随机选取负载均衡策略。choose方法中,通过随机Random对象,在所有服务实例数量中随机找一个...

一撸Spring Cloud Ribbon原理-负载均衡器

在上一篇《撸一撸SpringCloudRibbon原理》中整理发现,RestTemplate内部调用负载均衡拦截器,拦截器内最终是调用了负载均衡器来选择服务实例。接下来撸一撸负载均衡器的内部,看看是如何获取服务实例,获取以后做了哪些处理,处理后又是如何选取服务实例的。分成三个部分来撸:配置获取服务选择服务 配置在上一篇《撸一撸SpringCloudRibbon原理》的配置部分可以看到默认的负载均衡器是ZoneAwareLoadBalancer。看一看配置类。位置:spring-cloud-netflix-core-1.3.5.RELEASE.jarorg.springframework.cloud.netflix.ribbonRibbonClientConfiguration.class@SuppressWarnings("deprecation")@Configuration@EnableConfigurationProperties//Orderisimportanthere,lastshouldbethedefault,firstshouldbeoptional//...

一撸Spring Cloud Ribbon原理

说起负载均衡一般都会想到服务端的负载均衡,常用产品包括LBS硬件或云服务、Nginx等,都是耳熟能详的产品。而SpringCloud提供了让服务调用端具备负载均衡能力的Ribbon,通过和Eureka的紧密结合,不用在服务集群内再架设负载均衡服务,很大程度简化了服务集群内的架构。具体也不想多写虚的介绍,反正哪里都能看得到相关的介绍。直接开撸代码,通过代码来看Ribbon是如何实现的。 配置详解:1.RibbonAutoConfiguration配置生成RibbonLoadBalancerClient实例。代码位置:spring-cloud-netflix-core-1.3.5.RELEASE.jarorg.springframework.cloud.netflix.ribbonRibbonAutoConfiguration.class@Configuration@ConditionalOnClass({IClient.class,RestTemplate.class,AsyncRestTemplate.class,Ribbon.class})@RibbonClients@Au...

基于Spring Boot,使用JPA动态调用Sql查询数据

在《基于SpringBoot,使用JPA操作SqlServer数据库完成CRUD》,《基于SpringBoot,使用JPA调用SqlServer数据库的存储过程并返回记录集合》完成了CRUD,调用存储过程查询数据。很多复杂的情况下,会存在要直接执行SQL来获取数据。通过“EntityManager”创建NativeQuery方法来执行动态SQL。 1.查询结果集映射在包“com.kxh.example.demo.domain”下的“Contact”实体上编写命名的结果集映射,因为可以写很多映射。@SqlResultSetMapping注解即为映射。name参数,可以为结果集映射取个名字。entities参数,用来说明把Entity和查询的结果字段进行关联说明。packagecom.kxh.example.demo.domain;importjavax.persistence.Entity;importjavax.persistence.EntityResult;importjavax.persistence.FieldResult;importjavax.persistenc...

基于Spring Boot使用JPA调用Sql Server数据库的存储过程并返回记录集合

在上一篇《基于SpringBoot使用JPA操作SqlServer数据库完成CRUD》中完成了使用JPA对实体数据的CRUD操作。那么,有些情况,会把一些查询语句写在存储过程中,由存储过程来返回记录集。在这里就先通过EntityManager创建命名存储过程的方法完成调用。 1.创建SQL存储过程存储过程返回所有的联系人。USE[demodb]GOSETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--=============================================--Author:<bobenut>--Createdate:<2017/9/14>--Description:<Description,,>--=============================================ALTERPROCEDURE[dbo].[proc_get_contacts_like_name]@namevarchar(50)ASBEGINSETNOCOUNTON;SELECT*fro...

基于Spring Boot使用JPA操作Sql Server数据库完成CRUD

 完成一个RESTful服务,提供几个访问接口,用来操作较简单的联系人信息,数据保存在SqlServer数据库中。 1.使用STS创建工程。使用STS创建RESTful工程,可以参考:《用SpringToolsSuite(STS)开始一个RESTfulWebService》《SpringBoot构建RESTfulservice完成Get和Post》新建项目时的ProjectName,Group,Atifact,Package这些参数按照实际要求填。项目引入依赖web,JPA,SQLServer依赖。 完成构建后,pom.xml的内容:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="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.0http://maven.ap...

Spring Tools Suite(STS)开始一个RESTful Web Service

spring.io官方提供的例子BuildingaRESTfulWebService提供了用Maven、Gradle、STS构建一个RESTFulWebService,实际上采用STS构建会更加的便捷。STS安装参考。 目标在浏览器中输入url:http://localhost:8080/greeting访问后得到结果:{"id":1,"content":"Hello,World!"}可以在url中带上参数:http://localhost:8080/greeting?name=User带上参数后的结果:{"id":1,"content":"Hello,User!"} 开始新建项目,通过菜单“File->New->SpringStarterProject”新建。 在“NewSpringStarterProject”对话框里自定义打上项目名,Atifact,Group,Package后,点Next。 在“NewSpringStarterProjectDependencies”中,选择SpringBootVersion,把Web组件勾上,...
首页上一页12345...下一页尾页