SpringCloud配置中心相关问题和IO流下载相关

一、SpringCloud配置相关问题

1.SpringCloud总体的思路是基于springboot的微服务注册到注册中心eureka当中,前台调用自然可以直接请求地址得到数据,当其他微服务想要调用某微服务那么就会需要用到feign调用的技术。这些目的都是为了更方便的开发。开发项目首先就是要考虑使耦合度为低,进行解耦便于维护和扩展。所以配置文件也存在相同的配置文件,即公用部分。这样就可以把配置文件注册到springcloud当中,其他项目直接指定此配置文件,配置文件结构就更清晰。在配置文件当中注意分本地和git,本地当中注意路径一定要能找到你的配置文件。

 

二.springboot整合mybatis方面需要注意到的点

1.引入相关的坐标依赖,然后进行正常的写dao层,写相对应的xml。需要注意的是在启动类要加入@MapperScan("com.szyk.organization.dao")这样的注解,否则就会报找不到dao等异常。同时在配置数据源时候要注意加入

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})这样的注解,否则会在生成项目的时候出现加载数据源的报错问题。

整合mybatis需要的yml内容:数据源,连接信息,mybtis配置内容。配置在相关yml即可

三、代码公用部分抽取的代码设计相关

1.此过程是为了解耦的一种思想,即在service层,实现类层,dao层都可以进行一种抽取,即各自实现一种Base相关接口或者类。其中需要注意的是在service实现类中注入dao接口的写法。具体代码贴出,多多复习理解。

 

在实现类中注入写法

 

 

 

四、IO流相关知识整理

1.FileinputStream和FileoutputStream方面

File只是能操作文件或文件夹,但是并不能操作文件中的内容,要想操作文件的内容就需要使用文件IO流,其操作文件的内容主要有两种方式:以字节的方式和以字符的方式。此次是关于字节流的例子。

在Java中以字节流的形式操作文件内容的类主要是FileOutputStream 和 FileInputStream。 分别是 OutputStream(字节输出流) 和 InputStream(字节输入流) 抽象基类的子类。下面是以图片的复制来展示下该流的用法。

public class fileStream {
    public static void main(String[] args)  {
 File sourceFile = new File("D:\\Project\\recurrence\\src\\2.jpg");//流读取的目标文件
 File destFile = new File("1.jpg");//流输入的目标文件
 FileInputStream fis=null; 
 FileOutputStream fos = null; 
 try {
            fis = new FileInputStream(sourceFile);//变成输入流
 fos = new FileOutputStream(destFile);
 byte[] bytes= new byte[1024];
 int len = 0;
 while((len=fis.read(bytes))!=-1) {
                fos.write(bytes, 0, len);//按照一次1024字节这样去写入
 }
        }
        catch(IOException ex) {}
        finally {
            try { fis.close();} catch(IOException ex) {}
            try { fos.close();} catch(IOException ex) {}
        }
    }

}

在使用 FileOutputStream 和 FileInputStream 的过程中需要注意的地方:

  1. FileInputStream 所要操作的文件必须存在,否则就会抛出异常。而 FileOutputStream 写入的目的文件则不需要存在,当不存在时会被创建,存在的时候会被覆盖,也可以使用 FileOutputStream 造函数的第二个参数,来实现追加文件内容。
  2. 在使用 FileInputStream 读取字节的时候,当读取到字节的末尾,再继续读取,无论多少次都会返回 -1,而返回值len表示本次读取了多少个字节。通常情况下每次读取1024个字节,可以达到空间和时间的平衡。但是具体情况也是需要具体分析的。
  3. 字节流是不存在缓冲区的,所以不需要使用flush操作刷新缓冲区,字节的读取和写入都是通过操作系统来实现的。
  4. 只要是流就是需要关闭的,无论是否在异常情况下都需要关闭流,防止占用系统资源,导致其他程序无法对该文件进行操作。但是在关闭流的时候也有可能会报异常,所以也需要 try...catch。

FileOutputStream 和 FileInputStream主要用来操作字节表现形式的文件,例如图片,可执行程序等。当然操作字符表现形式的文件也是没有问题的,只不过这么干不规范。

