springboot+mybatis事务使用 5C

大家好我使用springboot集成mybatis,在一个业务处理中使用for循环插入数据,

比如list中有十条数据,for执行mappe.insert(user)十次,我的理解是方法上使用了

 @Transactional

如果后面insert报错,前面插入的数据也会回滚,但是实际没有,我的理解哪里有问题吗?

5个回答

1、事务是否生效:1)数据库是否支持,引擎是否支持,2)Spring是否开启事务支持 3、AOP是否拦截事务注解
2、采用批处理insert语句

参考推荐:https://www.roncoo.com/course/list.html?courseName=mybatis

首先看你的数据库存储类型是否支持事物,然后看是否开启事物支持@EnableTransactionManager,然后也可以批量插入操作

如果数据库是支持事务,并且已经开启了事务支持,在for循环所在方法上添加 @Transactional 是可以实现事务控制,你的没实现,就从这两个地方找找原因吧,还有,尽可能减少访问数据库的次数,必要情况下可以使用批处理

当你的事物配置全部没问题的时候需要注意下面两点。
1. 你的for是在加了@Transactional的方法里面循环的执行插入数据的,而不是你在一个for循环里面去调用一个加了@Transactional的事物方法插入数据。
2. 在你的事物方法里面,如果出现异常需要直接往方法外面抛出,不能使用try catch来解决异常,哪怕是使用了也需要在catch里面在继续throw 一个异常。
当其遇到异常就会直接回滚。

https://blog.csdn.net/qq_31122833/article/details/80567651

1、在方法体上加上:
@Transactional(rollbackFor = Exception.class)

2、在方法体内,写try catch捕捉。当抛异常时: 

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚

logger.error(e.getMessage(),e);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
springboot+mybatis事务使用

大家好我使用springboot集成mybatis,在一个业务处理中使用for循环插入数据, 比如list中有十条数据,for执行mappe.insert(user)十次,我的理解是方法上使用了 ``` @Transactional ``` 如果后面insert报错,前面插入的数据也会回滚,但是实际没有,我的理解哪里有问题吗?

springboot mybatis sqlserver 事务无法回滚

springboot mybatis sqlserver 事务无法回滚 控制台提示如下 明明已经加入了事务管理,抛出异常还是不会回滚 13:58:03.061 [http-nio-9000-exec-15] INFO c.n.c.u.d.DynamicDataSourceContextHolder - [setDataSourceType,26] - 切换到SQLSERVER_ERP数据源 Creating a new SqlSession Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a38ece8] JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@595277fa] will be managed by Spring SQL提示巴拉巴拉 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a38ece8] Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a38ece8] from current transaction SQL提示巴拉巴拉 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a38ece8] Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a38ece8] from current transaction **执行插入sql,插入后执行 int a = 1/0;** Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a38ece8] Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a38ece8] Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a38ece8] 13:58:03.313 [http-nio-9000-exec-15] ERROR c.n.f.e.GlobalExceptionHandler - [notFount,64] - 运行时异常: java.lang.ArithmeticException: / by zero at com.nbpt.yygs.service.hkhxkh.impl.YygsHkhxServiceImpl.excuteUpdateAndInsert(YygsHkhxServiceImpl.java:274) at com.nbpt.yygs.service.hkhxkh.impl.YygsHkhxServiceImpl.hexiao(YygsHkhxServiceImpl.java:245) at com.nbpt.yygs.service.hkhxkh.impl.YygsHkhxServiceImpl.ywyzidonghexiao(YygsHkhxServiceImpl.java:84) at com.nbpt.yygs.service.hkhxkh.impl.YygsHkhxServiceImpl$$FastClassBySpringCGLIB$$a7103f4.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) at com.nbpt.framework.aspectj.DataSourceAspect.around(DataSourceAspect.java:53) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) at com.nbpt.yygs.service.hkhxkh.impl.YygsHkhxServiceImpl$$EnhancerBySpringCGLIB$$971cc6f.ywyzidonghexiao(<generated>) at com.nbpt.yygs.service.hkhxkh.impl.YygsHkhxServiceImpl$$FastClassBySpringCGLIB$$a7103f4.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) at com.nbpt.yygs.service.hkhxkh.impl.YygsHkhxServiceImpl$$EnhancerBySpringCGLIB$$da33e29b.ywyzidonghexiao(<generated>) at com.nbpt.web.yygs.hkhxkh.YygsHkhxController.ywyzidonghexiao(YygsHkhxController.java:90) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) 13:58:03.316 [http-nio-9000-exec-15] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - [logException,194] - Resolved [java.lang.ArithmeticException: / by zero]

