娜乌西卡lxm个人博客

愿居于一城,与卿所见美好......

推荐文章

Springboot配置jetty应用的context-path

    1.jetty介绍

    2.配置

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <!-- json库统一使用fastjson -->
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-databind</artifactId>
                    </exclusion>
                    <!-- 去除tomcat容器 -->
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- 增加jetty容器 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jetty</artifactId>
            </dependency>

    3.相关参数配置(线程池之类的)

    配置Jetty参数

    我们可以在application.properties配置文件里配置相关参数,去覆盖Jetty默认使用的运行参数:
    application.properties

    server.port=8080
    server.servlet.context-path=/home
     
    ####Jetty specific properties########
     
    server.jetty.acceptors= # Number of acceptor threads to use.
    server.jetty.max-http-post-size=0 # Maximum size in bytes of the HTTP post or put content.
    server.jetty.selectors= # Number of selector threads to use.


    Spring boot 2.0.0.RELEASE版本之后的更新

    以上代码针对的是Spring Boot Snapshot版本,在Spring boot 2.0.0.RELEASE版本之后,我们应该使用 ConfigurableServletWebServerFactory 和 JettyServletWebServerFactory类去配置Jetty参数:
    创建ConfigurableServletWebServerFactory Bean

    @Bean
    public ConfigurableServletWebServerFactory webServerFactory()
    {
        JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
        factory.setPort(9000);
        factory.setContextPath("/myapp");
        factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/notfound.html"));
        return factory;
    }


    参考链接

    https://blog.csdn.net/JINXFOREVER/article/details/108549106

    阅读全文>>

