精华内容
下载资源
问答
  • 导入文件失败请重试
    万次阅读
    2018-12-26 15:26:00

    vs下载完离线安装包在无网络环境下点击安装时出现无法下载安装文件。请检查Internet连接,然后重试

    原因是证书没有导

    解决方法

    打开刚刚存放离线文件的路径,比如D:\vs2017offline,然后找到certificates文件夹并打开,

    依次安装该文件夹下的软件证书。双击证书并根据提示往下走就行了,

    实在懒得弄就一直下一步直到提示导入成功。

    然后

    ②运行离线根目录下的安装程序,各版本位置如下: 
    企业版:离线文件存储文件夹\vs_Enterprise.exe 
    专业版:离线文件存储文件夹\vs_Professional.exe 
    社区版:离线文件存储文件夹\vs_Community.exe

    即可进行相应安装

     

    参考

     

    VS2017专业版和企业版激活密钥

    Enterprise:

    NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

    Professional:

    KBJFW-NXHK6-W4WJM-CRMQB-G3CDH

     

    转载于:https://www.cnblogs.com/macT/p/10179367.html

    更多相关内容
  • Java实现几种简单的重试机制

    千次阅读 2021-02-12 10:47:17
    背景当业务执行失败之后,进行重试是一个非常常见的场景,那么如何在业务代码中优雅的实现重试机制呢?设计我们的目标是实现一个优雅的重试机制,那么先来看下怎么样才算是优雅无侵入:这个好理解,不改动当前的业务...

    背景

    当业务执行失败之后,进行重试是一个非常常见的场景,那么如何在业务代码中优雅的实现重试机制呢?

    设计

    我们的目标是实现一个优雅的重试机制,那么先来看下怎么样才算是优雅

    无侵入:这个好理解,不改动当前的业务逻辑,对于需要重试的地方,可以很简单的实现

    可配置:包括重试次数,重试的间隔时间,是否使用异步方式等

    通用性:最好是无改动(或者很小改动)的支持绝大部分的场景,拿过来直接可用

    针对上面的几点,分别看下右什么好的解决方案

    几种解决思路

    要想做到无侵入或者很小的改动,一般来将比较好的方式就是切面或者消息总线模式;可配置和通用性则比较清晰了,基本上开始做就表示这两点都是基础要求了,唯一的要求就是不要硬编码,不要写死,基本上就能达到这个基础要求,当然要优秀的话,要做的事情并不少

    切面方式

    这个思路比较清晰,在需要添加重试的方法上添加一个用于重试的自定义注解,然后在切面中实现重试的逻辑,主要的配置参数则根据注解中的选项来初始化

    优点:

    真正的无侵入

    缺点:

    某些方法无法被切面拦截的场景无法覆盖(如spring-aop无法切私有方法,final方法)

    直接使用aspecj则有些小复杂;如果用spring-aop,则只能切被spring容器管理的bean

    消息总线方式

    这个也比较容易理解,在需要重试的方法中,发送一个消息,并将业务逻辑作为回调方法传入;由一个订阅了重试消息的consumer来执行重试的业务逻辑

    优点:

    重试机制不受任何限制,即在任何地方你都可以使用

    利用EventBus框架,可以非常容易把框架搭起来

    缺点:

    业务侵入,需要在重试的业务处,主动发起一条重试消息

    调试理解复杂(消息总线方式的最大优点和缺点,就是过于灵活了,你可能都不知道什么地方处理这个消息,特别是新的童鞋来维护这段代码时)

    如果要获取返回结果,不太好处理, 上下文参数不好处理

    模板方式

    把这个单独捞出来,主要是某些时候我就一两个地方要用到重试,简单的实现下就好了,也没有必用用到上面这么重的方式;而且我希望可以针对代码快进行重试

    这个的设计还是非常简单的,基本上代码都可以直接贴出来,一目了然:

    public abstract class RetryTemplate {

    private static final int DEFAULT_RETRY_TIME = 1;

    private int retryTime = DEFAULT_RETRY_TIME;

    // 重试的睡眠时间

    private int sleepTime = 0;

    public int getSleepTime() {

    return sleepTime;

    }

    public RetryTemplate setSleepTime(int sleepTime) {

    if(sleepTime < 0) {

    throw new IllegalArgumentException("sleepTime should equal or bigger than 0");

    }

    this.sleepTime = sleepTime;

    return this;

    }

    public int getRetryTime() {

    return retryTime;

    }

    public RetryTemplate setRetryTime(int retryTime) {

    if (retryTime <= 0) {

    throw new IllegalArgumentException("retryTime should bigger than 0");

    }

    this.retryTime = retryTime;

    return this;

    }

    /**

    * 重试的业务执行代码

    * 失败时请抛出一个异常

    *

    * todo 确定返回的封装类,根据返回结果的状态来判定是否需要重试

    *

    * @return

    */

    protected abstract Object doBiz() throws Exception;

    public Object execute() throws InterruptedException {

    for (int i = 0; i < retryTime; i++) {

    try {

    return doBiz();

    } catch (Exception e) {

    log.error("业务执行出现异常,e: {}", e);

    Thread.sleep(sleepTime);

    }

    }

    return null;

    }

    public Object submit(ExecutorService executorService) {

    if (executorService == null) {

    throw new IllegalArgumentException("please choose executorService!");

    }

    return executorService.submit((Callable) () -> execute());

    }

    }

    预留一个doBiz方法由业务方来实现,在其中书写需要重试的业务代码,然后执行即可

    使用case也比较简单

    public void retryDemo() throws InterruptedException {

    Object ans = new RetryTemplate() {

    @Override

    protected Object doBiz() throws Exception {

    int temp = (int) (Math.random() * 10);

    System.out.println(temp);

    if (temp > 3) {

    throw new Exception("generate value bigger then 3! need retry");

    }

    return temp;

    }

    }.setRetryTime(10).setSleepTime(10).execute();

    System.out.println(ans);

    }

    优点:

    简单(依赖简单:引入一个类就可以了; 使用简单:实现抽象类,讲业务逻辑填充即可;)

    灵活(这个是真正的灵活了,你想怎么干都可以,完全由你控制)

    缺点:

    强侵入

    代码臃肿

    实现

    上面的模板方式基本上就那样了,接下来谈到的实现,毫无疑问将是切面和消息总线的方式

    1. 切面方式

    实现依然是基于前面的模板方式做的,简单来看就是添加一个切面,内部实现模版类即可

    注解定义如下

    @Documented

    @Target(ElementType.METHOD)

    @Retention(RetentionPolicy.RUNTIME)

    public @interface RetryDot {

    /**

    * 重试次数

    * @return

    */

    int count() default 0;

    /**

    * 重试的间隔时间

    * @return

    */

    int sleep() default 0;

    /**

    * 是否支持异步重试方式

    * @return

    */

    boolean asyn() default false;

    }

    切面逻辑如下

    @Aspect

    @Component

    @Slf4j

    public class RetryAspect {

    ExecutorService executorService = new ThreadPoolExecutor(3, 5,

    1, TimeUnit.MINUTES,

    new LinkedBlockingQueue());

    @Around(value = "@annotation(retryDot)")

    public Object execute(ProceedingJoinPoint joinPoint, RetryDot retryDot) throws Exception {

    RetryTemplate retryTemplate = new RetryTemplate() {

    @Override

    protected Object doBiz() throws Throwable {

    return joinPoint.proceed();

    }

    };

    retryTemplate.setRetryCount(retryDot.count())

    .setSleepTime(retryDot.sleep());

    if (retryDot.asyn()) {

    return retryTemplate.submit(executorService);

    } else {

    return retryTemplate.execute();

    }

    }

    }

    2. 消息方式

    依然是在EventBus的基础上进行开发,结果写到一半,发现这种方式局限性还蛮大,基本上不太适合实际使用,下面依然给出实现逻辑

    定义的重试事件RetryEvent

    @Data

    public class RetryEvent {

    /**

    * 重试间隔时间, ms为单位

    */

    private int sleep;

    /**

    * 重试次数

    */

    private int count;

    /**

    * 是否异步重试

    */

    private boolean asyn;

    /**

    * 回调方法

    */

    private Supplier callback;

    }

    消息处理类

    @Component

    public class RetryProcess {

    ExecutorService executorService = new ThreadPoolExecutor(3, 5,

    1, TimeUnit.MINUTES,

    new LinkedBlockingQueue());

    private static EventBus eventBus = new EventBus("retry");

    public static void post(RetryEvent event) {

    eventBus.post(event);

    }

    public static void register(Object handler) {

    eventBus.register(handler);

    }

    public static void unregister(Object handler) {

    eventBus.unregister(handler);

    }

    @PostConstruct

    public void init() {

    register(this);

    }

    @Subscribe

    public void process(RetryEvent event) throws InterruptedException {

    RetryTemplate retryTemplate = new RetryTemplate() {

    @Override

    protected Object doBiz() throws Throwable {

    return event.getCallback().get();

    }

    };

    retryTemplate.setSleepTime(event.getSleep())

    .setRetryCount(event.getCount());

    if(event.isAsyn()) {

    retryTemplate.submit(executorService);

    } else {

    retryTemplate.execute();

    }

    }

    }

    问题比较明显,返回值以及输入参数的传入,比较不好处理

    测试

    测试下上面两种使用方式, 定义一个实例Service,分别采用注解和消息两种方式

    @Service

    public class RetryDemoService {

    private int genNum() {

    return (int) (Math.random() * 10);

    }

    @RetryDot(count = 5, sleep = 10)

    public int genBigNum() throws Exception {

    int a = genNum();

    System.out.println("genBigNum " + a);

    if (a < 3) {

    throw new Exception("num less than 3");

    }

    return a;

    }

    public void genSmallNum() throws Exception {

    RetryEvent retryEvent = new RetryEvent();

    retryEvent.setSleep(10);

    retryEvent.setCount(5);

    retryEvent.setAsyn(false);

    retryEvent.setCallback(() -> {

    int a = genNum();

    System.out.println("now num: " + a);

    if (a > 3) {

    throw new RuntimeException("num bigger than 3");

    }

    return a;

    });

    RetryProcess.post(retryEvent);

    }

    }

    因为使用了切面,在spring的基础上进行开发的,所以需要加上对应的配置信息 aop.xml

    Test代码

    @RunWith(SpringJUnit4ClassRunner.class)

    @ContextConfiguration({"classpath:aop.xml"})

    public class AspectRetryTest {

    @Autowired

    private RetryDemoService retryDemoService;

    @Test

    public void testRetry() throws Exception {

    for (int i = 0; i < 3; i++) {

    int ans = retryDemoService.genBigNum();

    System.out.println("----" + ans + "----");

    retryDemoService.genSmallNum();

    System.out.println("------------------");

    }

    }

    }

    输出

    genBigNum 9

    ----9----

    now num: 1

    ------------------

    genBigNum 9

    ----9----

    now num: 4

    now num: 1

    ------------------

    genBigNum 5

    ----5----

    now num: 6

    now num: 6

    now num: 0

    ------------------

    其他

    guava-retrying和 spring-retry 实际上是更好的选择,设计与实现都非常优雅,实际的项目中完全可以直接使用

    相关代码:

    公众号获取更多:

    3d36be394b668806c51f8eea55a55ad6.png

    参考

    展开全文
  • 解决:MySql数据库导入数据失败

    千次阅读 2019-09-12 10:50:00
    1、失败信息 Query: /*!50003 CREATE DEFINER=`workbase`@`%` FUNCTION `getParentList`(rootId INT) RETURNS varchar(1024) CHARSET utf8 BEGIN DECLARE p_id INT; DECLARE p_sectionName VARCHAR(255); ...

    1、失败信息

    Query:
    /*!50003 CREATE DEFINER=`workbase`@`%` FUNCTION `getParentList`(rootId INT) RETURNS varchar(1024) CHARSET utf8
    BEGIN
      DECLARE p_id INT;
      DECLARE p_sectionName VARCHAR(255);
      DECLARE result VARCHAR(1024) DEFAULT '';
      
      WHILE rootId > 0 DO 
        SELECT 
          parentId, sectionName INTO p_id, p_sectionName 
        FROM `basic_section` WHERE rootId = id ;
        IF result = '' THEN 
    	SET result = p_sectionName;
        ELSE 
    	SET result = CONCAT(p_sectionName, '-', result);
        END IF ;
        SET rootId = p_id;    
      END WHILE ;  
      RETURN result ;  
     END */
    
    Error occured at:2019-09-12 10:47:15
    Line no.:18952
    Error Code: 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
    
    
    
    

    2、解决方案:

    执行如下语句:

    set global log_bin_trust_function_creators=TRUE;

    这是开启了bin-log, 就必须指定函数是否是
    1 )DETERMINISTIC 不确定的
    2 )NO SQL 没有SQl语句,当然也不会修改数据
    3 )READS SQL DATA 只是读取数据,当然也不会修改数据
    4 )MODIFIES SQL DATA 要修改数据
    5 )CONTAINS SQL 包含了SQL语句

    其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。

     

    展开全文
  • 多线程模板特点: 0)....如遇执行失败需要重试的任务直接压入队列 排队重试! (如果限制比较大的网站,账号登陆被限制IP了,在同一个IP子线程里面循环重试又浪费时间,不如试试揪出来扔后面排队重试吧)
  • JAVA导入文件超时问题

    千次阅读 2019-12-27 10:26:11
    JAVA导入文件超时问题前言解决问题的思路根据业务数据定制代码 前言 业务的临时需求,需要开发一个订单EXCEL导入的功能,从开发到上生产差不多是5天。在SIT环境上,导入400条数据大概是1分钟,于是和客户沟通的是100...

    前言

    业务的临时需求,需要开发一个订单EXCEL导入的功能,从开发到上生产差不多是5天。在SIT环境上,导入400条数据大概是1分钟,于是和客户沟通的是100条数据随便导,但在UAT环境却发现100条数据导入超时的情况。由于数据的导入涉及多库多表的存储,所以对几个核心的feign接口都打上了日志,重新发了版UAT,发现在对主数据做校验的接口上,在SIT和UAT上耗时相差甚远。于是检查了数据库发现,SIT的主数据量在1万多条,UAT是18万条!这件事对我影响还蛮大的,让我在之后思考的时候会从更多的维度去做考虑。

    解决问题的思路

    由于时间比较赶,客户马上就需要在生产上使用该功能,于是我打算从配置出发,先解决问题,在优化代码。先看前端的请求。
    在这里插入图片描述
    1分钟就超时了。所以我打算先调长前后端的交互时间,保证数据的正常导入。先看下配置中心网关的配置。
    在这里插入图片描述
    将ribbon的超时时间和hystrix的熔断时间都调长,这里的单位是毫秒。然后重启网关。
    在这里插入图片描述
    前端仍然显示超时,但后端仍在运行,并且所有的数据都保存到了数据库中。认真看了下请求的response,发现里面有一段日志
    If you are the system administrator of this resource then you should check the error log for details. Faithfully yours, nginx
    于是我去检查了下nginx的错误日志,发现里面有一段
    upstream timed out (110: Connection timed out)
    百度了一下发现,nginx的server里缺少了一段配置
    large_client_header_buffers 4 16k; # 读取大型客户端请求头的缓冲区的最大数量和大小
    client_max_body_size 300m; #设置nginx能处理的最大请求主体大小。
    client_body_buffer_size 128k; #请求主体的缓冲区大小。
    proxy_connect_timeout 600;
    proxy_read_timeout 600;
    proxy_send_timeout 600;
    proxy_buffer_size 64k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;

    如果 proxy_connect_timeout、proxy_read_timeout、proxy_send_timeout不做配置,则默认是60S,到此前端超时导入失败的原因就解决了。

    根据业务数据定制代码

    回过头来看看代码是如何优化的。导入耗时主要是在对主数据的校验,验证name是否存在,然后拿回code进行赋值。我看了下业务导入的数据发现,基本是按同一家公司的数据进行导入的,于是在对主数据校验之前,我加了一个判断
    在这里插入图片描述
    如果和前一个的数据相同,则直接赋值,不再调用feign接口进行校验,也减少了微服务之间交互的次数。至此,导入功能成功满足客户需求,按时生产上线。

    展开全文
  • 一、安装好所需测试库(不展开说明) 二、在RED上导入测试库时,总是标红色波浪线(表示无法识别) 打开cmd,输入pip install --upgrade +测试库名 三、重启RED,问题解决 ...
  • 使用pycharm安装python模块后,导入依然报错的问题和解决方法
  • 做好备份数据库作业计划后,发现执行日志有报 -8007,备份文件创建失败,找了下这个可能的原因之一,应该是备份目录的权限不够,因此需要手动设置下文件夹的权限; 设置下权限(根据需要进行设置), 发现不...
  • 一. 前言 很久没有写关于靶机的...靶机的环境与搭建过程是比较简单的,不必拘泥于virtual box用VMware也是同样可以的,但是需要去更改一下配置文件,在下面的文章中我会以DC-1来举例。 在做靶机渗透的时候,我这里建议
  • 【MySQL篇】Navicat导入SQL大文件报错终极解决方案 面对大数据库文件(一般50M以上),使用Navicat导入的时候容易出现[ERR]2006等报错问题。此文提供了几种办法,包括修改MySQL的配置参数在网上也有很多详细教程介绍...
  • springcloud-ribbon重试机制详解

    千次阅读 2019-02-21 01:56:35
    一、版本信息 springboot:2.0.5.RELEASE springcloud:Finchley.RELEASE...--重试依赖--&amp;amp;gt; &amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;groupId&amp;amp;gt;org.springframewor
  • pycharm导入第三方库时有两种方法 第一种使用pycharm的terminal(终端) 第二种使用TUI用户控制控制界面DOS命令添加 常见问题 Try to run this command from the system terminal. Make sure that you use the ...
  • 进入手机设置-照片-最后“传输到MAC或PC”选择“保留原始照片”。 如果不行就把数据线拔下来插。 如果还不行重启一下电脑再
  • 导出方法:先保存,再按ctrl enter,如果你是这样做的话还无法播放…很可能是导出器的问题…需要装。可是如果只是无法正常播放(据你所说,这个可能较大),有可能是你所用的播放器版本太高,而你的fla文件版本过低...
  • 单击“重试”放松 OVF 规范与虚拟硬件合规性检查,并重新尝试导入; 或单击“取消”以取消导入。如果重新尝试导入,可能无法使用 VMware Workstation 中的虚拟机  原因: 这是因为OVF 
  • 导入文件的时候虚拟机报错 网上的方法均是更新OVFtool至4.x版本。打开vmware的OVFTOOL目录发现版本已经是4.3了,方法不适用。 点击重试之后 发现报错原因:没有权限获取镜像文件。 所以解决办法 关闭“VMware”...
  • 单击“重试”放松 OVF 规范与虚拟硬件合规性检查,并重新尝试导入; 或单击“取消”以取消导入。如果重新尝试导入,可能无法使用 VMware Workstation 中的虚拟机 原因: 这是因为OVF 版本不匹配导致的,VMware ...
  • 创建一个作为结点的表格文件,暂且称之为node,需要注意,第一列必须为index:ID,最后一列必须为==:LABEL==(实体的标签),中间列为实体属性。注意实体属性最好用英文表示。 另存为 保存。 关系文件 也是必须的...
  • 如果装一遍还不行的话就要直接把这个方法pass掉吧,不要再傻乎乎的去官网下载各种不同的版本,浪费时间且无用!!! 2. 然后可以参考官方的帮助文档,这里我是网卡的问题,查看一下自己电脑的网络适配器有没有...
  • 日志文件中的内容不方便阅读统计,需要用excel表格的形式显示出来 日志文件内容如下: info***LCAM_SC.DM_RP_DIS_DEVICE_TEMP*1*1*0*0*0*0*N*Y*/data2/20200514114048/OGG_ZC_SZ09_12/DM_RP_DIS_DEVICE_TEMP/ 根据...
  • RocketMQ重试策略及与Springboot整合

    千次阅读 2019-10-11 17:28:52
    在消息的发送和消费过程中,都有可能出现错误,如网络异常等,出现了错误就需要进行错误重试,这种消息的重试需要分2种,分别是producer端重试和consumer端重试。 1.1 producer端重试 生产者端的消息失败,也就是...
  • 2、从vcenter(ESXI6.7) 中导出的文件 登陆 使用“启动 vSphere Client (HTML5)”登陆管理页面:按照下图进行导出 导出后的文件有4个列表为: 【回收】nginx-1.vmdk 【回收】nginx.mf 【回收...
  • 导入文件数据内容为空(即只有表头且表头正确) 6.表头检查:包括去掉、修改、新增列、列之间切换 7.数据中间空几行数据看是否能导入成功 8.模板内的数据之间存在重复 9.导入的内容与页面(数据库)重复 10....
  • 针对于ovf模板,目录对应下面有三个扩展名为vmdk、ovf、mf文件,分别对应功能为虚拟磁盘文件、虚拟机配置文件、虚拟磁盘和配置文件的sha1校验文件。 解决方法: 网上:从vmware网站下载ovftool 4...
  • js实现Excel导入功能

    万次阅读 2019-05-09 16:04:34
    仅上传Excel文件给后台 <input id="articleImageFile" name="excelFile" type="file" class="x-file" onchange="importExcel(this)"> <button id="saveZipButton" type="button" class="btn" onclick=...
  • 导入Excel文件后进行批量修改数据

    千次阅读 2018-06-01 16:15:48
    throw new Exception("文件上传失败请重试!"); } //解析excel文件到 List List<Object> list = poiService.getListFromExcel(myfile, User.class); if(list!=null&&list.size()>0){ ...
  • 今天打开vs突然报了一个错......... .wpp.targets。确认 <Import> 声明中的路径正确,且磁盘上存在该文件 重新新建一个项目,dll全部都是黄色感叹号 ...
  • IMAP 上传 ... IMAP Upload 是一种将本地 mbox 文件... (容易重试失败的消息) 支持只能在文件夹中存储文件夹或电子邮件的 IMAP 服务器 支持 SSL。 在 Windows、Mac OS X、Linux、*BSD 等上运行。 命令行界面。 (没
  • 1.1 解释:当一次服务调用失败后,不会立即抛出异常,而是再次重试另一个服务。 1.2 实现步骤: 在服务调用端配置文件中开启重试机制 spring: cloud: loadbalancer: retry: enabled: true # 开启Spring Cloud的...
  • 吐血总结,Python Requests库使用指南

    千次阅读 2021-03-17 02:13:13
    为此,运行以下命令:pip install requests如果你喜欢使用 Pipenv 管理Python包,你可以运行下面的命令:pipenv install requests一旦安装了requests,你就可以在应用程序中使用它。像这样导入requests:import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,202
精华内容 15,280
热门标签
关键字:

导入文件失败请重试