spring-boot+mybatis @Transactional事务管理不起作用

# 问题描述: * services代码如下,运行后第一条insert语句(小明)插入表中,第二条insert(小王)未插入表中 ``` @Service public class UserInfoServiceImpl implements IUserInfoService { @Override @Transactional public List<User> listUser() { userDao.insert(new User(100001,"小明","123","123321123")); int a = 1/0; //测试事物管理 userDao.insert(new User(400001,"小王","123","123321123")); return userDao.listUserInfo(); } } ``` # 问题背景: ## 1. spring-boot + mybatis + jdk8 ## 2. 数据库mysql,表引擎为:InnoDB,项目以普通用户连接数据库 ## 3. 事务管理已开启 ``` import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableTransactionManagement @SpringBootApplication public class SmdemoApplication { public static void main(String[] args) { SpringApplication.run(SmdemoApplication.class, args); } } ``` ## 4. services类有注解,对应方法为public,方法内容未捕获异常,该方法由外部类调用 ``` @Service public class UserInfoServiceImpl implements IUserInfoService { @Resource private UserMapper userDao; @Override @Transactional(rollbackFor=Exception.class) public List<User> listUser() { userDao.insert(new User(100001,"小明","123","123321123")); int a = 1/0; userDao.insert(new User(400001,"小明","123","123321123")); return userDao.listUserInfo(); } } ``` 在网上找到的所有方法都试过了,均无效,还请高手赐教。

springboot mybatis atomikos 事务超时未提交 求解

