今日热议:Spring事务管理报错Transaction rolled back because it has been marked as rollback-only
事务是我们平时项目中对数据操作最为直接、常用的方式,现在无论是大小公司都离不开对事务的操作,伴随业务的提升,客户量的积累也大大增加了对事务管理的难度。
在本章节中将会讲到如下内容:
1、线上环境对roll back only 的处理2、线上环境对嵌套事务的解决方案3、11个demo分析事务失效的场景4、分布式事务5、事务也能异步1、线上环境对roll back only 的处理与产生
(资料图片)
org.springframework.dao.CannotAcquireLockException: ### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction### The error may involve xxxMapper.insert-Inline### The error occurred while setting parameters### SQL: INSERT INTO xxx### Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction; Lock wait timeout exceeded; try restarting transaction; nested exception is com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction产生原因:
事务嵌套,内层事务将异常捕获未抛出。
2、线上环境对嵌套事务的解决方案
优化点可以从以下几点进行考虑:
最为直接的方法便是去掉嵌套事务,在controller层统一决定异常处理
对于类似开发过程中,需考虑将相关方法长事务中查询方法剔除,将方法内事务缩短为最小事务
出现突发情况,应提供最为简单有效的方案,让业务正常操作,不受影响
开发应对当时的技术方案告知相关测试
在代码层面,后续代码需要前面操作事务释放锁
无需等待插入结果 直接插入后续数据
将查询放在事务外面尽量将大事务变为小事务
捕获异常 自动重试
但是短时间内我还没有时间进行整改,在不影响主流程的情况下未进行整改,但我后续才知道大错特错。
排查
@timestamp September 1st 2021, 10:20:24.637# @version 1t LOG_DATEFORMAT_PATTERN yyyy-MM-dd HH:mm:ss.SSSt LOG_LEVEL_PATTERN %5pt _id VMaGt _index applog-2021.09.01# _score 1t _type doct appindex applogt appname appt host 10.0.74.157t level ERROR# level_value 40,000t logger_name ExceptionLogCollectort message 未知异常[500] => Transaction rolled back because it has been marked as rollback-only# port 10,792t stack_trace org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-onlyat org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:873) ~[spring-tx-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:710) ~[spring-tx-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:533) ~[spring-tx-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:304) ~[spring-tx-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) ~[spring-tx-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]spring-tx-5.1.4.RELEASE.jar-org.springframework.transaction.interceptor.TransactionInterceptor#事务拦截器avatarspring事务分为声明式事务和编程式事务,若目标方法存在事务,spring会对bean生成一个代理对象,从日志来看是cglib的
入口98行springaop事务增强 TransactionAspectSupport在事务中的调用,执行代理类的目标方法触发invoke
@Nullableprotected Object invokeWithinTransaction(Method method, @Nullable Class> targetClass, final InvocationCallback invocation) throws Throwable方法为protected的,根据源代码注释解析if (txAttr == null || !(tm instanceof CallbackPreferringPlatformTransactionManager))
如果事务属性为null 且事务类型是CallbackPreferringPlatformTransactionManager进入304行commitTransactionAfterReturning(txInfo);方法
意为事务成功后执行,有异常不执行,没有事务不执行,也就是为后面的事务方法异常时没执行进行了铺垫,533行
txInfo.getTransactionManager().commit(txInfo.getTransactionStatus());事务进行commit时进行判断
如果不是进行全局事务提交 但是是RollbackOnly的话
走processRollback处理实际回滚
@Override public final void commit(TransactionStatus status) throws TransactionException { if (status.isCompleted()) { throw new IllegalTransactionStateException( "Transaction is already completed - do not call commit or rollback more than once per transaction"); } DefaultTransactionStatus defStatus = (DefaultTransactionStatus) status; if (defStatus.isLocalRollbackOnly()) { if (defStatus.isDebug()) { logger.debug("Transactional code has requested rollback"); } processRollback(defStatus, false); return; } if (!shouldCommitOnGlobalRollbackOnly() && defStatus.isGlobalRollbackOnly()) { if (defStatus.isDebug()) { logger.debug("Global transaction is marked as rollback-only but transactional code requested commit"); } 日志追踪的710行-----记住此处传true processRollback(defStatus, true); return; } processCommit(defStatus); }private void processRollback(DefaultTransactionStatus status, boolean unexpected) { try { 入参为true boolean unexpectedRollback = unexpected; try { triggerBeforeCompletion(status); if (status.hasSavepoint()) { if (status.isDebug()) { logger.debug("Rolling back transaction to savepoint"); } status.rollbackToHeldSavepoint(); } else if (status.isNewTransaction()) { if (status.isDebug()) { logger.debug("Initiating transaction rollback"); } doRollback(status); } else { // Participating in larger transaction if (status.hasTransaction()) { if (status.isLocalRollbackOnly() || isGlobalRollbackOnParticipationFailure()) { if (status.isDebug()) { logger.debug("Participating transaction failed - marking existing transaction as rollback-only"); } doSetRollbackOnly(status); } else { if (status.isDebug()) { logger.debug("Participating transaction failed - letting transaction originator decide on rollback"); } } } else { logger.debug("Should roll back transaction but cannot - no transaction available"); } // Unexpected rollback only matters here if we"re asked to fail early if (!isFailEarlyOnGlobalRollbackOnly()) { unexpectedRollback = false; } } } catch (RuntimeException | Error ex) { triggerAfterCompletion(status, TransactionSynchronization.STATUS_UNKNOWN); throw ex; } triggerAfterCompletion(status, TransactionSynchronization.STATUS_ROLLED_BACK); 日志追踪的873行 抛出异常 // Raise UnexpectedRollbackException if we had a global rollback-only marker if (unexpectedRollback) { throw new UnexpectedRollbackException( "Transaction rolled back because it has been marked as rollback-only"); } } finally { cleanupAfterCompletion(status); } }事务这里场景和传播行为相关知识点太多了,这个后续接着分析
但就此场景将伪代码贴一下
try { methodA() }catch { } @Transactional(rollbackFor = Exception.class) public methodA() { methodB() } @Transactional(rollbackFor = Exception.class) public methodB() { try { methodC() } catch { } } methodC() { 当C方法抛出异常时 }不知道大家对于rpc行为调用的接口是如何处理的,我们以前是将rpc调用的接口有Biz接收进来,进行参数处理,领域模型转换后,调取service进行内部数据处理的,但此时的接口在主流程上会伴随着另一个第三方接口的写操作,需进行事务处理,那么内层service接口为什么还要进行事务管理?在设计上理应不对rpc接口操作的service进行开放调用的,但业务上区分不同场景,不同供应商,不同酒店等对接口进行了反射调用,或者app调用,导致内层service也进行了事务操作,那么问题来了,嵌套事务时,如果内层事务注解取消不抛出
UnexpectedRollbackException,实际此方法内并没有完全执行完,
我希望是怎样的?我希望在保持事务原子性的前提,内层事务回滚则整个全局事务回滚,且不报此异常
第一种方法isGlobalRollbackOnParticipationFailure方法,让主事务来决定是否回滚,
改动成本大
而在Springaop中,被拦截的方法需要显式的抛出异常,并不能经过任何处理,这样aop才能进行回滚,默认aop是只catchruntimeException的异常 第二种方法可以在catch块里加上 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly() 手动回滚 即便上层事务发生了异常,也想要最终提交整个事务呢?如果有这样的需求的话,可以给事务管理器配置一个参数 setGlobalRollbackOnParticipationFailure(false); # 改动成本大
解决方案:在内层方法中不进行方法的try catch,有异常操作时在外层事务进行处理,且可决定是否回滚,特定的异常也再次处理
回顾:事务的失效场景(事务不生效和事务不回滚)
3、11个demo分析事务失效的场景
@Slf4j@Servicepublic class DemoService {@Autowiredprivate Test1Mapper test1Mapper;@Autowiredprivate TestMapper testMapper;@Autowiredprivate InvalidTransactionService invalidTransactionService;@Autowiredprivate ExecutorService executorService;@Autowiredprivate DemoService _self;@Autowiredprivate ValidTransactionService validTransactionService;@Autowiredprivate RequireNewTransactionService requireNewTransactionService;/******************************************************** * 事务不生效场景1 * 相当于调用this调用,没有产生代理对象调用,解决方法,自己把自己注入以后调用 ********************************************************/public void demo1() {invalidTransaction();//TODO other logic code here}@Transactionalpublic void invalidTransaction() {TestDO test = new TestDO();test.setName("11111");testMapper.insert(test);Test1DO test1 = new Test1DO();test1.setCust("2222");test1Mapper.insert(test1);throw new WMSException(ErrorCodeEnum.BD10001001.code(),"事务不生效场景1");}/******************************************************** * 事务不生效场景二 * 这个例子的目的是为了catch住内层事务的异常,让外层事务成功,但是实际上没有内外层事务都回滚了 * * 这里A和B都受事务控制,并且是处于同一个事务的。 * A调用B,A中抓了B的异常,当B发生异常的时候,B的操作应该回滚,但是A吃了异常,A方法中没有产生异常,所以A的操作又应该提交,二者是相互矛盾的。 * spring的事务关联拦截器在抓到B的异常后就会标记rollback-only为true,当A执行完准备提交后,发现rollback-only为true,也会回滚,并抛出异常告诉调用者。 * * 报错提示:Transaction rolled back because it has been marked as rollback-only * * 如果想使外层事务生效可以把内层事务传播特性修改为:@Transactional(propagation = Propagation.REQUIRES_NEW) * ********************************************************/@Transactionalpublic void demo2() {TestDO test = new TestDO();test.setName("3333");testMapper.insert(test);try {invalidTransactionService.transaction();}catch (Exception e) {log.error("服务异常,异常被捕获", e);}}/******************************************************** * 事务不生效场景三 * * 因为开了线程异步执行,等于事务完全在两个线程内,不在一个线程,所以即使抛错,也是一个生效一个不生效, * 事务没有回滚 * ********************************************************/@Transactionalpublic void demo3() {TestDO test = new TestDO();test.setName("5555");testMapper.insert(test);executorService.execute(() -> {Test1DO test1 = new Test1DO();test1.setCust("6666");test1Mapper.insert(test1);});throw new WMSException(ErrorCodeEnum.BD10001001.code(),"事务不生效场景3");}/******************************************************** * 事务不生效场景八 * Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked,如果遇到checked意外就不回滚。 * Exception包含RuntimeException体系和其他非RuntimeException的体系 * Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 * spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作 * * *那么什么是检查型异常什么又是非检查型异常呢? * 1.继承自runtimeexception或error的是非检查型异常,而继承自exception的则是检查型异常(当然,runtimeexception本身也是exception的子类)。 * 2.对非检查型类异常可以不用捕获,而检查型异常则必须用try语句块进行处理或者把异常交给上级方法处理总之就是必须写代码处理它。所以必须在service捕获异常,然后再次抛出,这样事务方才起效。 * * @throws IOException * ********************************************************/@Transactionalpublic void demo8() throws IOException {TestDO test = new TestDO();test.setName("11111");testMapper.insert(test);Test1DO test1 = new Test1DO();test1.setCust("2222");test1Mapper.insert(test1);throw new IOException("事务不生效场景8");}/******************************************************** * 事务不生效场景九 * @throws IOException * ********************************************************/public void demo9(){invalidTransaction2();}@Transactionalprivate void invalidTransaction2() {TestDO test = new TestDO();test.setName("11111");testMapper.insert(test);Test1DO test1 = new Test1DO();test1.setCust("2222");test1Mapper.insert(test1);throw new WMSException("事务不生效场景9");}/******************************************************** * 事务生效场景1 * ********************************************************/public void demo4() {_self.invalidTransaction();//TODO other logic code here}/******************************************************** * 事务生效场景二 * * 因为内层没有事务控制,所以内层报错,不会混回滚,同样外层catch住,所以外层业务成功 ********************************************************/@Transactionalpublic void demo5() {TestDO test = new TestDO();test.setName("7777");testMapper.insert(test);try {validTransactionService.transaction();}catch (Exception e) {log.error("服务异常,异常被捕获", e);}}/******************************************************** * 事务生效场景三 * *内层事务配置的是REQUIRES_NEW,表示自己用自己的,不和外层有牵连,内层如果报错,事务会回滚 * 外层如果catch住了,就可以正常执行,外层生效,内层回滚 ********************************************************/@Transactionalpublic void demo6() {TestDO test = new TestDO();test.setName("9999");testMapper.insert(test);try {requireNewTransactionService.transactionWithException();}catch (Exception e) {log.error("服务异常,异常被捕获", e);}}/******************************************************** * 独立事务 * 内外层事务独立,内层操作未报错,事务正常执行,外层有错,事务回滚。 ********************************************************/@Transactionalpublic void demo7() {TestDO test = new TestDO();test.setName("9999");testMapper.insert(test);requireNewTransactionService.transaction();throw new WMSException(ErrorCodeEnum.BD10001001.code(),"独立事务");}}4、分布式事务以及分布式事务嵌套
一次业务操作需要跨多个数据源或需要垮多个系统进行远程调用,就会产生分布式事务问题
全局事务一致性问题
全局事务id+三组件 tc+tm+rm
Seata(AT 模式)的默认全局隔离级别是 读未提交(Read Uncommitted)
Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来。
AT模式 默认
TCC模式
XA模式
SAGA模式 长事务解决方案
XID 由ip 端口号 加全局事务id生成
关于分布式事务,工程领域主要讨论的是强一致性和最终一致性的解决方案。典型方案包括:
两阶段提交(2PC, Two-phase Commit)方案
eBay 事件队列方案
TCC 补偿模式
缓存数据最终一致性
一致性理论
分布式事务的目的是保障分库数据一致性,而跨库事务会遇到各种不可控制的问题,如个别节点永久性宕机,像单机事务一样的ACID是无法奢望的。另外,业界著名的CAP理论也告诉我们,对分布式系统,需要将数据一致性和系统可用性、分区容忍性放在天平上一起考虑。
两阶段提交协议(简称2PC)是实现分布式事务较为经典的方案,但2PC 的可扩展性很差,在分布式架构下应用代价较大,eBay 架构师Dan Pritchett 提出了BASE 理论,用于解决大规模分布式系统下的数据一致性问题。BASE 理论告诉我们:可以通过放弃系统在每个时刻的强一致性来换取系统的可扩展性。
CAP理论在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)3 个要素最多只能同时满足两个,不可兼得。
其中,分区容忍性又是不可或缺的。
avatar
一致性:分布式环境下多个节点的数据是否强一致。可用性:分布式服务能一直保证可用状态。当用户发出一个请求后,服务能在有限时间内返回结果。分区容忍性:特指对网络分区的容忍性。举例:Cassandra、Dynamo
等,默认优先选择AP,弱化C;HBase、MongoDB 等,默认优先选择CP,弱化A。
BASE理论核心思想:
基本可用(BasicallyAvailable):指分布式系统在出现故障时,允许损失部分的可用性来保证核心可用。
软状态(SoftState):指允许分布式系统存在中间状态,该中间状态不会影响到系统的整体可用性。
最终一致性(EventualConsistency):指分布式系统中的所有副本数据经过一定时间后,最终能够达到一致的状态。
一致性模型数据的一致性模型可以分成以下 3 类:强一致性:数据更新成功后,任意时刻所有副本中的数据都是一致的,一般采用同步的方式实现。 弱一致性:数据更新成功后,系统不承诺立即可以读到最新写入的值,也不承诺具体多久之后可以读到。 最终一致性:弱一致性的一种形式,数据更新成功后,系统不承诺立即可以返回最新写入的值,但是保证最终会返回上一次更新操作的值。 分布式系统数据的强一致性、弱一致性和最终一致性可以通过Quorum NRW算法分析。分布式事务解决方案2PC方案——强一致性2PC的核心原理是通过提交分阶段和记日志的方式,记录下事务提交所处的阶段状态,在组件宕机重启后,可通过日志恢复事务提交的阶段状态,并在这个状态节点重试,如Coordinator重启后,通过日志可以确定提交处于Prepare还是PrepareAll状态,若是前者,说明有节点可能没有Prepare成功,或所有节点Prepare成功但还没有下发Commit,状态恢复后给所有节点下发RollBack;若是PrepareAll状态,需要给所有节点下发Commit,数据库节点需要保证Commit幂等。avatar2PC方案的问题:同步阻塞。数据不一致。单点问题。升级的3PC方案旨在解决这些问题,主要有两个改进:增加超时机制。两阶段之间插入准备阶段。但三阶段提交也存在一些缺陷,要彻底从协议层面避免数据不一致,可以采用Paxos或者Raft算法。eBay 事件队列方案——最终一致性eBay 的架构师Dan Pritchett,曾在一篇解释BASE 原理的论文《Base:An AcidAlternative》中提到一个eBay分布式系统一致性问题的解决方案。它的核心思想是将需要分布式处理的任务通过消息或者日志的方式来异步执行,消息或日志可以存到本地文件、数据库或消息队列,再通过业务规则进行失败重试,它要求各服务的接口是幂等的。描述的场景为,有用户表user和交易表transaction,用户表存储用户信息、总销售额和总购买额,交易表存储每一笔交易的流水号、买家信息、卖家信息和交易金额。如果产生了一笔交易,需要在交易表增加记录,同时还要修改用户表的金额。avatar论文中提出的解决方法是将更新交易表记录和用户表更新消息放在一个本地事务来完成,为了避免重复消费用户表更新消息带来的问题,增加一个操作记录表updates_applied来记录已经完成的交易相关的信息。这个方案的核心在于第二阶段的重试和幂等执行。失败后重试,这是一种补偿机制,它是能保证系统最终一致的关键流程。
TCC (Try-Confirm-Cancel)补偿模式——最终一致性
某业务模型如图,由服务 A、服务B、服务C、服务D 共同组成的一个微服务架构系统。服务A 需要依次调用服务B、服务C 和服务D
共同完成一个操作。当服务A 调用服务D 失败时,若要保证整个系统数据的一致性,就要对服务B 和服务C 的invoke
操作进行回滚,执行反向的revert 操作。回滚成功后,整个微服务系统是数据一致的。
avatar
实现关键要素:服务调用链必须被记录下来。每个服务提供者都需要提供一组业务逻辑相反的操作,互为补偿,同时回滚操作要保证幂等。必须按失败原因执行不同的回滚策略。
缓存数据最终一致性
在我们的业务系统中,缓存(Redis 或者Memcached)通常被用在数据库前面,作为数据读取的缓冲,使得I/O
操作不至于直接落在数据库上。以商品详情页为例,假如卖家修改了商品信息,并写回到数据库,但是这时候用户从商品详情页看到的信息还是从缓存中拿到的过时数据,这就出现了缓存系统和数据库系统中的数据不一致的现象。
要解决该场景下缓存和数据库数据不一致的问题我们有以下两种解决方案:为缓存数据设置过期时间。当缓存中数据过期后,业务系统会从数据库中获取数据,并将新值放入缓存。这个过期时间就是系统可以达到最终一致的容忍时间。更新数据库数据后同时清除缓存数据。数据库数据更新后,同步删除缓存中数据,使得下次对商品详情的获取直接从数据库中获取,并同步到缓存。
常用组件: Seata,Sega,Atomikos
avatar
TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
avatar
安装
关键注解全局@GlobalTranstional
1.更改事务组名称service
2.store更改mode 修改db
3.执行sql
4.修改注册进nacos
5.启动seata-server.bat
如何保证分布唯一全局id的生成
5、分布式事务异步方案
看下分布式事务的异步问题,根据事务的xid搭配future在切面里对注解进行处理,实现异步+分布式事务的并存
注意事项
这个依赖只是用来解决部分问题,不是解决全部问题
这个仅用于TM端,不要用来RM端(其实要实现RM端的话,可以仿照SeataAsyncAspect,写一个aspect,很简单的)
不要进行事务嵌套,不支持事务嵌套!!!
确保异步的多个操作之间是没有先后顺序的
这个是一个私人包装处理,仅供参考,还未应用到生产环境
—-待续
- 今日热议:Spring事务管理报错Transaction rolled back because it has been marked as rollback-only
- 情人节:你陪我一程,我惦记一生 当前速读
- 关于我发现了什么作文精选5篇_时讯
- 苹果手机进水怎么办法拿到照片_苹果手机进水怎么办_当前速递
- 财政预算管理论文(2) 每日消息
- 外媒:福特公司将在欧洲裁员3800人
- 怙恶不悛是什么意思_怙恶不悛的意思大全 世界速读
- 民生银行将于2月15日起调整6款代销基金产品风险等级 涉及富国、工银瑞信、英大等基金公司
- 全球新动态:酒泉硅碳产业园一期投产暨二期开工仪式举行
- 新生代表发言稿
- 热搜第一!美版“切尔诺贝利”?俄亥俄州到底发生了什么
- 世界速递!内蒙古自治区鄂尔多斯市康巴什区——共议民生事 共商解难题
- 新资讯:拉丁舞健美操的特点和作用
- 安徽招生考试网电话_安徽招生考试网-当前速看
- 6类防渗漏防空鼓常见质量病害和处理办法
- 帅丰电器(605336)2月14日9点33分触及涨停板-天天简讯
- 花呗多少钱可以分期,花呗如何分期还款
- 朋友生日送什么比较好女性朋友_焦点快看
- 焦点报道:白冰淇淋怎么洗
- 天天百事通!校区划分_校区英文
- 动物胶是什么东西-世界短讯
- 环球滚动:冬天吃什么食物最好_关于冬天吃 哪些食物最好
- 金针菜是不是黄花菜_金针菜和黄花菜的区别 环球观察
- 我爱你三千遍是什么意思
- 城中村水电气乱涨价将有明确罚则 深圳市人大常委会2022年三件重点建议办理取得阶段性成效
- 3月8号送女性什么礼物|天天快看
- 世界看点:今日白银价格行情查询(2023年2月13日)
- 全球观焦点:杭州市中心这处夜景焕新亮相 速来围观!
- 健康老人有了新“国标”,9个标准您满足几个?
- 皇马官网盘点世俱杯:算上前身洲际杯,俱乐部共8次夺冠
- 天天看热讯:如何判断三文鱼坏了 如何判断三文鱼是否变质
- 惠享山东活动多 世界新消息
- 费用省一半甚至更多?河南省规范整合口腔种植医疗服务价格 全球热资讯
- 讲座笔记:现实的理想主义与不完美的完美主义-全球头条
- 头条:难忘的校园生活作文300字三年级_难忘的校园
- 快播:老板拖欠工资不发去劳动局投诉会怎么样
- 自查自纠补短板,提高垃圾分类工作实效
- 环球简讯:大方县人民检察院依法对吴光明决定逮捕
- 家庭理财方法知道这七个定律_家庭理财方法 热点聚焦
- 焦点消息!政治参与的作用主要表现在哪些_政治参与的作用主要表现在_
- 千人斩男优清水健情断4年婚,美女作家妻证实带儿分居
- 今日快看!北京市印发全面打赢城乡水环境治理歼灭战三年行动方案
- 拼多多下单全返40元是真的吗?规则是什么?_全球百事通
- 天问一号火星环绕器“上岗”两周年 持续开展多维度探测
- 商业新闻稿怎么写更能吸引人_每日快讯
- 到2027年浙江年最低生活保障年标准达到14000元以上
- 今日讯!饭店反向抹零多收1毛被罚4500元!不差这一毛但为啥给你??
- 这个河南小城何以成为“钻石之都”_全球时讯
- 开学季将近,浦东交警开展集中校车“体检”
- 白虎庙|环球即时看
-
燃气安检进小区 居民用上“放心气” 每日热门
为确保辖区居民用气安全,近日,长垣新长燃气公司领导班子成员分别带领检查组成员,深入新交付小区,对...
-
天天即时看!活性碳能去甲醛吗
活性碳能去甲醛吗,很多人认为用活性炭除甲醛没什么效果,其实,造成活性炭除甲醛效果不明显的原因是活性...
-
天天热讯:联合国安理会就反恐局势举行公开会
央视新闻客户端当地时间9日,联合国安理会就反恐局势举行公开会。联合国反恐事务副秘书长沃伦科夫在通报...
-
二十六万购房款换礼品
二十六万购房款换礼品,在市场上打开礼品包,你可以去看看,选择一个适合的地方,有一定的,有一个地方...
-
如何制作万花筒-世界速看
如何制作万花筒,万花筒作为一种奇特的观察体验玩具,受到广泛喜爱,本次小编就如何制作万花筒进行介绍。
-
家“锂”有矿,究竟是多有钱?张氏家族样本来了 资讯推荐
2月9日,上海证券报发布《起底张氏家族锂矿“盛宴”》提及,位于“亚洲锂都”宜春的张氏家族,手握6座锂...
-
日全食有几次_日全食几年一次
1、日食几乎年年都会有,但只是日食带经过的地方不同。2、同一个地方平均400年一次日全食。3、日食一定...
-
最新快讯!药补不如食补,这几种食品预防癌症,摄生人士可得看看!
上期科普,小鲜分享了日常生活常见的一级致癌物。实在在我们日常生活中,有很多食品就具有预防癌症的功...
-
蝎男眼中的蝎女 蝎男眼中的蝎女是什么样
天蝎男眼中的天蝎女:1、比自己强:天蝎男会很欣赏那种很有能力,甚至有时候比自己还要强,还要厉害的人...
-
县政府召开第三次全体会议暨廉政工作会议-世界今头条
县政府召开第三次全体会议暨廉政工作会议
-
东昌路|环球热门
1、上海浦东东昌路,是一条长约1 5公里的东西向的公路(街道),东连浦东南路,西至东昌路渡口。2、东...
-
心烦意乱心情说说_天天时讯
1、如果这不是爱情,我就没有悲伤。感谢您的慷慨。我活该。2、有时,你选择与某人保持距离,不是因为你...
-
15-20万燃油SUV终结者,零跑C11增程预售价15.98万元起!
2月9日,零跑汽车首款增程车型零跑C11增程正式亮相,并同步开启预售。零跑汽车高级副总裁曹力现场公布预...
-
天天新动态:南京玄武湖明梅位置在哪里
玄武湖600岁古梅位于梁洲,在梁洲的中心,中间道路上单独摆放。古代明梅至今已有600多年历史,是玄武湖...
-
天天热点评!李白关于云_腾云李白
1、《腾云》马腾驾祥云,航行阔海郡。2、失于蓬莱阁,踪迹无处寻。3、由于马航失踪事件的影响,这首诗的...
-
热点!王府井(600859)2月9日主力资金净买入2139.92万元
截至2023年2月9日收盘,王府井(600859)报收于27 57元,上涨1 73%,换手率1 07%,成交量11 7万手,成交额3 21亿元。
-
苏州地区建行生活APP加油券领取时间|全球动态
领取时间:2023年2月3日至2023年2月28日每周五09:30开领参与条件:开通建行龙支付或建行生活钱包支付,...
-
今亮点!魔兽世界的安装 六个方法教你解决问题
检查网络:首先检查下是否是网络问题,是不是断网导致的游戏无法连接,或者是网速较卡所导致的。安装目...
-
理想将开放智能驾驶测试,相关概念走强,科创板鸿泉物联拉升涨超15%
2月9日上午,智能驾驶概念股早盘走强,科创板鸿泉物联拉升涨超15%,秋田微、科大国创、腾景科技、永新光...
-
3DOM-MgFexAl2-xO4催化剂可控制备及其乙苯与CO2氧化脱氢性能研究
1、《3DOM-MgFexAl2-xO4催化剂可控制备及其乙苯与CO2氧化脱氢性能研究》是依托大连理工大学,由纪敏担
-
以家人之名什么时候更新 以家人之名简介 要闻速递
1、《以家人之名》将在8月10日开始播出,其播出平台为湖南卫视,每周一至周四更新两集,每周五至周日更...
-
中金公司:看好2023年A/H股黄金板块配置机遇 环球报道
中金公司:看好2023年A H股黄金板块配置机遇,金价,中金公司,a h股,黄金板块,人民币贬值,人民币汇率
-
每日速递:一天研究一个行业:中国环境咨询服务行业市场深度分析
原文标题:2023年全球及中国环境咨询服务行业发展分析,环保意识的增强行业发展前景良好「图」一、环境...
-
环球热资讯!永安桃源洞导游词
各位远道而来的朋友:一路辛苦了,欢迎你们!我来自***旅行社,很荣幸能为各位服务。为我们驾车的师傅姓...
-
世界新消息丨社区健康知识讲座内容有哪些_社区健康知识讲座内容
1、健康讲座的内容:宣传普及《中国公民健康素养—基本知识与技能》。2、2、居民健康教育:合理营养、加...
-
BackBerner-今日热讯
1、《BackBerner》是由GeorgeKightly、DarrinOakley等执导的喜剧类电影,由Mic
-
2016广东高考录取分数线公布-天天简讯
2016广东高考录取分数线最新公布,一本文514理508二本文417理402,下面小编为大家带来2016年广东高考分...
-
俄语 乌拉是啥意思_俄语乌拉什么意思
1、乌拉是俄语中表达强烈情感的语气词在不同的背景表达的含义也不同。在战场上士兵冲锋的时候喊乌拉,就...
-
天天微动态丨俄罗斯留学最新申请条件一览2022
中俄关系随着“一带一路”国家发展战略日益紧密,国内俄语人才缺口巨大,在俄罗斯受过高等教育的高素质毕...
-
解除房屋买卖合同要注意什么? 通讯
根据《民法典》第五百六十二条,当事人协商一致,可以解除合同。当事人可以约定一方解除合同的事由。解...
-
商住楼能不能办营业执照 当前快看
一、商住楼能不能办营业执照商住楼能办营业执照,办理营业执照都要有商用或者是商住房房产才可以,但是...
-
重庆铁警深入企业开展防范电信网络诈骗宣传 全球热点评
图为派出所民警在辖区企业周边开展夜间集中清查行动。重庆2月7日电农历正月十五元宵节过后,各行各业正...
-
一个消防中队有几个人 世界聚看点
消防队是对公安消防部队的各级队伍、企业专职消防队、义务消防队的统称。公安消防队和专职消防队接到火...
-
亚马逊上还有一款Apple Watch Series 4降价55美元
AppleWatchSeries4显然是该公司有史以来最好的AppleWatch型号。与早期版本相比,它闪电般快速,并且它还...
-
当前快报:海口市人民医院组织医务人员爱心献血 缓解节后用血紧张
海口市人民医院组织医务人员爱心献血缓解节后用血紧张
-
医院个人工作总结 世界时快讯
医院个人工作总结范文(通用16篇)当工作进行到一定阶段或告一段落时,需要回过头来对所做的工作认真地...
-
梅花迎春花争艳报春晓|当前快报
-
环球快消息!澳门美食攻略一日游_澳门美食攻略
1、亚苏厨房。2、是专门做越南菜的一家餐厅,最有名的是越南的生牛河,就是把生的牛肉放入滚烫的汤里,...
-
15岁"裸跑弟"何宜德获博士后入站通知书分享心得
【解说】近日,15岁的南京学生何宜德通过自己的努力,收到了来自英国剑桥大学博士后的入站通知书。【解...
-
观看五四精神传承有我主题心得体会 世界聚看点
观看五四精神传承有我主题心得体会(通用6篇)当我们对人生或者事物有了新的思考时,通常就可以写一篇心...
-
环球热点评!Lauren芭蕾平底鞋
1、Lauren芭蕾平底鞋是克洛伊品牌旗下的一款产品。文章到此就分享结束,希望对大家有所帮助。
-
午马去世成龙抬棺 午马和成龙究竟是什么关系?
2014年4月著名的演员午马去世,说起午马可能很多人都不知道他是谁,但其实午马在演艺圈几十年,拍过很多...
-
恩施州环保局官网_恩施州环保局
1、恩施州环保局在舞阳大道1巷23号,靠近恩施亚洲大酒店、州水利水产局,可以从西向东通过清江大桥,在...
-
全球热讯:p-Grushin算子及其方程的研究
1、《p-Grushin算子及其方程的研究》是依托华中师范大学。2、由彭双阶担任项目负责人的数学天元基金项目...
-
COS1°_かくしデレ-今日要闻
1、羊绒或梳河2翻译是这个意思,你看看有没有点灵感**********************************
-
《一件令我感动的事》开头结尾_令我感动的一件事开头结尾_环球滚动
1、开头:在成长过程中,有许多令我感动的事,它们就像一颗颗闪亮的小星星,今天,我挑最亮的一颗来与你分享...
-
世界快资讯:三体获得过什么奖项
三体获得过什么奖项,1、第一部《三体》:2006第十八届中国科幻银河奖特别奖。2、第二部《黑暗森林》无...
-
机关单位个人工作总结范文_机关单位个人工作总结|环球关注
1、总结,就是把一个时间段的情况进行一次全面系统的总检查、总评价、总分析、总研究,分析成绩、不足、...
-
世界热资讯!小偷高铁上偷5000元,被民警拍下盗窃全过程
1月28日,D3201次列车上,一名穿黑衣、背黑包的男子引起南京铁路公安处反扒民警的注意
-
全职法师小泥鳅的真身_全职法师莫凡有几个系
1、莫凡每次觉醒都会觉醒至少两系全部魔法系:雷系、火系(第一次觉醒),暗影系、召唤系(第二次觉醒)...
X 关闭
X 关闭






