springboot项目引入Seata&配置到Nacos

1. Springboot项目引入Seata


  1. 每个表增加undo_log表,sql语言如下所示:
CREATE TABLE `undo_log` (  
  `id` bigint(20) NOT NULL AUTO_INCREMENT,  
  `branch_id` bigint(20) NOT NULL,  
  `xid` varchar(100) NOT NULL,  
  `context` varchar(128) NOT NULL,  
  `rollback_info` longblob NOT NULL,  
  `log_status` int(11) NOT NULL,  
  `log_created` datetime NOT NULL,  
  `log_modified` datetime NOT NULL,  
  `ext` varchar(100) DEFAULT NULL,  
  PRIMARY KEY (`id`),  
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)  
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  1. 加入客户端依赖,版本为com.alibaba.cloud的版本
<dependency>  
    <groupId>com.alibaba.cloud</groupId>  
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>  
</dependency>
  1. 在yml文件中进行配置
seata:  
  tx-service-group: train-group  # 事务组名称  
  service:  
    vgroup-mapping:  
      train-group: default  # 事务组和seata集群做关联,train-group为自定义的事务组名称  
    grouplist:  
      default: 127.0.0.1:8091  # seata集群地址,default为默认的事务组名称,与上面对应
  1. 为方法加入注解@GloTransactional
    ![[Pasted image 20240306182655.png]]

  2. 启动Seata
    在官网https://seata.apache.org/zh-cn/unversioned/download/seata-server
    下载Seata二进制文件之后,在bin文件夹下点击seata-server.bat文件启动即可(采用默认配置)
    ![[Pasted image 20240306184250.png]]

此时再去启动项目模块就先显示注册成功,隶属于train-group组,每个应用都是一个TM(事务管理器)
![[Pasted image 20240306184619.png]]

2. 配置Seata到nacos中


打开其根目录下的conf/application.yml文件,修改其配置

seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      namespace: train
      group: SEATA_GROUP
      username: nacos
      password: nacos
      context-path:
      data-id: seataServer.properties
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace: train
      cluster: default
      username: nacos
      password: nacos

为seata新建一个数据库,用户名为seata,密码为train。
在seata\script\server\db路径下有sql文件,将相应的sql文件执行到数据库中
![[Pasted image 20240306193814.png]]

由于使用的mysql数据库,便执行mysql.sql,运行之后产生四个表
![[Pasted image 20240306193945.png]]
lock_table表用来防止脏读
distributed_lock是用来做分布式锁