Transaction com.tlw.bpm.engine.atomikos.spring.jdbc.tm157010820885800001 has timed out and will rollback. 2019-10-03 21:10:59.237 ERROR 12120 --- [p-nio-80-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.CannotAcquireLockException: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction ### The error may involve com.springboot.demo.dao.primary.PrimaryStudentDao.insert-Inline ### The error occurred while setting parameters ### SQL: INSERT INTO student(id,name) VALUES (?,?) ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction ; Lock wait timeout exceeded; try restarting transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction] with root cause com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

spring + mybatis 事物不起作用,无法回滚

spring + mybatis 事物不起作用,无法回滚:求解 设置如下: <!-- proxy-target-class默认"false",更改为"ture"使用CGLib动态代理 --> <aop:aspectj-autoproxy proxy-target-class="true" /> <!-- 基于Druid数据库链接池的数据源配置 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="initialSize" value="${pool.initialSize}" /> <property name="minIdle" value="${pool.minIdle}" /> <property name="maxActive" value="${pool.maxActive}" /> <property name="maxWait" value="${pool.maxWait}" /> <property name="timeBetweenEvictionRunsMillis" value="${pool.timeBetweenEvictionRunsMillis}" /> <property name="minEvictableIdleTimeMillis" value="${pool.minEvictableIdleTimeMillis}" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="true" /> <property name="testOnReturn" value="false" /> <property name="validationQuery" value="${jdbc.validationQuery}" /> <property name="filters" value="config" /> <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${jdbc.publickey}" /> </bean> <!-- 将数据源映射到sqlSessionFactory中 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath*:mapper/*.Mapper.xml" /> <property name="configLocation" value="classpath:config/mybatis-config.xml" /> </bean> <!-- SqlSession模板类实例 --> <bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="close"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <!--======= 事务配置 Begin ================= --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- <aop:pointcut id="txPointcut" expression="execution(* com.enjoy.system.service..*(..)) or execution(* com.enjoy.commodity.service..*(..))" /> --> <aop:config> <aop:pointcut id="txPointcut" expression="(execution(* com.enjoy.system.service..*(..)) or execution(* com.enjoy.commodity.service..*(..)))" /> <aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice" /> </aop:config> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="set*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="edit*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="init*" propagation="REQUIRED" /> <tx:method name="get*" propagation="REQUIRED" read-only="true" /> <tx:method name="count*" propagation="REQUIRED" read-only="true" /> <tx:method name="find*" propagation="REQUIRED" read-only="true" /> <tx:method name="list*" propagation="REQUIRED" read-only="true" /> <tx:method name="*" read-only="true" /> </tx:attributes> </tx:advice> 求解!!

springboot + mybatis 多数据源问题

项目已经上线了,现在修改为多数据源模式 现在遇到的问题是,设置默认数据源不生效,一直用第一个,也不知道它是根据什么来选择哪个是默认数据源的 ![图片说明](https://img-ask.csdn.net/upload/201805/31/1527743096_468533.png)

springboot2.0+mybatis+jta+automatic 事物不回滚?

springboot2.0+mybatis+jta+automatic配置双数据源事物管理,配置完事物操作第二个数据源时报错事物不回滚。 运行时提示:atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@2db2fd16: WARNING: transaction manager not running? application.yml配置如下 spring: jta: enabled: true transaction-manager-id: txManager datasource: master: xa-properties: url: jdbc:mysql://127.0.0.1:3308/mytest??useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&pinGlobalTxToPhysicalConnection=true username: root password: "123456" driverClassName: com.mysql.jdbc.Driver unique-resource-name: masterDataSource xa-data-source-class-name: com.alibaba.druid.pool.xa.DruidXADataSource max-pool-size: 25 min-pool-size: 3 max-lifetime: 20000 borrow-connection-timeout: 10000 second: xa-properties: url: jdbc:mysql://127.0.0.1:3308/mytest2??useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&pinGlobalTxToPhysicalConnection=true username: root password: "123456" driverClassName: com.mysql.jdbc.Driver xa-data-source-class-name: com.alibaba.druid.pool.xa.DruidXADataSource unique-resource-name: secondDataSource max-pool-size: 25 min-pool-size: 3 max-lifetime: 20000 borrow-connection-timeout: 10000 @Configuration @MapperScan(basePackages = "com.mv.dao.master", sqlSessionTemplateRef = "masterSqlSessionTemplate") public class MasterDataSourceConfig { /** * 创建主库数据源 * @return */ @Bean(name = "masterDataSource") @ConfigurationProperties(prefix = "spring.datasource.master") @Primary public DataSource masterDataSource() { AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean(); atomikosDataSourceBean.setUniqueResourceName("masterDataSource"); return atomikosDataSourceBean; } @Configuration @MapperScan(basePackages = "com.mv.dao.second", sqlSessionTemplateRef = "secondSqlSessionTemplate") public class SecondDataSourceConfig { /** * 创建主库数据源 * @return */ @Bean(name = "secondDataSource") @ConfigurationProperties(prefix = "spring.datasource.second") public DataSource secondDataSource() { AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean(); atomikosDataSourceBean.setUniqueResourceName("secondDataSource"); return atomikosDataSourceBean; } 2019-03-20 17:24:28.459 INFO 37520 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2019-03-20 17:24:28.482 INFO 37520 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 23 ms 2019-03-20 17:24:28.523 WARN 37520 --- [nio-8080-exec-1] c.atomikos.jdbc.AtomikosConnectionProxy : atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@2db2fd16: WARNING: transaction manager not running? 2019-03-20 17:24:28.523 WARN 37520 --- [nio-8080-exec-1] c.atomikos.jdbc.AtomikosConnectionProxy : atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@2db2fd16: WARNING: transaction manager not running? 2019-03-20 17:24:28.547 WARN 37520 --- [nio-8080-exec-1] c.atomikos.jdbc.AtomikosConnectionProxy : atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@209eddac: WARNING: transaction manager not running? 2019-03-20 17:24:28.548 WARN 37520 --- [nio-8080-exec-1] c.atomikos.jdbc.AtomikosConnectionProxy : atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@209eddac: WARNING: transaction manager not running? 2019-03-20 17:24:28.548 WARN 37520 --- [nio-8080-exec-1] c.atomikos.jdbc.AtomikosConnectionProxy : atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@209eddac: WARNING: transaction manager not running? 2019-03-20 17:24:28.574 WARN 37520 --- [nio-8080-exec-1] c.atomikos.jdbc.AtomikosConnectionProxy : atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@209eddac: WARNING: transaction manager not running? 2019-03-20 17:24:28.577 WARN 37520 --- [nio-8080-exec-1] c.atomikos.jdbc.AtomikosConnectionProxy : atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@2db2fd16: WARNING: transaction manager not running? 2019-03-20 17:24:28.577 WARN 37520 --- [nio-8080-exec-1] c.atomikos.jdbc.AtomikosConnectionProxy : atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@2db2fd16: WARNING: transaction manager not running? 2019-03-20 17:24:28.625 WARN 37520 --- [nio-8080-exec-1] c.atomikos.jdbc.AtomikosConnectionProxy : atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@2db2fd16: WARNING: transaction manager not running? 2019-03-20 17:24:28.626 WARN 37520 --- [nio-8080-exec-1] c.atomikos.jdbc.AtomikosConnectionProxy : atomikos connection proxy for com.mysql.jdbc.JDBC4Connection@2db2fd16: WARNING: transaction manager not running? 2019-03-20 17:24:28.657 ERROR 37520 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing

spring boot加mybatis编程式事务在线程中回滚事务时,每隔一段时间就会提交事务

在Service层的线程方法,为了保证数据添加的正确所以加了锁。 线程里面有两个方法,为了保证添加时候数据正确,所以如果有方法出现错误就会实现事务回滚。 ``` public String ticket(Integer sdid) { if (sd_id != null) { this.stock = schedulingService.findStock(sdid); } if (this.stock > 0) { TicketInspectRecord ticketInspectRecord = new TicketInspectRecord(); ticketInspectRecord.setTir_tcr_id(1); ticketInspectRecord.setTir_tp_id(1); ticketInspectRecord.setTir_u_id(1); ticketInspectRecord.setTir_date(new Date()); Thread thread = new Thread() { @Override public void run() { synchronized (obj) { DefaultTransactionDefinition def = new DefaultTransactionDefinition(); TransactionStatus status = transactionManager.getTransaction(def); try { ticketInspectRecordDao.inTicket(ticketInspectRecord); ticketInspectRecordDao.uStock(sd_id);//这一句必报错误 msg = "true"; transactionManager.commit(status); } catch (Exception e) { e.printStackTrace(); transactionManager.rollback(status); msg = "false"; } } } }; thread.start(); try { thread.join(); }catch (InterruptedException e){ e.printStackTrace(); } } return msg; } ``` 奇怪的是在执行回滚的时候,有时候即便回滚了,方法ticketInspectRecordDao.inTicket(ticketInspectRecord)依旧会向数据库里插入数据,但是这种情况不是一直都会,项目重启的时候或者隔一段时间重新运行一次,就会出现这种情况。 研究了很久了,一直搞不明白问题在哪里

mybatis+spring手动提交事务的问题

mybatis+spring我用的是注解式声明式事务,现在想在一个业务方法中使用手动提交,但我用rollback主动回滚它还是提交了事务。请问是怎么原因![图片说明](https://img-ask.csdn.net/upload/201706/12/1497257108_421359.png)

Sping整合MyBatis后,如何关闭自动提交事务

先附上Spring配置文件的代码 ``` <!-- 创建DataSource数据源<bean>对象,用来让SqlSessionFactory<bean>对象引用 --> <bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="oracle.jdbc.OracleDriver"></property> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property> <property name="username" value="scott"></property> <property name="password" value="wjs"></property> <property name="defaultAutoCommit"><value>false</value></property> </bean> <!-- 创建SqlSessionFactory<bean>对象,用来创建SqlSessionTemplate<bean>对象. --> <bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 引用src下的MyBatis配置文件。 --> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <!-- 配置数据源,代替了MyBatis配置文件中的<environments>配置数据库连接 --> <property name="dataSource" ref="datasource"></property> </bean> <!-- 创建SqlSessionTemplate<bean>对象 --> <bean id="sst" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="ssf"></constructor-arg> </bean> <!-- 创建数据操作接口实现类,并给它的SqlSessionTemplate属性赋值 --> <bean id="empmapperimpl" class="daoImpl.EmpMapperImpl" p:ssTemplate-ref="sst"></bean> ``` 在数据源中配置了defaultAutoCommit属性为false依然是自动提交事务,这两框架整合后如何关闭自动提交事务啊,求大神帮帮忙吧!

springboot gradle mybatis MapperScan.factoryBean()异常

异常 ``` Caused by: java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean() at java.lang.reflect.Method.getDefaultValue(Method.java:612) ~[na:1.8.0_131] at org.springframework.core.annotation.AnnotationUtils.registerDefaultValues(AnnotationUtils.java:1258) ~[spring-core-5.1.2.RELEASE.jar:5.1.2.RELEASE] ``` 配置: ``` @Configuration @MapperScan(basePackages = EntMasterDataSourceConfig.BASE_PACKAGE, sqlSessionFactoryRef = "entMasterSqlSessionFactory") public class EntMasterDataSourceConfig { static final String BASE_PACKAGE = "com.sunlands.entmaster"; static final String MAPPER_LOCATION = "classpath:/*.xml"; @Value("${spring.datasource.ent_master.url}") private String dbUrl; @Value("${spring.datasource.ent_master.username}") private String dbUser; @Value("${spring.datasource.ent_master.password}") private String dbPassword; @Value("${spring.datasource.driver-class-name}") private String dbDriver; /** * 配置数据数据源 master * * @return */ @Bean(name = "entMasterDatasource") @Primary public DataSource masterDatasource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(dbDriver); dataSource.setUrl(dbUrl); dataSource.setUsername(dbUser); dataSource.setPassword(dbPassword); //连接池启动时创建的初始化连接数量 dataSource.setInitialSize(1); //连接池中可同时连接的最大的连接数 dataSource.setMaxActive(100); //连接池中最小的空闲的连接数,低于这个数量会被创建新的连接 dataSource.setMinIdle(5); //最大等待时间,当没有可用连接时,连接池等待连接释放的最大时间,超过该时间限制会抛出异常,如果设置-1表示无限等待 dataSource.setMaxWait(60000); //超过removeAbandonedTimeout时间后,是否进 行没用连接(废弃)的回收(默认为false,调整为true) dataSource.setRemoveAbandoned(true); //超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180) dataSource.setRemoveAbandonedTimeout(180); //默认提交 dataSource.setDefaultAutoCommit(true); //打开检查,用异步线程evict进行检查 dataSource.setTestWhileIdle(true); //就是在进行borrowObject进行处理时,对拿到的connection进行validateObject校验 dataSource.setTestOnBorrow(false); //就是在进行returnObject对返回的connection进行validateObject校验,个人觉得对数据库连接池的管理意义不大 dataSource.setTestOnReturn(false); // 代表检查的sql dataSource.setValidationQuery("select 1 from dual"); //代表在执行检查时,通过statement设置,statement.setQueryTimeout(validationQueryTimeout) dataSource.setValidationQueryTimeout(1); dataSource.setTimeBetweenEvictionRunsMillis(30000); return dataSource; } /** * 配置session工厂 * * @param entMasterDatasource * @return * @throws Exception */ @Bean(name = "entMasterSqlSessionFactory") @Primary public SqlSessionFactory masterSqlSessionFactory(@Qualifier("entMasterDatasource") DataSource entMasterDatasource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(entMasterDatasource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(EntMasterDataSourceConfig.MAPPER_LOCATION)); return sessionFactory.getObject(); } /** * 配置事务管理器 * * @param dataSource * @return */ @Bean(name = "entMasterTransactionManger") @Primary public DataSourceTransactionManager masterTransactionManger(@Qualifier("entMasterDatasource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } ``` gradle springboot是2.1.0 ``` dependencies { implementation('org.springframework.boot:spring-boot-starter-web') providedRuntime('org.springframework.boot:spring-boot-starter-tomcat') testImplementation('org.springframework.boot:spring-boot-starter-test') compile group: 'org.springframework.boot', name: 'spring-boot-starter', version: '2.1.0.RELEASE' compile group: 'com.alibaba', name: 'fastjson', version: '1.2.51' compile group: 'com.alibaba', name: 'druid', version: '1.1.12' compile group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc', version: '2.1.0.RELEASE' compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1' compile group: 'mysql', name: 'mysql-connector-java', version:'5.1.34' compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '1.3.2' compile group: 'org.mybatis', name: 'mybatis-spring', version: '1.3.2' compile group: 'org.springframework', name: 'spring-jdbc', version: '5.1.2.RELEASE' compile group: 'org.springframework', name: 'spring-orm', version: '5.1.2.RELEASE' compile group: 'org.mybatis', name: 'mybatis', version: '3.4.6' } ```

spring mybatis 事务隔离级别

![现在采用的是spring默认的事务隔离级别](https://img-ask.csdn.net/upload/201511/25/1448416682_185666.png) 我数据库的主键是单独存放在一张公共表里面的,里面的数据如下: 表名|当前值 table1|20 然后通过一个存储过程来每次获取递增。 我配置的是service级别的事务。我在一个service里面把要插入的数据封装到List里面,多次调用自增长主键存储过程,发发现每次获取的都是相同的值。按理说我每次调用数据库里面的值就会从20变成21,依次类推。是不是默认的事务隔离级别是不提交我的事务。等全部执行成功之后才提交事务? 我应该配置成什么隔离级别比较合适?

使用SpringBoot+MybatisPlus做了一个单个删除DOM,请问批量怎么删除呢

ContentCatService ``` //删除 public void delete(Integer id); ``` public class ContentCatServiceImpl implements ContentCatService{ ``` //删除 public void delete(Integer id){ List<Integer> idList = new ArrayList<>(); idList.add(id); contentCatMapper.deleteBatchIds(idList); } ``` public class ContentCatController { ``` //删除 private SysResult delete(@PathVariable Integer id){ try { contentCatService.delete(id); return SysResult.ok(); }catch (Exception e){ e.printStackTrace(); return SysResult.build(201,"删除失败"); } ``` 请问如果改为批量删除呢

mybatis如何实现一次性对多表的字段数据插入

看了网上说用事务,可是mybatis的xml的sql文件该如何使用事务呢

SpringBoot+Activiti5.22如何统一事务

各位大侠: 目前我在整合项目时SpringBoot1.5.2+Activiti5.22时启动项目后,activiti的mybatis的数据连接一直有问题。 我debug了下,看到ProcessEngineConfigurationImpl的init方法全部执行结束,没有报错,而且activiti也找到了DataSource,但是往下走时控制台一直刷一个日志,好像是数据连接池一直在打开和关闭。代码如下: 17:07:26.813 [Thread-8] DEBUG o.a.i.t.managed.ManagedTransaction - Opening JDBC Connection 17:07:26.815 [Thread-7] DEBUG o.a.i.t.managed.ManagedTransaction - Closing JDBC Connection [Transaction-aware proxy for target Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@457547a1]]]] 17:07:26.817 [Thread-8] DEBUG o.a.i.t.managed.ManagedTransaction - Closing JDBC Connection [Transaction-aware proxy for target Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@5f400587]]]] 17:07:36.821 [Thread-7] DEBUG o.a.i.t.managed.ManagedTransaction - Opening JDBC Connection 17:07:36.822 [Thread-8] DEBUG o.a.i.t.managed.ManagedTransaction - Opening JDBC Connection 17:07:36.823 [Thread-7] DEBUG o.a.i.t.managed.ManagedTransaction - Closing JDBC Connection [Transaction-aware proxy for target Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@5f400587]]]] 17:07:36.825 [Thread-8] DEBUG o.a.i.t.managed.ManagedTransaction - Closing JDBC Connection [Transaction-aware proxy for target Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@457547a1]] 如果我删除掉activiti的依赖包,启动项目,项目是正常的。添加上activiti的依赖包之后,就会有这个问题,但是用Junit去执行activiti的数据操作又是没有问题的。就是我项目的controller方法不能正常被访问了,访问就报404。 求大神助我。