作者:娜乌西卡lxm分类:【javaEE浏览(103评论(0

2021-09-17 20:59:54

spring-@Autowired注入与构造函数注入使用

    前言

    因为业务关系也看了些同事写的代码,因为公司没有明确规定,有一部分人在注入依赖的时候使用了用Spring推荐的构造器注入的方式,一部分人使用了@Autowired的注解进行注入。

    因此,接下来我试着总结归纳一下相关的情况,做一次回顾。

    用自己的话去说出来才算是真的掌握。

    使用介绍

    1.@Autowired注入

     

    1. @RestController
    2. @RequestMapping("/test")
    3. public class TestController {
    4. @Autowired
    5. private List<TestService> testServices;
    6. @Autowired
    7. private List<ChainAsbtract> chains;
    8. private ChainAsbtract target;
    9. }

    2.构造器注入

    Spring4.3+之后,constructor注入支持非显示注入方式。

    1. @RestController
    2. @RequestMapping("/test")
    3. public class TestController {
    4. // @Autowired
    5. private final List<TestService> testServices;
    6. // @Autowired
    7. private final List<ChainAsbtract> chains;
    8. // @Autowired
    9. public TestController(List<TestService> testServices, List<ChainAsbtract> chains) {
    10. this.testServices = testServices;
    11. this.chains = chains;
    12. }
    13. }

     3.setter注入

    1. @RestController
    2. @RequestMapping("/test")
    3. public class TestController {
    4. // @Autowired
    5. private final List<TestService> testServices;
    6. // @Autowired
    7. private final List<ChainAsbtract> chains;
    8. @Autowired
    9. public void setTestServices(List<TestService> testServices){
    10. this.testServices = testServices;
    11. }
    12. @Autowired
    13. public void setTestServices(List<ChainAsbtract> chains){
    14. this.chains = chains;
    15. }
    16. }

    事实上,spring在4.x版本后就推荐使用构造器的方式的来注入fileld

    官方推荐理由

    单一职责: 当使用构造函数注入的时候,你会很容易发现参数是否过多,这个时候需要考虑你这个类的职责是否过大,考虑拆分的问题;而当使用@Autowired注入field的时候,不容易发现问题

    依赖不可变: 只有使用构造函数注入才能注入final

    依赖隐藏:使用依赖注入容器意味着类不再对依赖对象负责,获取依赖对象的职责就从类抽离出来,IOC容器会帮你自动装备。这意味着它应该使用更明确清晰的公用接口方法或者构造器,这种方式就能很清晰的知道类需要什么和到底是使用setter还是构造器

    降低容器耦合度: 依赖注入框架的核心思想之一是托管类不应依赖于所使用的DI容器。换句话说,它应该只是一个普通的POJO,只要您将其传递给所有必需的依赖项,就可以独立地实例化。这样,您可以在单元测试中实例化它,而无需启动IOC容器并单独进行测试(使用一个可以进行集成测试的容器)。如果没有容器耦合,则可以将该类用作托管或非托管类,甚至可以切换到新的DI框架。

     另外,在使用构造器的使用能避免注入的依赖是空的情况。

    因为在bean的生命周期里面先执行的是bean的构造器,然后才给bean里面的属性赋值。具体内容在bean的生命周期里面,后面我学习之后按照自己的理解写写。

    阅读全文>>

作者:娜乌西卡lxm分类:【javaEE浏览(175评论(0

2020-12-07 19:53:27

记录一次硬盘崩盘事故带来的灾难

      前言


      2019.12.19  miki

      2018年6月购置的神舟战神Z7-kp7gc笔记本,原价7600多买的,后来想着这个牌子的摸具比较难拆,就让店家帮忙把原装的126的固态升级为一个256的固态系统盘,注意,此时已经掉入了一个坑,由于加大固态盘,店家肯定会收取你好几百的升级费用,但是,虽然收了你的钱,但是不一定为你办事情,它为你升级的某个不知名的sata接口的achive协议的杂牌固态盘,虽然是256G,但是价钱同你的原装126的固态盘价位差不多,原装的126的固态盘则是三星的PCI-E接口的MVMe协议的,速度相对sata接口的要快上好几倍。

      坑1:

      PCIe和SATA的区别如下:

      1、接口类型不同:

      SATA(串行ATA)是SSD使用的一种连接接口,用于与系统进行数据通信。它创建于2003年,这意味着它有很多时间将自己巩固为当今最广泛使用的连接类型之一。

      PCIe(Peripheral Component Interconnect Express)可以视为与主板更直接的数据连接。它通常用于显卡等设备,这些设备也需要极快的数据连接。

      2、速率不同:

      SATA 3.0是最流行的SSD形式,其理论传输速度为6 Gb / s(750 MB / s)。但是由于在编码传输数据时出现了一些物理偏差,它实际上具有4.8 Gb / s(600 MB / s)的实际传输速度。

      PCIe 3.0的有效传输速度为每通道985 MB / s,由于PCIe设备可支持1x,4x,8x或16x通道,因此您可以将潜在的传输速度提高到15.76 GB / s。

      3、接口协议不同:

      接口有AHCI协议与NVMe协议,AHCI较旧,专为HDD和SATA而设计,这意味着使用AHCI的PCIe SSD可能无法发挥其最大潜力。NVMe专为与PCIe配合使用而设计,因此性能更佳。

      坑2:

      机械硬盘崩盘,刚买来的时候就是个小小白,虽然现在也还是个小白,但是刚买过来的时候,机械盘读取的特别慢,我i以为是常态,就没在意,就这样浑浑噩噩的用了一年半,以至于后面的崩盘。最最可惜的是,丢失的数据无价,这几年总结,积累的东西全没了,对此我心疼了好久,好久。所以,大家一定要记得资料定时备份,时刻注意硬盘的状态,防止最后一场空。

      坑3:

      数据恢复,硬盘崩了,找数据恢复一定要谨慎,不要随随便便找一家不知名的数据恢复门店,对方极有可能会将你的硬盘资料加密,或者造成二次伤害,以此为胁迫,漫天要价,让你无法去其他的专业机构去恢复,我这边恢复数据就找了一家公司,叫什么雷超科技有限公司,能力是真烂,让我自己买介质,(就是自己买原装硬盘型号的二手的,磁头一定要好,硬盘坏道一定要少),然后给我恢复了半个月,到头来,数据重要的还是丢失了一半,剩下一部分即使恢复出来了,文件也是损坏的,无法使用。最后跟我要了1000块钱,真是心疼。最后只能根据文件名自己慢慢恢复资料。

      总结

      硬盘保养一定要仔细。

      硬盘是电脑中较容易损坏的配件,但其中有相当一部分的原因是用户操作不当所致。其实,只要在日常使用中注意一些小技巧,便可以减少硬盘出故障的可能性,从而延长其正常的使用寿命。

      1.读写忌断电
      现时硬盘的转速大都是7200转,在进行读写时,整个盘片处于高速旋转状态中,如果忽然切断电源,将使得磁头与盘片猛烈磨擦,从而导致硬盘出现坏道甚至损坏。所以在关机时,一定要注意机箱面板上的硬盘指示灯是否没有闪烁,即硬盘已经完成读写操作之后才可以按照正常的程序关闭电脑。硬盘指示灯闪烁时,一定不可切断电源。

      2.防止受震动
      硬盘是十分精密的存储设备,进行读写操作时,磁头在盘片表面的浮动高度只有几微米;即使在不工作的时候,磁头与盘片也是接触的。硬盘在工作时,一旦发生较大的震动,就容易造成磁头与资料区相撞击,导致盘片资料区损坏或刮伤磁盘,丢失硬盘内所储存的文件数据。因此,在工作时或关机后主轴电机尚未停顿之前,千万不要搬动电脑或移动硬盘,以免磁头与盘片产生撞击而擦伤盘片表面的磁层。此外,在硬盘的安装、拆卸过程中也要加倍小心,防止过分摇晃或与机箱铁板剧烈碰撞。

      3.远离磁场
      磁场是损毁硬盘数据的隐形杀手,因此要尽可能地使硬盘不靠近强磁场,如音箱、手机、电台等,以免硬盘里所记录的资料因磁化而受到破坏。机有信号时会产生强烈磁场,可能磁化附近的硬盘

      4.减少频繁操作
      如果长时间运行一个程序(如大型软件或玩游戏),这时就要注意了,这样磁头会长时间频繁读写同一个硬盘位置(即程序所在的扇区),而使硬盘产生坏道。
      另外,如果长时间使用一个操作系统,也会使系统文件所在的硬盘扇区(不可移动)处于长期读取状态,从而加快该扇区的损坏速度。当然,最好是安装有两个或以上的操作系统交替使用,以避免对硬盘某个扇区做长期的读写操作。

      5.恰当的使用时间
      在一天中,最好不要让硬盘的工作时间超过10个小时,而且不要连续工作超过8个小时,应该在使用一段时间之后就关闭电脑,让硬盘有足够的休息时间。

      6.定期整理碎片
      硬盘工作时会频繁地进行读写操作,同时程序的增加、删除也会产生大量的不连续的磁盘空间与磁盘碎片。当不连续磁盘空间与磁盘碎片数量不断增多时,就会影响到硬盘的读取效能。如果数据的增删操作较为频繁或经常更换软件,则应该每隔一定的时间(如一个月)就运行Windows系统自带的磁盘碎片整理工具,进行磁盘碎片和不连续空间的重组工作,将硬盘的性能发挥至最佳。

      7.增加内存与良好供电
      如果经常使用一些内存需求很大的软件(如图像处理、模型设计等软件),就应该增加内存,来减少大量的文件交换时在硬盘上进行的读写操作,从而延长硬盘的使用寿命。
      另外,一定要使用性能稳定的电源,如果电源的供电不纯或功率不足,很容易就会造成资料丢失甚至硬盘损坏。

    阅读全文>>

作者:娜乌西卡lxm分类:【javaEE浏览(168评论(0

2020-11-26 23:15:40

第一弹,论java技能进阶的浅谈

    1.今天讨论一下对于java技能学习的方法,不仅仅局限于java,对于其他的技能学习同样受用。

        java入门说简单,也简单,现如今网上各种教学视频一搜一大堆,首先学习完javase的基础语法,基本上可以进行一些简单的后端开发,当然,这只是简单的后端开发。现在的系统越来越繁杂,涉及的东西越来越多,只停留在javase基础上,很难去完成一些大型的项目。就我个人而言,难的不是java语言本身的用法,而是对于java的扩展,各种引申出来的框架。

    尤其是对于分布式系统并行其道的今天,高并发,集群成为了主流开发,系统本身的功能逻辑模块基本上已经随处可见,但是抛开事物的本身,去触发其全局的结构,就不是三言两语可以说的清的。

    远程过程调用协议 编辑
    同义词 RPC一般指远程过程调用协议
    RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
    RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
    有多种 RPC模式和执行。最初由 Sun 公司提出。IETF ONC 宪章重新修订了 Sun 版本,使得 ONC RPC 协议成为 IETF 标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算环境(DCE)。

    基于rpc模式的框架,数不胜数。像dubbo,thrift,RMI、Hessian等。

    每一个好用的开源框架都是经过市场和无数程序员筛选出来的,你必须每天要去准备接受各种新的框架,核心的技术,要不停的进行学习,技术在更新,进步,人也得要随时进行充电。

    阅读全文>>

作者:二狗分类:【javase浏览(387评论(0

2018-10-16 13:02:48