博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPRINGBOOT 使用技巧总结
阅读量:7044 次
发布时间:2019-06-28

本文共 3157 字,大约阅读时间需要 10 分钟。

hot3.png

事务控制(注解、编码控制)

在Transactional标注的方法里面处理一段事务逻辑提交之后,再处理非事务的逻辑

@Transactional(rollbackFor = Exception.class)@Overridepublic int insertUser(User user) {    int result = userMapper.insertSelective(user);    TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter(){        @Override        public void afterCommit() {            System.out.println("Transaction is commit");        }    });    return result;}

编码控制事务。

@Autowiredprivate TransactionTemplate transactionTemplate;@Testpublic void transcationByhand(){        OrderTransboundaryInfoDO insert1 = new OrderTransboundaryInfoDO();        insert1.setOrderCode("zxyTest333");        insert1.setReceiveRealName("zxy333");        insert1.setUserPhone("zxy333");        insert1.setUserId(2143124312412412412L);        insert1.setReceiveIdentityCard("dfadsfads");        insert1.setCreateTm(new Date());        //只有excute内部的方法才有事务        transactionTemplate.execute(new TransactionCallbackWithoutResult() {            @Override            protected void doInTransactionWithoutResult(TransactionStatus status) {                orderTransboundaryInfoDAO.insertSelective(insert1);                orderTransboundaryInfoDAO.insert(insert1);//此行代码会报错,回滚            }        });    }

将service的方法快速异步化

配置线程池

@Configuration@EnableAsync@Slf4jpublic class ExecutorConfiguration {    @Bean    public Executor asyncServiceExecutor() {        log.info("start asyncServiceExecutor");        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();        //配置核心线程数        executor.setCorePoolSize(5);        //配置最大线程数        executor.setMaxPoolSize(5);        //配置队列大小        executor.setQueueCapacity(2000);        //配置线程池中的线程的名称前缀        executor.setThreadNamePrefix("async-service-");        // rejection-policy:当pool已经达到max size的时候,如何处理新任务        // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());        //执行初始化        executor.initialize();        return executor;    }}

异步service方法

@Async("asyncServiceExecutor")@Overridepublic void testAsyncExecutor() {    log.info("testAsyncExecutor start");    try {        Thread.sleep(2000);    } catch (InterruptedException e) {        e.printStackTrace();    }    log.info("testAsyncExecutor done");}

参考:

分布式SESSION共享

引入redis依赖,配置configuration

@Configuration  @EnableRedisHttpSession  public class RedisSessionConfig {  }

使用spring管理线程池

实例名称:threadPoolTaskExecutor

@Beanpublic ThreadPoolTaskExecutor threadPoolTaskExecutor() {    ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();    threadPoolTaskExecutor.setCorePoolSize(4);    threadPoolTaskExecutor.setMaxPoolSize(20);    //任务队列深度    threadPoolTaskExecutor.setQueueCapacity(5000);    threadPoolTaskExecutor.setThreadNamePrefix("z-manager-thread-");    //待任务处理完之后才销毁线程池(类似于jdk线程池的shutdown和shutdownNow的区别)    threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);    //处理不过来时的拒绝策略    threadPoolTaskExecutor.setRejectedExecutionHandler((runnable, executor) -> {        //    });    return threadPoolTaskExecutor;}

参考文档

转载于:https://my.oschina.net/liangxiao/blog/2991410

你可能感兴趣的文章
天融信不可取
查看>>
新商盟订烟自动获取可订烟数量及自动填充数量
查看>>
Unit20 Is this seat taken?
查看>>
linux下安装mongodb
查看>>
IPv4和IPv6共存
查看>>
分享到微信微博QQ的简单实现(二)
查看>>
linux shell
查看>>
如何实现云主机
查看>>
获取项目的请求路径
查看>>
Git不用每次都输入用户名密码设置
查看>>
KVM基础管理
查看>>
systemd下通过tmpfiles.d开机自动创建目录
查看>>
CDNPlus的节点和管理中心
查看>>
zabbix3.0.4邮件报警配置
查看>>
python常用函数以及模块(四)
查看>>
Spark机器学习(一) -- Machine Learning Library (MLlib)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
利用python3发微信
查看>>
第一个struts2程序的配置
查看>>