spring-boot里面mybatis plus2.0如果实现条件删除和条件修改呢

普通修改 ``` public void update(WebUser webUser){ webUser.setUpdated(new Date()); webUsersXgMapper.updateById(webUser); } ``` 如果我想实现根据某两个字段来修改这条数据应该怎么修改 如果使用sql语句大概就是这样写,但是我想使用mybatis plus来实现 请问,应该如何实现呢 ``` update tb_cart set num = #{num}, updated = #{updated} where item_id = #{itemId} and user_id = #{userId} ```

mybatis+spring如何在事务回滚时向上层返回结果

我是这样写的,但是try catch看着很不美观,而且手动回滚使得控制事务的代码侵入了业务层。 ``` @Service public class DepartmentServiceImpl { @Autowired private DepartmentMapper DepartmentMapper; @Transactional public ServiceResult addDepartment(Department department) { try { DepartmentMapper.insert(department); return new ServiceResult(0, "添加成功"); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new ServiceResult(-1, "添加失败"); } } @Transactional public ServiceResult deleteDepartmentById(String id) { try { DepartmentMapper.deleteByPrimaryKey(id); return new ServiceResult(0, "删除成功"); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new ServiceResult(-1, "删除失败"); } } } ``` 如果用第二种写法,虽然很简洁但是不能向上层返回信息 ``` @Transactional public void addDepartment(Department department) { DepartmentMapper.insert(department); } ``` 请问有什么好的办法

