跳至主要内容

博文

目前显示的是 五月, 2021的博文

Spring的Transaction事务管理

Welcome file 简介 本文的介绍主要从JDBC事务API的使用,到常用的SpringBoot中的事务管理,而SpringBoot其实是简化了很多Spring事务管理的配置。 JDBC的事务管理 基本的开启、提交和回滚事务 先复习一下JDBC的事务管理: public void jdbcSaveOrder ( ) throws SQLException { // 1. 拿到JDBC连接 Connection connection = dataSource . getConnection ( ) ; try ( connection ) { // 2. 设置自己控制事务 connection . setAutoCommit ( false ) ; . . . . // 3. 提交事务 connection . commit ( ) ; } catch ( Exception e ) { log . error ( "ds save order error:" , e ) ; // 4. 回滚事务 connection . rollback ( ) ; } } JDBC控制事务的API总体比较直观。 Spring的事务管理 可以从上面的JDBC示例中看到,事务管理最主要的几个操作就是:开启事务、提交事务、回滚事务。那么Spring是如何管理的呢?首先可以从不太常见的Spring编程式事务管理入手。 Spring编程式事务管理 我们可以通过 PlatformTransactionManager 来编程式开启事务,不过Spring提供了一个更加简便的 TransactionTemplate : @Service public class OrderService { @Autowired private Transacti

jvm的jit参数设置

Welcome file 简介 在工作中,经常会见到在启动Java程序的命令行里加一大把启动参数,有些是过时的,有些是不适合每个程序的。本文就简单说说经常见到的 -server 参数。 -server参数的作用 在早期jvm中, -server 参数表示Java程序使用Server VM运行。设置server参数可以让jit尽最大努力,用较多的启动时间,把较多的代码预先编译成native代码,增加运行效率。 但在现代JVM(如 Java 8)中,该参数并没有什么作用,因为现代JVM都是Server VM(详细见参考资料1)。 控制JIT编译的参数 现代JVM的JIT默认开启了分层编译,共分为5级: level 0 - interpreter level 1 - C1 with full optimization (no profiling) level 2 - C1 with invocation and backedge counters level 3 - C1 with full profiling (level 2 + MDO) level 4 - C2 所以如果想要JIT尽可能的优化,可以设置JIT使用C2编译,如: -XX:TieredStopAtLevel=4 另外,JIT对执行超过一定次数的代码,会编译成native代码,控制该次数的参数是: -XX:CompileThreshold=10000 。编译的native代码也会有大小限制,控制该大小的参数是: -XX:ReservedCodeCacheSize=240m 参考资料 [1]Oracle文档: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html [2]JVM源码: http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/2b2511bd3cc8/src/share/vm/runtime/advancedThresholdPolicy.hpp#l34