增加 seata 示例
This commit is contained in:
@ -0,0 +1,20 @@
|
||||
package com.chinaunicom.mall.ebtp.cloud.account;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
import com.chinaunicom.mall.ebtp.cloud.eureka.starter.EurekaStarterConfiguration;
|
||||
|
||||
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
|
||||
@EnableFeignClients
|
||||
@Import(EurekaStarterConfiguration.class)
|
||||
public class AccountSeataApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(AccountSeataApplication.class, args);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package com.chinaunicom.mall.ebtp.cloud.account.config;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.mybatis.spring.SqlSessionFactoryBean;
|
||||
import org.mybatis.spring.transaction.SpringManagedTransactionFactory;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
|
||||
import io.seata.rm.datasource.DataSourceProxy;
|
||||
|
||||
@Configuration
|
||||
public class SeataDatasourceConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConfigurationProperties(prefix = "spring.datasource")
|
||||
public DataSource druidDataSource() {
|
||||
return new DruidDataSource();
|
||||
}
|
||||
|
||||
@Primary
|
||||
@Bean("dataSource")
|
||||
public DataSourceProxy dataSource(DataSource druidDataSource) {
|
||||
return new DataSourceProxy(druidDataSource);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public SqlSessionFactory sqlSessionFactory(DataSourceProxy dataSourceProxy) throws Exception {
|
||||
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
|
||||
sqlSessionFactoryBean.setDataSource(dataSourceProxy);
|
||||
sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
|
||||
|
||||
return sqlSessionFactoryBean.getObject();
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.chinaunicom.mall.ebtp.cloud.account.controller;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.chinaunicom.mall.ebtp.cloud.account.service.AccountService;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("account")
|
||||
public class AccountController {
|
||||
|
||||
private @Autowired AccountService accountService;
|
||||
|
||||
@RequestMapping("decrease")
|
||||
public String decrease(@RequestParam("userId") Long userId, @RequestParam("money") BigDecimal money) {
|
||||
accountService.decrease(userId, money);
|
||||
return "Account decrease success";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package com.chinaunicom.mall.ebtp.cloud.account.entity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Data
|
||||
@TableName
|
||||
@Accessors(chain = true)
|
||||
public class Account {
|
||||
|
||||
private Long id;
|
||||
private Long userId;
|
||||
private BigDecimal total;
|
||||
private BigDecimal used;
|
||||
private BigDecimal residue;
|
||||
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package com.chinaunicom.mall.ebtp.cloud.account.feign;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
@FeignClient(value = "order-service")
|
||||
public interface OrderApi {
|
||||
|
||||
@RequestMapping("/order/update")
|
||||
String update(@RequestParam("userId") Long userId, @RequestParam("money") BigDecimal money,
|
||||
@RequestParam("status") Integer status);
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.chinaunicom.mall.ebtp.cloud.account.mapper;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.chinaunicom.mall.ebtp.cloud.account.entity.Account;
|
||||
|
||||
@Mapper
|
||||
public interface AccountMapper extends BaseMapper<Account> {
|
||||
|
||||
@Update("UPDATE account SET residue = residue - #{money}, used = used + #{money} WHERE user_id = #{userId}")
|
||||
void decrease(@Param("userId") Long userId, @Param("money") BigDecimal money);
|
||||
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package com.chinaunicom.mall.ebtp.cloud.account.service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public interface AccountService {
|
||||
|
||||
void decrease(Long userId, BigDecimal money);
|
||||
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package com.chinaunicom.mall.ebtp.cloud.account.service.impl;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.chinaunicom.mall.ebtp.cloud.account.feign.OrderApi;
|
||||
import com.chinaunicom.mall.ebtp.cloud.account.mapper.AccountMapper;
|
||||
import com.chinaunicom.mall.ebtp.cloud.account.service.AccountService;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class AccountServiceImpl implements AccountService {
|
||||
|
||||
private @Autowired AccountMapper accountMapper;
|
||||
private @Autowired OrderApi orderApi;
|
||||
|
||||
@Override
|
||||
public void decrease(Long userId, BigDecimal money) {
|
||||
|
||||
log.info("--------> 扣减账户数据开始");
|
||||
|
||||
accountMapper.decrease(userId, money);
|
||||
|
||||
log.info("------->扣减账户结束account中");
|
||||
|
||||
log.info("修改订单状态开始");
|
||||
|
||||
String mes = orderApi.update(userId, money.multiply(new BigDecimal("0.09")), 0);
|
||||
|
||||
log.info("修改订单状态结束:{}", mes);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
logging:
|
||||
level:
|
||||
com.chinaunicom.mall.ebtp.cloud: info
|
||||
|
||||
server:
|
||||
port: 8672
|
||||
|
||||
spring:
|
||||
cloud:
|
||||
alibaba:
|
||||
seata:
|
||||
tx-service-group: test_tx_group
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://125.32.114.204:13306/ebtp_mall_bid?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
|
||||
username: mall3-ebtp-dev
|
||||
password: mall3-ebtp-dev
|
@ -0,0 +1,6 @@
|
||||
spring:
|
||||
profiles:
|
||||
active: dev
|
||||
application:
|
||||
name: account-service
|
||||
|
Reference in New Issue
Block a user