spring boot事务配置问题?

用@注解配置事务时,每个方法只能配置一个事务处理器,那这个方法内操作了多个数据源时需要配置多个事务处理器,如何配置呢?求大神帮忙。 关键代码如下: @Transactional(value="repayment_dbTransactionManager") public void doTask() {}

springmvc+mybatis一次操作多张表插入的问题

如题,本人才接触Java的springmvc,前端的一次保存点击事件,后端需要分别向5张表插入数据,看了网上的demo,几乎一张表对应一个mapper,mapper里面有对应这张表的操作,五张表执行插入操作。。。任何一张出问题就回滚,自然想到用事务来控制,但是貌似网上也没有怎么看到这方面的说明。。。。目前的插入数据方式是kssryjbxxbService.insert(kssryjbxx); 这种方式,有没有事务控制可回滚的方式,比如sqlsession,sringmvc里面怎么使用sqlsession,还有就是问个额外的问题,目前开发的系统涉及到几百张表。。。都写mapper的话太麻烦了,有没有老式的直接执行sql语句的操作方式。。。而不是每张表都去建立对应的dao,mapper,service....

spring、mybatis整合多线程问题

1.在已有的spring+mybatis项目中增加了多线程访问数据库的业务,主要是查询,添加,写入到其它数据源。 2.部分需要支持多线程的service类已增加@scope("prototype"),从debug可以看到service获取到的已是不同的对象(service是线程类,获取方式通过spring上下文获取)。 3.service中注解的mapper是单例的,运行过程中经常报连接已关闭。开始的想法是在mapper接口上也加入@scope("repository")注解,结果加上后,程序启动报错。 4.现在我是直接用原始jdbc来处理可以很好的解决多线程的问题,想请教下大家在原有的框架中怎么处理才能支持多线程。 <br></br> #2018年4月8日,更新 问题已解决,在service类中注解SqlSessionFactory对象,通过openSession方法可以获取到一个SqlSession对象,然后getMapper出来的对象就是线程安全的。

