我正在尝试创建一个包含两个REST Web服务的事务,其数据源指向相同的数据库。第一个服务名为1,调用2使用Spring RestTemplate 命名的另一个Web服务。
为了实现事务,我使用了JNDI连接池,MySql JDBC驱动程序(版本5.1.35),JTA,XA,Spring和GlassFish 5 AppServer。
现在,我已经在Spring项目中下载了maven依赖项,使用定义了一个配置类JtaTransactionManager,并在application.yml文件中配置了数据源和JTA属性,如以下代码所示:
配置类:
@Configuration
@EnableTransactionManagement
public class Transacciones {
@Bean
public PlatformTransactionManager platformTransactionManager(){
return new JtaTransactionManager();
}
}
Run Code Online (Sandbox Code Playgroud)
application.yml文件
spring:
datasource:
jndi-name: jdbc/Prueba
driver-class-name: com.mysql.jdbc.Driver
jta:
enabled: true
Run Code Online (Sandbox Code Playgroud)
我在GlassFish 5中配置了JNDI数据源,并jdbc/Prueba使用javax.sql.XADataSource名为的数据源定义了在“连接池”页面中命名的“ JDBC资源” pruebaXA:
在Web服务的控制层中1,该方法2使用RestTemplateSpring Framework 的类调用服务:
服务1代码:
@RestController
@RequestMapping("/servicio")
@EnableTransactionManagement
public class a {
@Autowired
private JdbcTemplate objJdbcTemplate;
@Transactional(rollbackFor = RuntimeException.class)
@GetMapping("/1")
public Integer getValor(){ …Run Code Online (Sandbox Code Playgroud)