最新要闻
- 今日热门!Stable Diffusion模型发布新版本:生成图像以假乱真
- 钻石价格,突发“跳水”!未来还会更便宜?
- 泰坦号事故后:加拿大将展开事故调查
- 车主自曝差点被闷死在特斯拉Model X里 车门锁死 原因揭晓
- 蔡徐坤巡演新加坡站开票 《Hug me(remix版)》同日上线
- 每日简讯:4亿票房端午黑马:《消失的她》官宣海外定档
- 冲入球场拥抱梅西小伙获释后道歉:我真不是没素质的人
- 世界观天下!新会绿美生态园票价(新会绿美生态园票价多少钱)
- 腾讯两大国民APP账号又打通了?QQ悄然支持微信登陆 环球精选
- 环球快报:调查称安卓更易上手:iPhone用户遇到问题概率高出58%
- 环球热资讯!Zen3清库存?突然冒出个很特别的锐龙5 5700
- 虚幻5打造!腾讯动漫《斗罗大陆2》今日两集首播 霍雨浩初入星斗大森林|每日观察
- “空中出租车”亮相巴黎航展:可降落空间直径仅需15米-环球速递
- 古力娜扎曾遭换脸视频威胁勒索:不给钱就毁了你!
- 男生单曲循环《好运来》查出593分大哭:比平时多出50分 超常发挥
- 全球钻石价格较峰值暴跌18%:人造钻石市场规模不断扩大_全球视点
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Apollo2.1.0+Springboot使用OpenApI
(资料图片)
依赖管理
org.springframework.cloud spring-cloud-starter-bootstrap 3.1.3 com.ctrip.framework.apollo apollo-client 2.1.0 com.ctrip.framework.apollo apollo-openapi 2.1.0
application.properties
# Apolloapp.id=MORE-USER-USEapollo.cache-dir=./ManyUser/apollo/cacheapollo.bootstrap.enabled=true#apollo.bootstrap.namespaces=application.propertiesapollo.meta=http://localhost:8080apollo.bootstrap.eagerLoad.enabled=trueapollo.config-service=http://localhost:8080env=DEVapollo.use.admin.token=809d168da6f3baa39c02c1d376a0cc9cec852fa0fa8c6e2cff9b33e276d3738aapollo.use.portal.url=http://localhost:8070
apollo-env.properties
dev.meta=http://localhost:8080
启动类 加入 @EnableApolloConfig
/** * @description: 启动类 * @author: GuoTong * @createTime: 2023-06-21 20:31 * @since JDK 1.8 OR 11 **/@SpringBootApplication@EnableApolloConfigpublic class AppStartClass { public static void main(String[] args) { SpringApplication.run(AppStartClass.class, args); }}
常规配置中心集成使用
package com.gton.user.config;import com.ctrip.framework.apollo.model.ConfigChangeEvent;import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;import com.gton.user.io.Resp;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import java.util.ArrayList;import java.util.List;/** * @description: Apollo同时还增加了几个新的Annotation来简化在Spring环境中的使用。 * @author: GuoTong * @createTime: 2023-06-24 12:30 * @since JDK 1.8 OR 11 **/@Component@Slf4jpublic class MyApolloConfig { /** * ApolloJsonValue annotated on fields example, the default value is specified as empty list - [] *
* jsonBeanProperty=[{"someString":"hello","someInt":100},{"someString":"world!","someInt":200}] */ @ApolloJsonValue("${jsonBeanProperty:[]}") private List anotherJsonBeans = new ArrayList<>(); @Value("${batch:100}") private String batch; //config change listener for namespace application @ApolloConfigChangeListener(value = "application") private void apolloChange(ConfigChangeEvent changeEvent) { //update injected value of batch if it is changed in Apollo if (changeEvent.isChanged("batch")) { batch = changeEvent.getChange("batch").getNewValue(); } log.info(changeEvent.getNamespace() + "变化的key=>" + changeEvent.changedKeys() + ";==1"); } @ApolloConfigChangeListener(value = "order") private void someOnChange(ConfigChangeEvent changeEvent) { //update injected value of batch if it is changed in Apollo if (changeEvent.isChanged("anotherJsonBeans")) { log.info(changeEvent.getChange("anotherJsonBeans").getOldValue()); log.error(changeEvent.getChange("anotherJsonBeans").getNewValue()); } log.info(anotherJsonBeans.toString()); log.info(changeEvent.getNamespace() + "变化的key=>" + changeEvent.changedKeys() + ";==1"); }}
Apollo 的开放平台使用
package com.gton.user.handler;import com.ctrip.framework.apollo.openapi.client.ApolloOpenApiClient;import com.ctrip.framework.apollo.openapi.dto.NamespaceReleaseDTO;import com.ctrip.framework.apollo.openapi.dto.OpenAppNamespaceDTO;import com.ctrip.framework.apollo.openapi.dto.OpenItemDTO;import com.ctrip.framework.apollo.openapi.dto.OpenPageDTO;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.apache.commons.lang3.StringUtils;import org.springframework.core.io.ClassPathResource;import java.io.IOException;import java.io.InputStream;import java.util.List;import java.util.Properties;/** * @description: Apollo开放平台操作 * @author: GuoTong * @createTime: 2023-06-24 14:10 * @since JDK 1.8 OR 11 **/public class ApolloOpenApiOperator { private ApolloOpenApiClient apolloOpenApiClient; private static ApolloOpenApiOperator apolloOpenApiOperator = null; public static ApolloOpenApiOperator getApolloOpenApiOperator() throws IOException { if (apolloOpenApiOperator == null) { synchronized (ApolloOpenApiOperator.class) { if (apolloOpenApiOperator == null) { return new ApolloOpenApiOperator(); } } } return apolloOpenApiOperator; } public ApolloOpenApiOperator(ApolloOpenApiClient apolloOpenApiClient) { this.apolloOpenApiClient = apolloOpenApiClient; } public ApolloOpenApiOperator() throws IOException { initApolloOpenApiOperator(); } private void initApolloOpenApiOperator() throws IOException { // 获取配置文件 ClassPathResource classPathResource = new ClassPathResource("application.properties"); InputStream inputStream = classPathResource.getInputStream(); // 使用properties加载 Properties properties = new Properties(); properties.load(inputStream); String token = properties.getProperty("apollo.use.admin.token"); String portalUrl = properties.getProperty("apollo.use.portal.url"); if (StringUtils.isNotEmpty(token)) { this.apolloOpenApiClient = ApolloOpenApiClient .newBuilder(). withConnectTimeout(60000). withToken(token). withPortalUrl(portalUrl). withReadTimeout(60000) .build(); } } public ApolloOpenApiClient getApolloOpenApiClient() { return this.apolloOpenApiClient; } /** * Description: 创建NamSpace * * @param openAppNamespaceKey * @author: GuoTong * @date: 2023-06-24 15:04:44 * @return:void */ public void crateNameSpace(OpenAppNamespaceKey openAppNamespaceKey) { OpenAppNamespaceDTO openAppNamespaceDTO = new OpenAppNamespaceDTO(); openAppNamespaceDTO.setAppId(openAppNamespaceKey.getAppId()); openAppNamespaceDTO.setName(openAppNamespaceKey.getSpaceName()); openAppNamespaceDTO.setComment(openAppNamespaceKey.getSpaceDesc()); openAppNamespaceDTO.setPublic(openAppNamespaceKey.spaceIsPub); apolloOpenApiClient.createAppNamespace(openAppNamespaceDTO); } /** * Description: 下发Apollo * * @param doIssueApolloKey * @author: GuoTong * @date: 2023-06-24 14:35:52 * @return:void */ public void doIssueApollo(DoIssueApolloKey doIssueApolloKey) { OpenItemDTO openItemDTO = new OpenItemDTO(); openItemDTO.setKey(doIssueApolloKey.getKey()); openItemDTO.setValue(doIssueApolloKey.getValue()); openItemDTO.setComment(doIssueApolloKey.getDesc()); openItemDTO.setType(doIssueApolloKey.handlerValueType(doIssueApolloKey.getValueType())); openItemDTO.setDataChangeCreatedBy(doIssueApolloKey.getOperator()); if (doIssueApolloKey.isModifiedOrInsert()) { openItemDTO.setDataChangeLastModifiedBy(doIssueApolloKey.getOperator()); } // 下发到Apollo apolloOpenApiClient.createOrUpdateItem( doIssueApolloKey.getAppId(), doIssueApolloKey.getEnv(), doIssueApolloKey.getClusterName(), doIssueApolloKey.getNamespaceName(), openItemDTO ); } /** * Description: 发布整个NameSpace;推荐下发完成之后统一调一次,不要多次的下发操作,每一次下发都调用 * * @param publishApolloKey * @author: GuoTong * @date: 2023-06-24 14:56:43 * @return:void */ public void executorPublish(PublishApolloKey publishApolloKey) { // apollo下发的数据执行发布 NamespaceReleaseDTO namespaceReleaseDTO = new NamespaceReleaseDTO(); //配置版本名称 namespaceReleaseDTO.setReleaseTitle(publishApolloKey.getReleaseTitle()); // 发布说明 namespaceReleaseDTO.setReleaseComment(publishApolloKey.getReleaseDescription()); // 操作员 namespaceReleaseDTO.setReleasedBy(publishApolloKey.getReleaseOperator()); apolloOpenApiClient.publishNamespace(publishApolloKey.getAppId(), publishApolloKey.getEnv(), publishApolloKey.getClusterName(), publishApolloKey.getNamespaceName(), namespaceReleaseDTO); } /** * Description: 移除Apollo的配置 * String appId, String env, String clusterName, String namespaceName, String key, * String operator * * @param removeKeys * @author: GuoTong * @date: 2023-06-24 15:27:07 * @return:void */ public void executorRemove(DoIssueApolloKey removeKeys) { apolloOpenApiClient.removeItem(removeKeys.getAppId(), removeKeys.getEnv(), removeKeys.getClusterName(), removeKeys.getNamespaceName(), removeKeys.getKey(), removeKeys.getOperator()); } /** * queryApolloKey many * * @param baseApolloKey * @author: GuoTong * @date: 2023-06-24 14:56:43 * @return:void */ public List queryApolloKey(BaseApolloKey baseApolloKey, int page, int size) { if (page <= 1) { page = 0; } if (size <= 0) { size = 10; } OpenPageDTO itemsByNamespace = apolloOpenApiClient.findItemsByNamespace(baseApolloKey.getAppId(), baseApolloKey.getEnv(), baseApolloKey.getClusterName(), baseApolloKey.getNamespaceName(), page, size); List content = itemsByNamespace.getContent(); return content; } /** * queryApolloKey one * * @param baseApolloKey * @author: GuoTong * @date: 2023-06-24 14:56:43 * @return:void */ public OpenItemDTO queryApolloKeyOne(DoIssueApolloKey baseApolloKey) { OpenItemDTO itemsByNamespace = apolloOpenApiClient.getItem(baseApolloKey.getAppId(), baseApolloKey.getEnv(), baseApolloKey.getClusterName(), baseApolloKey.getNamespaceName(), baseApolloKey.getKey()); return itemsByNamespace; } @Data public static class OpenAppNamespaceKey { private String appId; private String spaceName; private String spaceDesc; private boolean spaceIsPub = false; // 默认值 DEV private String env = "DEV"; private String clusterName; private String namespaceName; } @Data @NoArgsConstructor @AllArgsConstructor public static class DoIssueApolloKey extends BaseApolloKey { private String key; private String value; // 默认值 Apollo private String operator = "Apollo"; private String desc; private String valueType; // 是否是修改 private boolean modifiedOrInsert; /** * Description: 查询 Portal web的前端得出 * * @author: GuoTong * @date: 2023-06-24 14:46:42 * */ public int handlerValueType(String valueType) { switch (valueType) { case "String": return 0; case "Number": return 1; case "Boolean": return 2; case "JSON": return 3; } // 未匹配就默认使用String的值 return 0; } } @Data @NoArgsConstructor @AllArgsConstructor public static class BaseApolloKey { protected String appId; // 默认值 DEV protected String env = "DEV"; // 默认值 default protected String clusterName = "default"; protected String namespaceName; } @Data public static class PublishApolloKey extends BaseApolloKey { // 发布时候的标题 private String releaseTitle; // 发布时候的操作员 private String releaseOperator; // 发布时候的DESC private String releaseDescription; }}
配合Controller使用
package com.gton.user.controller;import com.alibaba.fastjson2.JSON;import com.alibaba.fastjson2.JSONObject;import com.ctrip.framework.apollo.openapi.dto.OpenItemDTO;import com.gton.user.annotation.SwaggerScanClass;import com.gton.user.handler.ApolloOpenApiOperator;import com.gton.user.io.Resp;import io.swagger.annotations.ApiOperation;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.PutMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import java.io.IOException;import java.util.List;import java.util.Map;/** * 多租户表(apollo)表控制层 * * @author 郭童 * @since 2023-06-22 16:28:10 */@RestController@RequestMapping("apollo")@SwaggerScanClasspublic class ApolloOperatorController { /** * 分页查询数据 namespaceName * * @param * @return 所有数据 */ @PostMapping("/queryLimit") @ApiOperation("查询Apollo配置") public Resp> queryPage( @RequestParam("appId") String appId, @RequestParam("clusterName") String clusterName, @RequestParam("env") String env, @RequestParam("namespaceName") String namespaceName ) throws IOException { ApolloOpenApiOperator apolloOpenApiOperator = ApolloOpenApiOperator.getApolloOpenApiOperator(); ApolloOpenApiOperator.BaseApolloKey baseApolloKey = new ApolloOpenApiOperator.BaseApolloKey(); baseApolloKey.setAppId(appId); baseApolloKey.setClusterName(clusterName); baseApolloKey.setEnv(env); baseApolloKey.setNamespaceName(namespaceName); List openItemDTOS = apolloOpenApiOperator.queryApolloKey(baseApolloKey, 0, 10); return Resp.Ok(openItemDTOS); } /** * 通过主键查询单条数据 * * @param key apollo-key * @return 单条数据 */ @GetMapping("/queryOne/{key}") public Resp selectOne(@PathVariable("key") String key, @RequestParam("appId") String appId, @RequestParam("clusterName") String clusterName, @RequestParam("env") String env, @RequestParam("namespaceName") String namespaceName) throws IOException { ApolloOpenApiOperator apolloOpenApiOperator = ApolloOpenApiOperator.getApolloOpenApiOperator(); ApolloOpenApiOperator.DoIssueApolloKey baseApolloKey = new ApolloOpenApiOperator.DoIssueApolloKey(); baseApolloKey.setAppId(appId); baseApolloKey.setEnv(env); baseApolloKey.setNamespaceName(namespaceName); baseApolloKey.setClusterName(clusterName); baseApolloKey.setKey(key); OpenItemDTO openItemDTO = apolloOpenApiOperator.queryApolloKeyOne(baseApolloKey); return Resp.Ok(openItemDTO); } /** * 新增数据 到Apollo * * @param doIssueApolloKey 实体对象 * @return 新增结果 */ @PostMapping("/save") public Resp insert(@RequestBody Map doIssueApolloKey) throws IOException { String json = JSON.toJSONString(doIssueApolloKey); ApolloOpenApiOperator.DoIssueApolloKey doIssueApolloData = JSONObject.parseObject(json, ApolloOpenApiOperator.DoIssueApolloKey.class); ApolloOpenApiOperator apolloOpenApiOperator = ApolloOpenApiOperator.getApolloOpenApiOperator(); doIssueApolloData.setModifiedOrInsert(false); apolloOpenApiOperator.doIssueApollo(doIssueApolloData); return Resp.Ok(doIssueApolloData.getKey()); } /** * 修改数据 * * @param doIssueApolloKey 实体对象 * @return 修改结果 */ @PutMapping("/update") public Resp update(@RequestBody Map doIssueApolloKey) throws IOException { String json = JSON.toJSONString(doIssueApolloKey); ApolloOpenApiOperator.DoIssueApolloKey doIssueApolloData = JSONObject.parseObject(json, ApolloOpenApiOperator.DoIssueApolloKey.class); ApolloOpenApiOperator apolloOpenApiOperator = ApolloOpenApiOperator.getApolloOpenApiOperator(); doIssueApolloData.setModifiedOrInsert(true); apolloOpenApiOperator.doIssueApollo(doIssueApolloData); return Resp.Ok(doIssueApolloData.getKey()); } /** * Description: 移出Apollo已下发数据 * * @param key * @param appId * @param clusterName * @param env * @param namespaceName * @author: GuoTong * @date: 2023-06-24 15:42:24 * @return:com.gton.user.io.Resp */ @GetMapping("/dels") public Resp delete(@RequestParam("key") String key, @RequestParam("appId") String appId, @RequestParam("clusterName") String clusterName, @RequestParam("env") String env, @RequestParam("namespaceName") String namespaceName) throws IOException { ApolloOpenApiOperator apolloOpenApiOperator = ApolloOpenApiOperator.getApolloOpenApiOperator(); ApolloOpenApiOperator.DoIssueApolloKey removeKeys = new ApolloOpenApiOperator.DoIssueApolloKey(); removeKeys.setAppId(appId); removeKeys.setEnv(env); removeKeys.setNamespaceName(namespaceName); removeKeys.setClusterName(clusterName); removeKeys.setKey(key); apolloOpenApiOperator.executorRemove(removeKeys); return Resp.Ok(removeKeys.getKey()); }}
关键词:
Apollo2.1.0+Springboot使用OpenApI
邮箱:微信企业域名邮箱给gmail或hotmail等域外邮箱发邮件被退回问题如何解决? 环球观焦点
今日热门!Stable Diffusion模型发布新版本:生成图像以假乱真
钻石价格,突发“跳水”!未来还会更便宜?
使用python发送sip协议的OPTIONS 热门
k8s 深入篇———— k8s 的pod[五]-全球播资讯
8. Java-AOP 面向切面编程
文心一言 VS 讯飞星火 VS chatgpt (46)-- 算法导论6.1 4题|全球热点评
泰坦号事故后:加拿大将展开事故调查
车主自曝差点被闷死在特斯拉Model X里 车门锁死 原因揭晓
蔡徐坤巡演新加坡站开票 《Hug me(remix版)》同日上线
来一打自建IP Proxy玩玩之Majora
kafka学习之五_多个磁盘的性能验证 世界快看点
Go——常用函数
每日速递:卷福的十年同学会
每日简讯:4亿票房端午黑马:《消失的她》官宣海外定档
冲入球场拥抱梅西小伙获释后道歉:我真不是没素质的人
世界观天下!新会绿美生态园票价(新会绿美生态园票价多少钱)
腾讯两大国民APP账号又打通了?QQ悄然支持微信登陆 环球精选
环球快报:调查称安卓更易上手:iPhone用户遇到问题概率高出58%
java 异常处理,事务管理,事务共用,事务传递 天天微头条
Go-闭包和defer|最新资讯
环球热资讯!Zen3清库存?突然冒出个很特别的锐龙5 5700
虚幻5打造!腾讯动漫《斗罗大陆2》今日两集首播 霍雨浩初入星斗大森林|每日观察
“空中出租车”亮相巴黎航展:可降落空间直径仅需15米-环球速递
古力娜扎曾遭换脸视频威胁勒索:不给钱就毁了你!
男生单曲循环《好运来》查出593分大哭:比平时多出50分 超常发挥
全球钻石价格较峰值暴跌18%:人造钻石市场规模不断扩大_全球视点
环球最新:甲亢遇到异食癖:法国男子一顿吃15人份 急了还吃石头木塞
全球热点评!公鸡突然从背后“偷袭”萌娃 飞起两脚踹倒在地 第二天端午节就被炖了
泰国和美国两地大量鱼类死亡 或与海洋升温有关 快看点
【技术积累】C语言中的指针【一】_世界百事通
Go-自定义数据类型(函数类型)详解
行业风险管理需求强烈
焦点信息:AMD RX 7800被逼急了!硬塞进去个“大胖子”
世界视点!一考生查分 全家一起喊出“666”:打算冲击复旦、交大
Kafka学习之四_Grafana监控相关的学习
一天吃透MySQL面试八股文 环球微速讯
什么是大模型? 每日热讯
内马尔在足球界的地位_内马尔的盘带水平在足球史上处于什么地位 全球要闻
【环球财经】伦敦金属交易所基本金属23日多数下跌_全球信息
白玉兰奖完整名单出炉 年初大热电视剧《狂飙》挂零陪跑-天天实时
中国高空开伞试验运载器发射连续成功:木星、天王星我们来了! 今日热讯
男子微信回了个“OK”表情 结果竟成被告!一点都不冤 速读
环球报道:尼康Z8新故障导致无法锁定镜头:官方承诺免费维修
【天天新要闻】读发布!设计与部署稳定的分布式系统(第2版)笔记10_自动化和缓慢的响应
无线路由器怎么连接电视(无线路由器怎么连接)
【环球新要闻】要考北大!汶川“敬礼娃娃”郎铮高考637分:15年前被埋20小时
关注:OPPO突然放弃自研芯片 真是因为没钱了?3000哲库人不信
看热讯:四川学霸女生高考712分查完分就睡觉、汶川“敬礼娃娃”郎铮637分
微软承认输掉“主机战争”:Xbox难以与竞争对手抗衡 每日头条
环球微动态丨特斯拉AI账号悄然上线:Dojo超级计算机下月开始生产
pro e
无牌产品硬刚国际大牌 就因为带货主播们买地建厂?
复兴号开进青藏铁路 提速至160公里/时 全程不到6小时
微软终于认怂!重新恢复Win11文件管理器经典功能
《人世间》赢麻!成最佳中国电视剧 雷佳音吴越分获白玉兰最佳男女主角_当前热门
“泰坦”号悲剧隐患早已埋下
2023年 年轻人被迫流行功能机了?-每日快看
全球快资讯丨【技术积累】Git中的基础知识【一】
世界信息:登录验证,JWT,过滤器,拦截器使用总结 2023
全球资讯:索尼时隔10年公布全新PS掌机Q!价格够低
焦点资讯:女孩没考好 和妈妈吵架后竟被丢高速:网友观点出奇一致
“4S店之王”破产离场 斯巴鲁中国重大变更:开始独资|当前焦点
大超险些成为007 环球快资讯
南漳县属于哪个省市_南漳县属于哪个市|每日速讯
今日快看!电影相约2000年(相约2000年)
imessage怎么设置不要钱_imessage怎么设置
Springboot web 项目开发流程梳理总结|世界讯息
今日热门!模型剪枝:让深度学习模型更好地应对不同的任务和环境
WEB安全-渗透测试-waf绕过信息收集_世界快看点
【独家焦点】“超人”亨利卡维尔有望成为007新片邦德扮演者:试镜效果棒极了
长安欧尚Z6新能源半年降价3万多 车主集体投诉
天天讯息:ASP.NET Core MVC 从入门到精通之缓存
全球时讯:文心一言 VS 讯飞星火 VS chatgpt (45)-- 算法导论6.1 3题
当前头条:【后端面经-Spring】Spring 中 bean 的生命周期)
美国国债收益率持续下跌,10年期国债收益率下跌8.90个基点 世界资讯
世界通讯!GPS靠边!北斗全球卫星导航系统星座部署完成3年 正突破毫米级甚至更小精度
【忠阳车评】固态电池量产难在哪 世界微资讯
【天天报资讯】微软爆料索尼PS6主机:2028年推出
光刻机一哥荷兰ASML:建立全自主半导体产业链几乎不可能!|环球热讯
K8S安装记录
《暗黑破坏神4》野蛮人双晕结算流分享 野蛮人双晕结算流怎么玩?
高考查分场面代入感太强 男生601分激动得满屋蹦跳:高中三年考最好的一次
重庆两案例入选全国职业教育产教融合典型案例_观天下
5人全部遇难 泰坦号残骸距离泰坦尼克号500米 快看点
【世界快播报】轴距超过Model Y 3.5秒破百 即将上市的起亚EV6到底行不行?
一年4.3万人死于车祸!美国要求所有大货车大客车配备自动刹车系统_世界速递
dll格式用什么软件打开(如何打开dll格式文件) 全球热头条
环球快看点丨全国龙舟身价“天花板”?广东一条龙舟70个房东 身价20亿 这事是真的
今日视点:女子番茄吃多胃痛医生让喝可乐:照做两天后缓解!专业人士科普
泰坦号观光艇内爆5名乘员死亡 一款游戏销量暴涨 玩家:6美元体验惨案
每日看点!BLOG-3----22206117
环球热点评!留给“牛粉”的时间不多了!兰博基尼宣布:Urus将于五年内变为纯电车型
25万美元一趟值吗?致5死泰坦号潜艇内部曝光:没凳子只能盘腿坐 马桶是最佳座位
云南上线购车送油券活动:每车2500元 可在中石油、中石化消费
缅北电诈愈演愈烈,人口贩卖已成全球性危机 焦点快播
强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战
ChatGPT和AI会重燃中国的虚拟宇宙吗?-世界聚焦
产业强市|安能智慧物流产业联盟暨苏皖区域总部即将落户句容 焦点快报