学Python后到底能干什么?网友:我太难了

感觉全世界营销文都在推Python,但是找不到工作的话,又有哪个机构会站出来给我推荐工作? 笔者冷静分析多方数据,想跟大家说:关于超越老牌霸主Java,过去几年间Python一直都被寄予厚望。但是事实是虽然上升趋势,但是国内环境下,一时间是无法马上就超越Java的,也可以换句话说:超越Java只是时间问题罢。 太嚣张了会Python的人!找工作拿高薪这么简单? https://edu....

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

为什么程序猿都不愿意去外包?

分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助

Java校招入职华为,半年后我跑路了

何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

@程序员:GitHub这个项目快薅羊毛

今天下午在朋友圈看到很多人都在发github的羊毛,一时没明白是怎么回事。 后来上百度搜索了一下,原来真有这回事,毕竟资源主义的羊毛不少啊,1000刀刷爆了朋友圈!不知道你们的朋友圈有没有看到类似的消息。 这到底是啥情况? 微软开发者平台GitHub 的一个区块链项目 Handshake ,搞了一个招募新会员的活动,面向GitHub 上前 25万名开发者派送 4,246.99 HNS币,大约价...

用python打开电脑摄像头,并把图像传回qq邮箱【Pyinstaller打包】

前言: 如何悄悄的打开朋友的摄像头,看看她最近过的怎么样,嘿嘿!这次让我带你们来实现这个功能。 注: 这个程序仅限在朋友之间开玩笑,别去搞什么违法的事情哦。 代码 发送邮件 使用python内置的email模块即可完成。导入相应的代码封装为一个send函数,顺便导入需要导入的包 注: 下面的代码有三处要修改的地方,两处写的qq邮箱地址,还有一处写的qq邮箱授权码,不知道qq邮箱授权码的可以去百度一...

