@事务中的服务

时间:2018-10-20 12:55:51

标签: spring-boot service transactional

我创建了一个投票应用程序,并且具有更改投票数的方法。它使用@Transactional注释实现了一个接口。

@Transactional(readOnly = true)
public interface VotingService {

    Vote getByRestaurantId(int restaurantId);

    Vote get(int id);

    List<Vote> getWithRestaurantsByDate(LocalDateTime date);

    List<Vote> getWithRestaurantsToday(HttpServletResponse response, int id);

    @Transactional
    Vote voteFor(int restaurantId, int userId);
}

我使用SpringBoot。 在同时投票多个用户的同时,它将正常工作。以及如何测试这种动作?

顺序投票工作正常。

用于更改语音数量的代码,如下所示:

    @Service
    public class VotingServiceImpl implements VotingService {
    ...

    @Override
    public Vote voteFor(int restaurantId, int userId) {
    ...
        Vote vote = getByRestaurantId(restaurantId);
        vote.setNumberOfVotes(vote.getNumberOfVotes() + 1)
    ...
        return vote;
    ...
    }
    ...

    }




@Entity
@Table(name = "votes", uniqueConstraints = {@UniqueConstraint(columnNames = {"restaurant_id", "date", "votes"}, name = "votes_unique_restaurant_date_votes_idx")})
public class Vote extends AbstractEntity {
    @Column(name = "votes")
    private int numberOfVotes;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "restaurant_id", nullable = false)
    @NotNull
    private Restaurant restaurant;

    public int getNumberOfVotes() {
        return numberOfVotes;
    }

    public void setNumberOfVotes(int numberOfVotes) {
        this.numberOfVotes = numberOfVotes;
    }

    public Vote() {
    }

    public Restaurant getRestaurant() {
        return restaurant;
    }

    public void setRestaurant(Restaurant restaurant) {
        this.restaurant = restaurant;
    }

    @Override
    public String toString() {
        return "Vote{" +
                super.toString() +
                "numberOfVotes=" + numberOfVotes +
                ", restaurant=" + restaurant +
                '}';
    }
}

谢谢!

1 个答案:

答案 0 :(得分:1)

  • VotingService是一个接口。
  • 实施类 VotingServiceImpl在春季默认为单例课程。它是 线程之间共享。
  • 它不应具有实例变量 持有投票信息。

您可以通过使用邮递员或jmeter执行并行请求来验证服务的正确性