spring-boot系列之初识spring-boot

最近工作比较清闲,就想好好学学spring-boot,由于初学,写的几个demo也比较lower,就不拿出来现了。主要扯扯蛋,先记录下现阶段在对spring-boot的一个认知吧。因为是认知,不代表一定正确,如有错误,希望路过的大婶能给指点下,不胜感激。

首先,我觉得spring-boot是个高级应用,不是什么新技术。是对spring生态的一个整合,spring-boot相对与spring基础犹如javaEE相对与java基础,spring-boot相对与spring插件(如spring-mvc等)犹如 javaEE相对与javaEE规范组成部分(如jsp)。当然我这只是打个比方,只是想说明,他们都是由技术细节堆积而成的应用框架。理解要站在高处看(spring-boot),想学好还是的扎扎实实的去搞定IOC和DI以及基于他们的实现插件。spring-boot是好用,能节约大量的编程时间,但是没有搞明白技术只是网上套用,一旦遇到问题可能就会花去更多的时间去处理。

下面记录几个简单的我却花了将近一天的时间处理的几个问题。

第一个问题可能和spring-boot关系不是很大,但是花了我快2个小时才解决,感觉得记录下。配置thymeleaf然后说找不到。错误提示已经显示classpath中没有,但是我愣是没去管classpath有没有,各种百度找thymeleaf的配置。然后各种一样的配置,各种解决不了我的问题,差点把哥哥急哭了。后来实在不行了。感觉百度不够强大,就将信将疑的去逛了下classpath,妈蛋还真没有,我就纳了闷了,新建了个项目,然后把当前项目办过去,默认都有的啊。于是乎想到build path。两个项目一对比。发现这个文件夹被添加到另外里了。就是不包含在classpath里了。然后在想想。WEB-INF这个文件夹是我在source里删除,然后又到项目里新建的。于是明白了在那里做的错误操作就要在哪里找回(只要选中对应的选项,然后再通过右边的编辑按钮编辑下就OK了)。真正的技术在于细节,在于理解。应用只是只是技术的组装。可能业务人员比技术人员更能胜任。spring-boot系列之初识spring-boot_第1张图片


第二个问题跟spring-boot的相关性就大点了,花了我更多的时间。除了上面的那个问题和前一篇博客。到目前为止一直都在这个问题中。现在搬出来,也希望能得到高人指点。前面说了最近有点闲,加上公司在用springboot开发crm客户关系管理系统。最近刚用spring-boot做了一个webDemo。然后现在想集成热部署(spring-boot-devtools)。愣是百度加自测试弄到现在,也只是勉强说服自己集成到项目里,未来也许有用吧。

先说下百度经历,找到的文章太多,但是内容都大致相同。几分钟集成成功,几个小时也没理解为什么要集成他。先把自己的理解加网上获得的都整理下贴出来。

1.原理是两个类加载器:base classload 加载不变的依赖。  restart classload 加载变化的东西主要就是java主代码和一些测试代码了(src/java/main路径下的代码)

2. META-INF/spring-devtools.properties,都是为了添加另外(即把某些类添加到restart classload,或者将某些类从restart classload里排除)

3. restart classload 默认监听classpath里的一切变动,编译后的文件会引起重启,资源文件会引起重载Live Reload,所以要打开自动编译,当修改java时引起classpath变化

上面是从网上获取的只是,然后经过我自己的转述。但是我反复测试的结果和上面的理论却不一样。在贴下配置代码前,还是先说下本地的大环境:

window 7 + eclipse4.5/4.6 +maven3.3 + JDK8

pom.xml


  org.springframework.boot
  spring-boot-starter-parent
  1.5.6.RELEASE



  1.8
  
      
      
          org.springframework.boot
          spring-boot-devtools
          true
      
      
          org.springframework.boot
          spring-boot-starter-web
      
      
          org.springframework.boot
          spring-boot-starter-thymeleaf
      
  
application.yml配置
spring:
    devtools:
        restart:
            enabled: true #是否开启开发者工具(true/false)
            additional-paths: src/main/java
#            exclude: static/**,WEB-INF/**

网上很多人说配置 spring-boot-starter-parent + devtools + fork就可以了。我不知道他们是什么环境,但是我本地测试是没什么用,可能是IDE能自动fork子进程吧,所以不需要配置fork。从代码可以看出,我这种环境需要在pom中配置 devtools 然后在项目配置文件中通过additional-paths配置那些需要restarter的资源(由restarter loader处理),exclude配置那些在热部署是不需要重新部署的资源(由base loader 处理)。理论上restarter会监听整个classpath,我又打开自动编译了,只要改动java文件classpath就会有变化,就会重启啊。所以现在都不知道为什么,好纠结。上面的显示配置只是暂时解决问题。

在测试中我发现有问题,在运行模式下。即使我上面配置的可以热部署了,但是我改玩java类等部署玩后,去刷新页面,也是完全没用,还是得手动重启在刷新页面,才会看到页面变化。在调试模式下不管有没有热部署,我改完java类刷新页面都会立即看到页面变化。

哦,说一下,我是用springBootApplication启动的。我想是不是不管有没有热部署(devtools),spring-boot内嵌tomcat一直都是支持热部署的而且是全部署的。就像我们配置外部tomcat时总是会配置为热部署一样。而配置devtools时的热部署,只是部分部署(即部署指定要部署的那些资源)。由于本地项目现在还比较小,目前测下来有没有devtools效果差不多。项目如果变大的话,由于spring-boot是高层应用,依赖比较多。才能体现出来devtools的价值吧,也不很确定,希望用过的的,有经验的人路过能说两句,帮忙解惑。谢谢,谢谢


你可能感兴趣的:(java)