### 回答1: Se是一款分布式事务解决方案,可以帮助开发人员简化分布式事务的开发和管理。在SpringBoot中集成Seata可以帮助我们更方便地使用Seata。 下面是集成Seata的步骤: 1. 添加Seata依赖 在pom.xml中添加Seata的依赖: ``` <dependency> <groupId>io.seata</groupId> <artifactId>seata-all</artifactId> <version>1.4.2</version> </dependency> ``` 2. 配置SeataSpringBoot配置文件中,配置Seata的相关参数: ``` spring: application: name: xxx-service cloud: alibaba: seata: tx-service-group: my_test_tx_group # 事务组名称,需要与seata-server中的配置一致 enabled: true # 启用seata application-id: ${spring.application.name} # 应用ID,需要与seata-server中的配置一致 tx-service-group: my_test_tx_group # 事务组名称,需要与seata-server中的配置一致 config: type: nacos # 配置中心类型,可以是nacos、file、apollo等 nacos: server-addr: ${seata.server.ip}:${seata.server.port} # nacos配置中心地址,需要配置seata.server.ip和seata.server.port group: SEATA_GROUP # nacos配置中心中的group namespace: ${seata.namespace} # nacos配置中心中的namespace file: name: file.conf # 配置文件名称,需要与seata-server中的文件名一致 apollo: appId: ${seata.appId} # apollo的AppId namespace: ${seata.namespace} # apollo的namespace config-service-url: ${seata.configServiceUrl} # apollo的配置中心地址 cluster-name: ${seata.clusterName} # apollo的集群名称 namespace: ${seata.namespace} # apollo的namespace ``` 3. 配置数据源 在使用Seata时,我们需要使用Seata提供的数据源来管理分布式事务。因此,在配置数据源时,我们需要使用Seata提供的数据源。 ``` @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return new DruidDataSource(); } @Bean public DataSourceProxy dataSourceProxy(DataSource dataSource) { return new DataSourceProxy(dataSource); } ``` 4. 配置Mybatis 在使用Mybatis时,我们需要配置Mybatis的拦截器,以便Seata能够拦截到Mybatis的事务操作。 ``` @Configuration public class MybatisConfig { @Bean public ConfigurationCustomizer configurationCustomizer() { return configuration -> configuration.addInterceptor(new SeataInterceptor()); } } ``` 5. 配置Seata事务管理器 在SpringBoot中,我们可以使用Seata提供的注解来管理分布式事务。因此,我们需要配置Seata事务管理器。 ``` @Bean public GlobalTransactionScanner globalTransactionScanner() { return new GlobalTransactionScanner("xxx-service", "my_test_tx_group"); } ``` 以上就是在SpringBoot中集成Seata的步骤。通过集成Seata,我们可以更方便地管理分布式事务,提高应用的可靠性和稳定性。 ### 回答2: Spring Boot是一种用于简化创建基于Spring框架的应用程序的框架,而Seata是一种分布式事务解决方案。集成Seata可以帮助我们在分布式环境下更好地处理事务问题。 首先,要将Seata集成到Spring Boot中,我们需要在项目的pom.xml文件中添加Seata的依赖。然后,在Spring Boot配置文件中,我们需要配置Seata的相关属性,如注册中心的地址、数据源的代理等。 一旦配置完成,我们就可以在Spring Boot应用程序中使用Seata来处理分布式事务了。在需要进行事务处理的方法上,我们可以使用Seata提供的@Transactional注解来标识,这样Seata就会自动为我们管理事务。此外,Seata还提供了一些其他的注解,如@Compensable注解用于标识可补偿的方法。 当我们使用Seata进行分布式事务处理时,事务管理器会自动将所有涉及到的数据源和资源加入到同一个事务中。如果任何一个操作失败,Seata会自动回滚整个事务,保证数据的一致性。 此外,Seata还提供了一些其他的功能,如分布式事务的日志记录和补偿机制。通过这些功能,我们可以更好地管理分布式事务,并且保证数据的可靠性和一致性。 总之,通过将Seata集成到Spring Boot应用程序中,我们可以更好地处理分布式环境下的事务问题。Seata提供了一系列的功能和注解,帮助我们管理分布式事务,并且保证数据的一致性。 ### 回答3: Spring Boot是一种使用Java编写的开源框架,用于快速构建独立的、可部署的、生产级的应用程序。而Seata是一个开源的分布式事务解决方案,可用于解决微服务架构下的数据一致性问题。下面将介绍如何将Seata集成到Spring Boot中。 首先,在Spring Boot项目中添加Seata的依赖项。可以通过在项目的构建配置文件pom.xml中添加相应的依赖来实现。这些依赖将引入Seata的核心组件,例如分布式事务协调器、代理等。 然后,配置Seata的相关属性。通过在Spring Boot项目配置文件中添加Seata相关的配置,如事务组名称、事务日志存储模式、代理类型等。这些配置将告诉Seata如何与项目进行交互和协作。 接下来,编写业务逻辑。在Spring Boot项目中,编写业务逻辑的方式与平常一样,不同之处在于需要在涉及到数据库操作的地方添加Seata的分布式事务注解。这些注解将告诉Seata哪些操作需要参与到分布式事务中,以保证数据的一致性。 最后,启动项目并验证集成效果。在项目启动后,Seata会根据配置信息自动启动并创建相应的事务组。在执行业务逻辑时,Seata将根据注解的配置来管理事务的开启、提交和回滚,以保证数据的一致性和可靠性。 综上所述,通过以上步骤,我们可以将Seata集成到Spring Boot项目中,实现分布式事务的管理和控制。这对于构建高可靠性的微服务架构是非常有帮助的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值