java jpa mybatis_java多线程里能使用mybatis或者jpa插入吗?

题主的目的:一个线程插入大批量的数据,和多个线程同时插入大批量的数据,在时间上是否有差距,所以在线程里用正常的orm方式操作数据库;

他想用Spring-Data-Jpa这种方式去插入数据,简化操作。

看着像SpringBoot应用。举个例子

@AllArgsConstructor

public class Task implements Callable {

private String name;

private BrandRepository brandRepository;

@Override

public String call() throws Exception {

long temp = System.currentTimeMillis();

for (int i = 1; i < 10; i++) {

brandRepository.save(new Brand(name, i));

}

return name + "执行耗时" + (System.currentTimeMillis() - temp);

}

}

BrandRepository

@Data

@ToString

@NoArgsConstructor

@AllArgsConstructor

public class Brand {

private String name;

private int seq;

}

/**

* @author Richard_yyf

* @version 1.0 2019/10/11

*/

// 把这个 Component 类比 Repository

@Component

public class BrandRepository {

public void save(Brand brand) {

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("执行插入数据库操作 " + brand.toString());

}

}

main方法

@SpringBootApplication

@Slf4j

public class Demo999Application {

public static void main(String[] args) {

ApplicationContext context = SpringApplication.run(Demo999Application.class, args);

//System.in.read(); // press any key to exit

ExecutorService executor = Executors.newCachedThreadPool();

try {

List> list = new ArrayList<>();

list.add(new Task("线程1", context.getBean(BrandRepository.class)));

list.add(new Task("线程2", context.getBean(BrandRepository.class)));

List> futures = executor.invokeAll(list);

for (Future future : futures) {

System.out.println("任务执行完成:" + future.get());

}

} catch (InterruptedException | ExecutionException e) {

log.error("", e);

}

try {

executor.shutdown();

if(!executor.awaitTermination(10000, TimeUnit.MILLISECONDS)){

// 超时的时候向线程池中所有的线程发出中断(interrupted)。

executor.shutdownNow();

}

} catch (InterruptedException e) {

// awaitTermination方法被中断的时候也中止线程池中全部的线程的执行。

System.out.println("awaitTermination interrupted: " + e);

executor.shutdownNow();

}

}

}

如果是Spring的话同理,用个java configuration类配置或者扫描相关的Bean,然后main方法里用new ***ApplicationContext()启动容器,如上操作即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值