我正在做一个项目,我想在其中使用非常具体的事务传播策略。数据库有两组表,活动表和归档表。每组表都是用它自己的实体和接口来实现的,这些实体和接口扩展了CrudRepository<T, ID>. 目标是将一组实体插入到活动表中,并将活动表中的所有数据插入到单个事务中的存档表中。表中的实体不一样,会有不同的表结构。
给定两个类似于表单的独立存储库
public interface FooRepository extends CrudRepository<Foo, Integer>
public interface FooArchiveRepository extends CrudRepository<FooArchive, Integer>
Run Code Online (Sandbox Code Playgroud)
和类似的实现
@Autowired FooRepository fooRepo;
@Autowired FooArchiveRepository fooArchiveRepo;
@Autowired BarService barService;
List<Foo> newData = barService.doThing();
fooRepo.saveAll(newData);
// fooData is a list of FooArchive from earlier
fooArchiveRepo.saveAll(fooData);
Run Code Online (Sandbox Code Playgroud)
目标是拥有fooRepo.saveAll(newData)并fooArchiveRepo.saveAll(fooData)保证在单个数据库事务中执行。Spring 的默认事务传播在同一个物理事务中执行Required不同的Transactional方法 - 这适用Transactional于应用程序上下文中的所有方法,还是仅适用于每个实体?
我正在运行一个使用固定线程池的 Java 应用程序,其中线程用于向外部服务发出 HTTP 请求。
线程池被故意过度配置,我想获得一些线程池利用率的测量结果(即,此时池中 20% 的线程空闲,而此时 30% 的线程忙碌)。
是否有一种有效的方法来检查线程池(通过 Executors.newFixedThreadPool(x) 创建)当前正在执行任务的比例?
我曾考虑过创建一个特殊的监视器线程来持续运行可调用任务,报告利用率,但我不确定这是否会影响线程池本身的性能(通过使线程响应监视器而不是进行 HTTP 调用) )。