您的位置:首页 > 编程语言 > Java开发

spring-boot系列之初识spring-boot

2017-08-27 07:20 239 查看
最近工作比较清闲,就想好好学学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,妈蛋还真没有,我就纳了闷了,新建了个项目,然后把当前项目办过去,默认都有的啊。于是乎想到buildpath。两个项目一对比。发现这个文件夹被添加到另外里了。就是不包含在classpath里了。然后在想想。WEB-INF这个文件夹是我在source里删除,然后又到项目里新建的。于是明白了在那里做的错误操作就要在哪里找回(只要选中对应的选项,然后再通过右边的编辑按钮编辑下就OK了)。真正的技术在于细节,在于理解。应用只是只是技术的组装。可能业务人员比技术人员更能胜任。第二个问题跟spring-boot的相关性就大点了,花了我更多的时间。除了上面的那个问题和前一篇博客。到目前为止一直都在这个问题中。现在搬出来,也希望能得到高人指点。前面说了最近有点闲,加上公司是做crm客户关系管理系统的。用到的技术涉及到spring-boot 、beetl、mybatis-plus、redis、mogodb、mysql等技术。主要功能有系统管理,会员管理、活动管理、积分管理等模块。我呢就是闲的没事干,想用srping-boot+thymeleaf+mybatis-plus+mysql先把系统管理那部分给做了,后续再去集成大数据部分。关键是上面的技术基本都没接触过。最近刚用spring-boot做了一个webDemo。然后现在想集成热部署(spring-boot-devtools)。愣是百度加自测试弄到现在,也只是勉强说服自己集成到项目里,未来也许有用吧。先说下百度经历,copy军太多,找到的文章太多,但是内容都大致相同。几分钟集成成功,几个小时也没理解为什么要集成他。先把自己的理解加网上获得的都整理下贴出来。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 + JDK8pom.xml<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.RELEASE</version></parent><!-- properties配置的内容会替代spring-boot自带的对应内容 --><properties><java.version>1.8</java.version></properties>
<dependencies>
  	<!-- 开发者工具 -->
  	<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
    
  	<dependency>
  		<groupId>org.springframework.boot</groupId>
  		<artifactId>spring-boot-starter-web</artifactId>
  	</dependency>
 
  	<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
 
  </dependencies>
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的价值吧,也不很确定,希望用过的的,有经验的人路过能说两句,帮忙解惑。谢谢,谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring-boot java