In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-02-24 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Internet Technology >
Share
Shulou(Shulou.com)06/02 Report--
This article mainly introduces "the usage of Spring Transactional transactions and logs". In the daily operation, I believe many people have doubts about the usage of Spring Transactional transactions and logs. The editor consulted all kinds of materials and sorted out simple and easy-to-use operation methods. I hope it will be helpful to answer the doubts about "the usage of Spring Transactional transactions and logs". Next, please follow the editor to study!
1. Main code
/ / switch data source @ DataSourceRouting// start transaction @ Transactional (rollbackFor = Exception.class) public boolean test1 (Long userId, List labelList) {biz1 (userId, labelList); biz2 (userId, labelList); return true;} public boolean biz1 (Long userId, List labelList) {log.info ("insert FamilyPlanLabelDetail"start"); FamilyPlanLabelDetail familyPlanLabelDetail = new FamilyPlanLabelDetail (); familyPlanLabelDetail.setUserId (userId); familyPlanLabelDetail.setCreateTime (new Date ()) Int numLabelDetail = familyPlanDao.saveFamilyPlanLabelDetail (familyPlanLabelDetail); log.info ("insert FamilyPlanLabelDetail"end"); return true;} public boolean biz2 (Long userId, List labelList) throws Exception {log.info ("insert FamilyPlanLabel"start"); List list = new ArrayList (); for (String labelName: labelList) {FamilyPlanLabel familyPlanLabel = new FamilyPlanLabel (); familyPlanLabel.setUserId (userId) FamilyPlanLabel.setLabelName (labelName); familyPlanLabel.setType (FamilyPlanLabelTypeEnum.SYS_ADD.getCode ()); familyPlanLabel.setStatus (FamilyPlanLabelStatusEnum.USE.getCode ()); familyPlanLabel.setCreateTime (new Date ()); familyPlanLabel.setUpdateTime (new Date ()); list.add (familyPlanLabel);} int labelNum = familyPlanDao.saveFamilyPlanLabelByBatch (list) If (true) {/ / simulate exception throw new Exception ("manually throw exception");} log.info ("insert FamilyPlanLabel"end"); return true;}
2 open transaction
2.1 Open transaction, normal log
/ / there is a note on the method @ DataSourceRouting @ Transactionalcom.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.client.transaction.manager.FamilyPlanTransactionManager.test1 (...) Method execution starts, and the data source switches to: master com.moon.client.transaction.manager.FamilyPlanTransactionManager "query FamilyPlanLabelDetail" start / / because switching the data source does not use com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.queryFamilyPlanLabelDetailByUserId (...) in the transaction. Method execution starts, no data source is configured Switch to default: master / / enable transaction org.mybatis.spring.SqlSessionUtils Creating a new SqlSession org.mybatis.spring.SqlSessionUtils Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cdf939b] org.mybatis.spring.transaction.SpringManagedTransaction JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@eeede52] will be managed by Spring com.moon.core.dao.FamilyPlanDao.queryFamilyPlanLabelDetailByUserId ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@eeede52] com.moon.core.dao.FamilyPlanDao.queryFamilyPlanLabelDetailByUserId = > Preparing: SELECT id User_id AS userId, create_time AS createTime FROM t_detail WHERE user_id =? Com.moon.core.dao.FamilyPlanDao.queryFamilyPlanLabelDetailByUserId = = > Parameters: 1 (Long) org.mybatis.spring.SqlSessionUtils Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cdf939b] com.moon.core.dbUtils.DataSourceAspect [data Source processing] com.moon.core.dao.FamilyPlanDao.queryFamilyPlanLabelDetailByUserId (...) Method execution is complete, clean the data source com.moon.client.transaction.manager.FamilyPlanTransactionManager "query FamilyPlanLabelDetail"end com.moon.client.transaction.manager.FamilyPlanTransactionManager" insert FamilyPlanLabelDetail "" start / / because in the transaction, switching the data source does not use com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail (.) Method execution starts. No data source is configured. Switch to default: master org.mybatis.spring.SqlSessionUtils Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cdf939b] from current transaction com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@eeede52] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail = > Preparing: INSERT INTO t_detail (user_id, create_time) VALUES (?,?) Com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail = > Parameters: 1 (Long), 2019-09-16 12 Long 02lo 00.075 (Timestamp) org.mybatis.spring.SqlSessionUtils Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cdf939b] com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail (...) Method execution is completed, cleaning the data source com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabelDetail" end com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabel"start / / because in the transaction, switching the data source does not use com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch (.) Method execution starts, no data source is configured Switch to the default: master org.mybatis.spring.SqlSessionUtils Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cdf939b] from current transaction com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@eeede52] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch = > Preparing: INSERT INTO t_label (user_id, label_name, type, status, create_time, update_time) VALUES (?) Com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch = > Parameters: 1 (Long), test1342966 (String), 1 (Integer), 1 (Integer), 2019-09-16 12 purl 02Long 00.917 (Timestamp), 2019-09-16 12 Vera 02purl 00.917 (Timestamp) org.mybatis.spring.SqlSessionUtils Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cdf939b] com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch (...) Method execution completed Clean up data source com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabel"end / / commit transaction org.mybatis.spring.SqlSessionUtils Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cdf939b] org.mybatis.spring.SqlSessionUtils Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cdf939b] com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.client.transaction.manager.FamilyPlanTransactionManager.test1 (...) Method execution is completed, cleaning up the data source
Note:
(1) org.mybatis.spring.transaction.SpringManagedTransaction JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3d2fb2bf] will be managed by Spring
(2) org.mybatis.spring.SqlSessionUtils Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@251c52c5]
2.2 Log with abnormal rollback when a transaction is opened
Com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.client.transaction.manager.FamilyPlanTransactionManager.test1 (...) Method execution starts, and the data source switches to: master com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabelDetail" to start com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail (...) Method execution starts, no data source is configured Switch to the default: master org.mybatis.spring.SqlSessionUtils Creating a new SqlSession org.mybatis.spring.SqlSessionUtils Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67334835] org.mybatis.spring.transaction.SpringManagedTransaction JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3d2fb2bf] will be managed by Spring com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3d2fb2bf] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail = > Preparing: INSERT INTO t_detail (user_id) Create_time) VALUES (?) Com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail = > Parameters: 1 (Long), 2019-09-16 10 Timestamp 26 Timestamp 50.722 (Timestamp) org.mybatis.spring.SqlSessionUtils Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67334835] com.moon.core.dbUtils.DataSourceAspect [data Source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail (...) Method execution is completed, cleaning the data source com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabelDetail" end com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabel" start com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch (...) Method execution starts, no data source is configured Switch to the default: master org.mybatis.spring.SqlSessionUtils Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67334835] from current transaction com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3d2fb2bf] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch = > Preparing: INSERT INTO t_label (user_id, label_name, type, status, create_time, update_time) VALUES (?) Com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch = > Parameters: 1 (Long), test1591984 (String), 1 (Integer), 1 (Integer), 2019-09-16 10 Vera 27 Long 12.847 (Timestamp), 2019-09-16 10 Vera 27 Vera 12.847 (Timestamp) org.mybatis.spring.SqlSessionUtils Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67334835] com.moon.core.dbUtils.DataSourceAspect [data Source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch (...) Method execution completed, clean the data source org.mybatis.spring.SqlSessionUtils Transaction synchronization rolling back SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67334835] org.mybatis.spring.SqlSessionUtils Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67334835] com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.client.transaction.manager.FamilyPlanTransactionManager.test1 (...) Method execution is completed, cleaning the data source com.moon.home.controller.AtestController has an exception java.lang.RuntimeException: family planning, initializing the account system default account type. Exception at com.moon.client.transaction.manager.FamilyPlanTransactionManager.biz2 (FamilyPlanTransactionManager.java:367) ~ [CKclient-1.0.0-SNAPSHOT.jar:na] at com.moon.client.transaction.manager.FamilyPlanTransactionManager.test1 (FamilyPlanTransactionManager.java:382) ~ [CKclient-1.0.0-SNAPSHOT.jar:na] at com.moon.client.transaction.manager.FamilyPlanTransactionManager$$FastClassBySpringCGLIB$$728e76cf.invoke () ~ [CKclient-1.0.0-SNAPSHOT.jar: Na] at org.springframework.cglib.proxy.MethodProxy.invoke (MethodProxy.java:204) ~ [spring-core-4.3.11.RELEASE.jar:4.3.11.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint (CglibAopProxy.java:738) ~ [spring-aop-4.3.11.RELEASE.jar:4.3.11.RELEASE]
Note:
(1) org.mybatis.spring.transaction.SpringManagedTransaction JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3d2fb2bf] will be managed by Spring
(2) org.mybatis.spring.SqlSessionUtils Transaction synchronization rolling back SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67334835]
2.3 start transaction summary
(1) add @ Transactional to the method. Before entering the business code of the method (in this case, before entering the business code of test1 ()), you have already decided which data source to use. It is invalid to switch data sources in the business method biz1 () or biz2 ().
(2) the @ Transactional annotation is added. If the data source is specified before entering the test1 () method and test1 () does not switch the data source in the aspect, the data source used before entering the test1 () method shall prevail; if no data source is specified, the default data source configured by the system will prevail.
(3) instead of adding the @ Transactional annotation, the transaction will be opened after entering the test1 () method. The transaction will only be opened when SQL is executed.
3 do not open business
3.1 do not open transactions and execute success log
/ / enter biz1 (...) Method com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabelDetail" to start com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail (...) Method execution starts, no data source is configured Switch to the default: master org.mybatis.spring.SqlSessionUtils Creating a new SqlSession org.mybatis.spring.SqlSessionUtils SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57494412] was not registered for synchronization because synchronization is not active org.mybatis.spring.transaction.SpringManagedTransaction JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@320e24b0] will not be managed by Spring com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@320e24b0] com.moon.core.dao. FamilyPlanDao.saveFamilyPlanLabelDetail = > Preparing: INSERT INTO t_detail (user_id Create_time) VALUES (?) Com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail = = > Parameters: 1 (Long), 2019-09-17 11 11 Long 06lo 00.781 (Timestamp) org.mybatis.spring.SqlSessionUtils Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57494412] com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail (...) Method execution completed, clean the data source com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabelDetail" end / / enter biz2 (...) The method com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabel" starts com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch (..) Method execution starts, no data source is configured Switch to the default: master org.mybatis.spring.SqlSessionUtils Creating a new SqlSession org.mybatis.spring.SqlSessionUtils SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5471460] was not registered for synchronization because synchronization is not active org.mybatis.spring.transaction.SpringManagedTransaction JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@320e24b0] will not be managed by Spring com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@320e24b0] com.moon.core.dao. FamilyPlanDao.saveFamilyPlanLabelByBatch = > Preparing: INSERT INTO t_label (user_id Label_name, type, status, create_time, update_time) VALUES Com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch = > Parameters: 1 (Long), test1 (String), 1 (Integer), 1 (Integer), 2019-09-17 11 Long 06Long 01.056 (Timestamp), 2019-09-17 11 Gang 06purl 01.056 (Timestamp) org.mybatis.spring.SqlSessionUtils Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5471460] com.moon.core.dbUtils.DataSourceAspect [data Source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch (...) Method execution is complete, cleaning the data source com.moon.client.transaction.manager.FamilyPlanTransactionManager "inserting FamilyPlanLabel" ends
3.2 do not open transactions and throw exception logs
/ / enter biz1 (...) Method com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabelDetail" to start com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail (...) Method execution starts, no data source is configured Switch to the default: master org.mybatis.spring.SqlSessionUtils Creating a new SqlSession org.mybatis.spring.SqlSessionUtils SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65ad141b] was not registered for synchronization because synchronization is not active org.mybatis.spring.transaction.SpringManagedTransaction JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@320e24b0] will not be managed by Spring com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@320e24b0] com.moon.core.dao. FamilyPlanDao.saveFamilyPlanLabelDetail = > Preparing: INSERT INTO t_detail (user_id Create_time) VALUES (?) Com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail = > Parameters: 1 (Long), 2019-09-17 10 Long 55 com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail 05.748 (Timestamp) org.mybatis.spring.SqlSessionUtils Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65ad141b] com.moon.core.dbUtils.DataSourceAspect [data Source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelDetail (...) Method execution completed, clean the data source com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabelDetail" end / / enter biz2 (...) The method com.moon.client.transaction.manager.FamilyPlanTransactionManager "insert FamilyPlanLabel" starts com.moon.core.dbUtils.DataSourceAspect [data source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch (..) Method execution starts, no data source is configured Switch to the default: master org.mybatis.spring.SqlSessionUtils Creating a new SqlSession org.mybatis.spring.SqlSessionUtils SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4d1121df] was not registered for synchronization because synchronization is not active org.mybatis.spring.transaction.SpringManagedTransaction JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@320e24b0] will not be managed by Spring com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@320e24b0] com.moon.core.dao. FamilyPlanDao.saveFamilyPlanLabelByBatch = > Preparing: INSERT INTO t_label (user_id Label_name, type, status, create_time, update_time) VALUES Com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch = > Parameters: 1 (Long), test1 (String), 1 (Integer), 1 (Integer), 2019-09-17 10 Long 55 Long 06.6 (Timestamp), 2019-09-17 10 10 Vera 55 Long 06.6 (Timestamp) org.mybatis.spring.SqlSessionUtils Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4d1121df] com.moon.core.dbUtils.DataSourceAspect [data Source processing] com.moon.core.dao.FamilyPlanDao.saveFamilyPlanLabelByBatch (.) Method execution completed Clean up the saveFamilyPlanLabelByBatch () method in the data source / / biz2 and throw an exception com.moon.appserver.controller.privates.TestTranController java.lang.Exception: manually throw an exception at com.moon.client.transaction.manager.FamilyPlanTransactionManager.biz2 (FamilyPlanTransactionManager.java:366) ~ [CKclient-1.0.0-SNAPSHOT.jar:na] at com.moon.client.transaction.manager.FamilyPlanTransactionManager.test1 (FamilyPlanTransactionManager.java:380) ~ [CKclient-1.0.0-SNAPSHOT .jar: na] at com.moon.client.transaction.manager.FamilyPlanTransactionManager.test2 (FamilyPlanTransactionManager.java:385) ~ [CKclient-1.0.0-SNAPSHOT.jar:na] at com.moon.client.transaction.manager.FamilyPlanTransactionManager$$FastClassBySpringCGLIB$$728e76cf.invoke () ~ [CKclient-1.0.0-SNAPSHOT.jar:na] at org.springframework.cglib.proxy.MethodProxy.invoke (MethodProxy.java:204) ~ [spring-core-4.3.11.RELEASE.jar 4.3.11.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint (CglibAopProxy.java:738) ~ [spring-aop-4.3.11.RELEASE.jar:4.3.11.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:157) ~ [spring-aop-4.3.11.RELEASE.jar:4.3.11.RELEASE] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke ( ExposeInvocationInterceptor.java:92) ~ [spring-aop-4.3.11.RELEASE.jar:4.3.11.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179) ~ [spring-aop-4.3.11.RELEASE.jar:4.3.11.RELEASE] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept (CglibAopProxy.java:673) ~ [spring-aop-4.3.11.RELEASE.jar:4.3. 11.RELEASE] at com.moon.client.transaction.manager.FamilyPlanTransactionManager$$EnhancerBySpringCGLIB$$d931e707.test2 () ~ [CKclient-1.0.0-SNAPSHOT.jar:na] at com.moon.appserver.controller.privates.TestTranController.test (TestTranController.java:29) ~ [classes/:na] so far The study on "the use of Spring Transactional transactions and logs" is over. I hope to be able to solve your doubts. The collocation of theory and practice can better help you learn, go and try it! If you want to continue to learn more related knowledge, please continue to follow the website, the editor will continue to work hard to bring you more practical articles!
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.