C++(继承):19---虚基类与虚继承(virtual)

一、菱形继承 在介绍虚继承之前介绍一下菱形继承 概念:A作为基类,B和C都继承与A。最后一个类D又继承于B和C,这样形式的继承称为菱形继承 菱形继承的缺点: 数据冗余:在D中会保存两份A的内容 访问不明确(二义性):因为D不知道是以B为中介去访问A还是以C为中介去访问A,因此在访问某些成员的时候会发生二义性 缺点的解决: 数据冗余:通过下面“虚继承”技术来解决(见下) 访问...

计算机网络——浅析网络层

一、前言 注意,关于ipv4和ipv6,ipv4是ip协议第4版本,也表示这个版本的ip一共4个字节,同样地,ipv6是ip协议第6版本,也表示这个版本的ip一共6个字节。 关于网络层使用路由器实现互联:在计算机网络的分层结构中,不同层有不同的中继设备: 计算机网络层 中继设备/中继系统 物理层 中继器、集线器Hub 数据链路层 网桥或交换机(交换机是多端口网桥,两者本质上是一个东西) 网络层 路...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

华为初面+综合面试(Java技术面)附上面试题

华为面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,华为的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共3道题目,前2题很容易就AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑。 笔试部分太久远,我就不怎么回忆了。直接将面试。 面试 如果说腾讯的面试是挥金如土...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

女朋友过生日,我花了20分钟给她写了一个代理服务器

女朋友说:“看你最近挺辛苦的,我送你一个礼物吧。你看看想要什么,我来准备。” 我想了半天,从书到鞋子到电子产品最后到生活用品,感觉自己什么都不缺,然后和她说:“你省省钱吧,我什么都不需要。” 她坚持要送:“不行,你一定要说一个礼物,我想送你东西了。” 于是,我认真了起来,拿起手机,上淘宝逛了几分钟,但还是没能想出来缺点什么,最后实在没办法了:“这样吧,如果你实在想送东西,那你就写一个代理服务器吧”...

记一次腾讯面试,我挂在了最熟悉不过的队列上……

腾讯后台面试,面试官问:如何自己实现队列?

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

立即提问
相关内容推荐