当前位置:   article > 正文

atomikos 使用说明_com.atomikos.icatch.default_jta_timeout

com.atomikos.icatch.default_jta_timeout

atomikos 使用说明

 

atomikos使用两阶段协议实现事务操作,常用于单机多库事务

 

 

**********************

引入jar包

 

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-jta-atomikos</artifactId>
  4. <version>2.2.2.RELEASE</version>
  5. </dependency>

 

 

**********************

自动配置类

 

JtaAutoConfiguration:jta自动配置类

  1. @Configuration(
  2. proxyBeanMethods = false
  3. )
  4. @ConditionalOnClass({Transaction.class})
  5. @ConditionalOnProperty(
  6. prefix = "spring.jta",
  7. value = {"enabled"},
  8. matchIfMissing = true
  9. )
  10. @AutoConfigureBefore({XADataSourceAutoConfiguration.class, ActiveMQAutoConfiguration.class, ArtemisAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
  11. @Import({JndiJtaConfiguration.class, BitronixJtaConfiguration.class, AtomikosJtaConfiguration.class})
  12. public class JtaAutoConfiguration {
  13. public JtaAutoConfiguration() {
  14. }
  15. }

 

AtomikosJtaConfiguration:atomikos自动配置类

  1. @Configuration(
  2. proxyBeanMethods = false
  3. )
  4. @EnableConfigurationProperties({AtomikosProperties.class, JtaProperties.class})
  5. @ConditionalOnClass({JtaTransactionManager.class, UserTransactionManager.class})
  6. @ConditionalOnMissingBean({PlatformTransactionManager.class})
  7. class AtomikosJtaConfiguration {
  8. AtomikosJtaConfiguration() {
  9. }
  10. @Bean(
  11. initMethod = "init",
  12. destroyMethod = "close"
  13. )
  14. @ConditionalOnMissingBean({TransactionManager.class})
  15. UserTransactionManager atomikosTransactionManager(UserTransactionService userTransactionService) throws Exception {
  16. UserTransactionManager manager = new UserTransactionManager();
  17. manager.setStartupTransactionService(false);
  18. manager.setForceShutdown(true);
  19. return manager;
  20. }//transactionmanager不存在则创建userTransactionManager实例
  21. @Bean
  22. JtaTransactionManager transactionManager(UserTransaction userTransaction, TransactionManager transactionManager, ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
  23. JtaTransactionManager jtaTransactionManager = new JtaTransactionManager(userTransaction, transactionManager);
  24. transactionManagerCustomizers.ifAvailable((customizers) -> {
  25. customizers.customize(jtaTransactionManager);
  26. });
  27. return jtaTransactionManager;
  28. }//platformTransactionManager实例不存在则创建jtaTransactionManager实例
  29. 。。。。
  30. }

 

 

**********************

配置类

 

AtomikosProperties:atomikos属性配置参数

  1. @ConfigurationProperties(
  2. prefix = "spring.jta.atomikos.properties"
  3. )
  4. public class AtomikosProperties {
  5. private String service;
  6. private Duration maxTimeout = Duration.ofMillis(300000L);
  7. private Duration defaultJtaTimeout = Duration.ofMillis(10000L);
  8. private int maxActives = 50;
  9. private boolean enableLogging = true;
  10. private String transactionManagerUniqueName;
  11. private boolean serialJtaTransactions = true;
  12. private boolean allowSubTransactions = true;
  13. private boolean forceShutdownOnVmExit;
  14. private long defaultMaxWaitTimeOnShutdown = 9223372036854775807L;
  15. private String logBaseName = "tmlog";
  16. private String logBaseDir;
  17. private long checkpointInterval = 500L;
  18. private boolean threadedTwoPhaseCommit;
  19. private final AtomikosProperties.Recovery recovery = new AtomikosProperties.Recovery();
  20. public AtomikosProperties() {
  21. }

 

AtomikosDataSourceBean :数据源配置参数

  1. @ConfigurationProperties(
  2. prefix = "spring.jta.atomikos.datasource"
  3. )
  4. public class AtomikosDataSourceBean extends com.atomikos.jdbc.AtomikosDataSourceBean implements BeanNameAware, InitializingBean, DisposableBean {
  5. public class AtomikosDataSourceBean extends AbstractDataSourceBean {
  6. ***********************************
  7. 基础类AbstractDataSourceBean
  8. public abstract class AbstractDataSourceBean implements DataSource, ConnectionPoolProperties, Referenceable, Serializable {
  9. private static final Logger LOGGER = LoggerFactory.createLogger(AbstractDataSourceBean.class);
  10. static final int DEFAULT_ISOLATION_LEVEL_UNSET = -1;
  11. private static final int DEFAULT_POOL_SIZE = 1;
  12. private int minPoolSize = 1;
  13. private int maxPoolSize = 1;
  14. private int borrowConnectionTimeout = 30;
  15. private int reapTimeout = 0;
  16. private int maxIdleTime = 60;
  17. private String testQuery;
  18. private int maintenanceInterval = 60;
  19. private int loginTimeout;
  20. private transient ConnectionPool connectionPool;
  21. private transient PrintWriter logWriter;
  22. private String resourceName;
  23. private int defaultIsolationLevel = -1;
  24. private int maxLifetime;
  25. private boolean enableConcurrentConnectionValidation = true;

 

AtomikosConnectionFactoryBean:连接工厂配置参数

  1. @ConfigurationProperties(
  2. prefix = "spring.jta.atomikos.connectionfactory"
  3. )
  4. public class AtomikosConnectionFactoryBean extends com.atomikos.jms.AtomikosConnectionFactoryBean implements BeanNameAware, InitializingBean, DisposableBean {
  5. private String beanName;
  6. public AtomikosConnectionFactoryBean() {
  7. }
  8. ****************************************
  9. AtomikosConnectionFactoryBean:基础类
  10. public class AtomikosConnectionFactoryBean implements ConnectionFactory, ConnectionPoolProperties, Referenceable, Serializable {
  11. private static final Logger LOGGER = LoggerFactory.createLogger(AtomikosConnectionFactoryBean.class);
  12. private static final long serialVersionUID = 1L;
  13. private String uniqueResourceName;
  14. private int maxPoolSize = 1;
  15. private int minPoolSize = 1;
  16. private String xaConnectionFactoryClassName;
  17. private int borrowConnectionTimeout = 30;
  18. private Properties xaProperties = null;
  19. private transient ConnectionPool connectionPool;
  20. private transient XAConnectionFactory xaConnectionFactory;
  21. private int maintenanceInterval = 60;
  22. private int maxIdleTime = 60;
  23. private int reapTimeout = 0;
  24. private boolean localTransactionMode;
  25. private int maxLifetime;
  26. private boolean ignoreSessionTransactedFlag = true;
  27. public AtomikosConnectionFactoryBean() {
  28. this.xaProperties = new Properties();
  29. }

 

transactions-default.properties:atomikos全局默认配置

  1. com.atomikos.icatch.enable_logging=true //是否启动日志记录
  2. com.atomikos.icatch.log_base_dir=./ //日记记录位置
  3. com.atomikos.icatch.log_base_name=tmlog //事务日志前缀
  4. com.atomikos.icatch.checkpoint_interval=500 //刷盘的时间间隔
  5. com.atomikos.icatch.forget_orphaned_log_entries_delay=86400000
  6. //事务日志的保存时间
  7. com.atomikos.icatch.force_shutdown_on_vm_exit=false //虚拟机关闭是是否强制关闭
  8. com.atomikos.icatch.automatic_resource_registration=true //说否自动注册资源管理器
  9. com.atomikos.icatch.serial_jta_transactions=true //序列化jta事务管理器
  10. com.atomikos.icatch.default_jta_timeout=10000 //默认超时时间
  11. com.atomikos.icatch.max_timeout=300000 //最大超时时间
  12. com.atomikos.icatch.threaded_2pc=false //2阶段提交事务时是否使用多线程
  13. com.atomikos.icatch.max_actives=50 //同时使用的事务数量
  14. java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
  15. com.atomikos.icatch.client_demarcation=false
  16. java.naming.provider.url=rmi://localhost:1099
  17. com.atomikos.icatch.rmi_export_class=none
  18. com.atomikos.icatch.trust_client_tm=false
  19. com.atomikos.icatch.recovery_delay=${com.atomikos.icatch.default_jta_timeout}
  20. //事务恢复之间的时间间隔
  21. com.atomikos.icatch.oltp_max_retries=5 //事务失败重试次数
  22. com.atomikos.icatch.oltp_retry_interval=10000 //事务重试间隔
  23. com.atomikos.icatch.allow_subtransactions=true //是否支持子事务
  24. com.atomikos.icatch.default_max_wait_time_on_shutdown=9223372036854775807
  25. //虚拟机正常关闭事务等待时间

说明:可在多个位置设置配置文件transactions-default.properties 、 transactions.properties、jta.properties、命令行指定文件路径(java -Dcom.atomikos.icatch.file),越往后优先级最高

 

 

**********************

 相关类

 

DruidXADataSource:druid数据源

  1. public class DruidXADataSource extends DruidDataSource implements XADataSource {
  2. private static final Log LOG = LogFactory.getLog(DruidXADataSource.class);
  3. private static final long serialVersionUID = 1L;
  4. private Object h2Factory = null;
  5. public DruidXADataSource() {
  6. }

 

AtomikosDataSourceBean:atomikos数据源

  1. @ConfigurationProperties(
  2. prefix = "spring.jta.atomikos.datasource"
  3. )
  4. public class AtomikosDataSourceBean extends com.atomikos.jdbc.AtomikosDataSourceBean implements BeanNameAware, InitializingBean, DisposableBean {
  5. private String beanName;
  6. public AtomikosDataSourceBean() {
  7. }
  8. public void setBeanName(String name) {
  9. this.beanName = name;
  10. }
  11. public void afterPropertiesSet() throws Exception {
  12. if (!StringUtils.hasLength(this.getUniqueResourceName())) {
  13. this.setUniqueResourceName(this.beanName);
  14. }
  15. this.init();
  16. }
  17. public void destroy() throws Exception {
  18. this.close();
  19. }
  20. }
  21. **********************************
  22. AtomikosDataSourceBean
  23. public class AtomikosDataSourceBean extends AbstractDataSourceBean {
  24. private static final Logger LOGGER = LoggerFactory.createLogger(AtomikosDataSourceBean.class);
  25. private static final long serialVersionUID = 1L;
  26. private Properties xaProperties = null;
  27. private String xaDataSourceClassName;
  28. private transient XADataSource xaDataSource;
  29. public AtomikosDataSourceBean() {
  30. this.xaProperties = new Properties();
  31. }
  32. public void setXaDataSource(XADataSource xaDataSource) {
  33. this.xaDataSource = xaDataSource;
  34. }//设置xa事务源
  35. 。。。。
  36. }

 

UserTransaction:用户事务操作

  1. public interface UserTransaction {
  2. void begin() throws NotSupportedException, SystemException;
  3. void commit() throws RollbackException, HeuristicMixedException, HeuristicRollbackException, SecurityException, IllegalStateException, SystemException;
  4. void rollback() throws IllegalStateException, SecurityException, SystemException;
  5. void setRollbackOnly() throws IllegalStateException, SystemException;
  6. int getStatus() throws SystemException;
  7. void setTransactionTimeout(int var1) throws SystemException;
  8. }

 

UserTransactionManager:用户事务管理器

  1. public class UserTransactionManager implements TransactionManager, Serializable, Referenceable, UserTransaction {
  2. private static final long serialVersionUID = -655789038710288096L;
  3. private transient TransactionManagerImp tm;
  4. private boolean forceShutdown;
  5. private boolean startupTransactionService = true;
  6. private boolean closed = false;
  7. private boolean coreStartedHere;
  8. public UserTransactionManager() {
  9. }

 

JtaTransactionManager:全局事务管理器

  1. public class JtaTransactionManager extends AbstractPlatformTransactionManager implements TransactionFactory, InitializingBean, Serializable {
  2. public static final String DEFAULT_USER_TRANSACTION_NAME = "java:comp/UserTransaction";
  3. public static final String[] FALLBACK_TRANSACTION_MANAGER_NAMES = new String[]{"java:comp/TransactionManager", "java:appserver/TransactionManager", "java:pm/TransactionManager", "java:/TransactionManager"};
  4. public static final String DEFAULT_TRANSACTION_SYNCHRONIZATION_REGISTRY_NAME = "java:comp/TransactionSynchronizationRegistry";
  5. private transient JndiTemplate jndiTemplate;
  6. @Nullable
  7. private transient UserTransaction userTransaction;
  8. @Nullable
  9. private String userTransactionName; //用户事务名称
  10. private boolean autodetectUserTransaction;
  11. private boolean cacheUserTransaction; //是否缓存用户事务
  12. private boolean userTransactionObtainedFromJndi;
  13. @Nullable
  14. private transient TransactionManager transactionManager; //用户事务管理器
  15. @Nullable
  16. private String transactionManagerName; //用户事务管理器名称
  17. private boolean autodetectTransactionManager;
  18. @Nullable
  19. private transient TransactionSynchronizationRegistry transactionSynchronizationRegistry;
  20. @Nullable
  21. private String transactionSynchronizationRegistryName;
  22. private boolean autodetectTransactionSynchronizationRegistry;
  23. private boolean allowCustomIsolationLevels;
  24. public JtaTransactionManager() {
  25. this.jndiTemplate = new JndiTemplate();
  26. this.autodetectUserTransaction = true;
  27. this.cacheUserTransaction = true;
  28. this.userTransactionObtainedFromJndi = false;
  29. this.autodetectTransactionManager = true;
  30. this.autodetectTransactionSynchronizationRegistry = true;
  31. this.allowCustomIsolationLevels = false;
  32. this.setNestedTransactionAllowed(true);
  33. }
  34. public JtaTransactionManager(UserTransaction userTransaction) {
  35. public JtaTransactionManager(UserTransaction userTransaction, TransactionManager transactionManager) {
  36. public JtaTransactionManager(TransactionManager transactionManager) {

 

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号