2.BufferedOutputStream & BufferedInputStream & BufferedWriter & BufferedReader

这四个Buffered开头的类分别是为字节流和字符流提供一个合适的缓冲区来提高读写性能,尤其是在读写数据量很大的时候效果更佳显著。其用法和不带Buffered的流没有任何区别,只不过在不带Buffered流的基础上提供了一些更加便利的方法,例如newLine(),ReadLine()和ReadAllBytes(),他们会根据操作系统的不同添加合适的换行符,根据合适的换行符来读取一行数据和读取所有字节。来看一下用法以缓冲字符流为例

File sourceFile = new File("sourceFile.txt");
File destFile = new File("destFile.txt");

BufferedWriter bw =null;
BufferedReader br =null;
try {
    FileReader reader= new FileReader(sourceFile); 
    FileWriter writer=new FileWriter(destFile); 
    bw =new BufferedWriter(writer);
    br =new BufferedReader(reader);
    String line =null;
    while((line=br.readLine())!=null) {
        bw.write(line);
        bw.newLine();
    }
}
catch(IOException ex) {}
finally {
    try { bw.close();} catch(IOException ex) {} 
    try { br.close();} catch(IOException ex) {} 
}

上述的代码中有两点需要注意:

  1. 当按照行来读取字符的时候,当下一行没有内容,继续读取下一行的内容,结果会返回 null,可以此来判断文件中是否还有字符。
  2. 当读取的文件行返回为null后,仍然会执行一次循环,此时调用newLine() 会在写入的文件中多添加一个换行符,这个换行符无关紧要,可以不用考虑处理掉。
  3. 此两周将此几类流在进行熟悉,为以后打下基础
     

3.在项目中通过HttpServletResponse进行下载

代码贴出,注意返回过程要通过response设置头文件表明文件类型和编码格式即可

 /**
 * 党建模板下载
 * @param response
 * @return
 * @throws Exception
 */
@RequestMapping(value = "/mouldExcel",method = RequestMethod.POST)
public RestResult<String> mouldExcel(HttpServletResponse response) throws Exception {
     ExcelAdviceUtil excelAdviceUtil=new ExcelAdviceUtil();
 response.setHeader("Content-Disposition","attachment;filename=mould.xlsx");
 response.setCharacterEncoding("utf-8");
 response.setContentType("application/vnd.ms-excel;charset=UTF-8");
 excelAdviceUtil.createExcel(new ArrayList<>(),new FileInputStream(new File("D:\\organization\\organization-impl\\mould1.xlsx")),response.getOutputStream(),2);
 response.flushBuffer();
 return new RestResult<>(null);
}

五、自身学习角度思考和工作中做事的思考

1、对于项目中自己未能解决的问题进行思考,事实上问题最后的答案和解决方式可能是自己所能理解范围之内的,但在解决过程当中却是并没有很有效的进度的进行。于此,个人认为原因有几点,分为几方面。

(1)项目bug问题处理,并没有仔细翻阅上层bug错误信息,并没有理解项目启动日志所标明信息的具体意思,只是单纯的从错误信息中寻找,一般时候确实能寻找到问题所在,但例如在SpringCloud配置文件当中,并不是如此,则是从日志信息得出并未查找到相关配置文件。于此确实消耗了一些时间,这方面以后bug要从日志中寻找作为第一步,在看最后报出异常。

(2)知识体系不完整,所接触新内容体系不足以达到所需要的要求所在。对于较有深度的问题,当前的知识积累并不足以解决此问题,所以我并不赞成一个问题一直自身解决,因为你的知识体系并未达到此问题所要求的知识体系,所以自然你也较为难围绕此问题而全然理解所应有的知识体系,所以个人认为在对问题较为一个了解以后,能不能解决心里应该已大致明白,不乱请教人,但也不能不请教他人。这也是知识体系较为快速增长的一个好的方法。深知自己不乱麻烦于他人,对于问题的判断要十分的明白。

2、公司做事请永远深知在尊重于他人,聆听于他人的基础之上,在去评价如何。自己也应有自己的想法,不可从众,可以保留自己的想法,也可以在恰当的机会说出,这确实也是一种进步。

3、本次总结完毕,日日向阳,不忘技术人初心。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值