spring boot初步尝试
第一次知道spring boot这个项目是为在学习spring的时候,在官网上看到的,那个时候不知道这个项目是干嘛的,也就没再继续关注了
这些天实习没什么事做,一直没用spring框架了,就想着去官网上看看有什么变化,再次看到spring boot这个项目,决定进去看看,反正开学要交的课程设计也就是对数据库的增删改查做个看的过去的小网站,于是就决定在官网上看看怎么用,然后完成课程设计,期间还遇到了不少问题,加上用百度搜索spring boot 结果基本都是hello world,所以遇到一个问题得花很长世间解决,不过为发现在stackoverflow上倒是有不少解决spring boot的问题。
先说下spring boot是用来干嘛的吧,官网上说的是 用来快速构建项目的一个工具(大概是这么个意思)
spring boot基本上是用的注解配置,当然也可以使用xml配置,但是推荐使用注解配置,我认为,如果想使用xml配置的话,就没必要使用sprong boot了
spring boot的注解配置很简单,虽然spring mvc 也有全注解配置,但是为感觉挺复杂的,之前准备学习spring mvc的全注解配置的,但是百度搜索了一下,结果很坑爹,全是使用xml配置,然后再代码里面使用注解 注入 和IOC,这就算是全注解了,对于百度搜索技术问题,我已经要崩溃了,而且接近十年前的结果还保留着,为也真是醉了(吐槽下)
反正个人觉得spring mvc的注解配置比较复杂,spring boot的注解配置挺简单
然后,使用spring boot 推荐使用项目管理工具,我使用的是maven,这样,spring boot就能统一管理jar包了,这也是为比较喜欢的地方,终于不在有jar包冲突了,终于不会再少包了,比如想要使用spring aop的功能,只需要在pom.xml中加上一句
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-aop</artifactId>
- </dependency>
然后它就会把aop使用的jar包都会弄下来,就不用自己一个一个的依赖了,这对于那些对aop不熟的同学非常方便了(比如说我),不用考虑jar包导全美,声明一句就可以直接使用了,为查了下spring aop貌似还有依赖aspectj这个项目,要是对这个不熟悉,少了个jar包,到时候报错了都不知道怎么处理了
ok,说了这么多,先说下为是怎么学习的吧,我是先去官网上,按照上面的quick start,弄一个hello world出来,(百度spring boot得到的结果基本也是别人弄个hello world)
然后我就把spring boot 的reference简单的扫视了一遍,有个大概的了解,然后直接去github上把spring boot 的项目拉下来,里面有各种示例,照着里面学确实挺简单的,遇到问题就去stackoverflow上搜索一下,基本都能够解决
然后就能基本使用spring boot了
之前学习spring mvc 也是在官网上学习的,然后经过这次学习为发现,学习这些技术上的东西去官网上看也不怎么很难看懂(简单使用),因为书上讲的基本都能在官网上学到,为刚开始学习web的时候也是买了一本java web的书学习,首先书上的版本就不是很新,(貌似实际的项目用的版本都不是很新),然后书上讲的也都是一些比较浅显的应用。我认为还是去官网上看,然后把官方的例子代码下载下来看,学习 这样比较有效率
这次学习spring boot 我也学习到了一些其他的知识,比如说aop,这次在里面加了个日志模块,就是想学习下aop,使用的jpa,这个对于小的课程设计是非常方便的,当然,肯定会存在效率问题,但是对于课程设计不存在这些问题。这次在项目里面基本上都打印了log,方便找问题,页面使用的是freemarker,这个在使用spring boot的时候遇到了不少问题,现在还存在的一个问题是session的值在页面中去不到,于是为就在类里面弄了个静态变量,保存,在拦截器post那个方法里面每次都再设置进去,还使用了redis保存了session的值,但是redis在启动的时候,好像是没初始化,一直报错,因此还是只能用静态变量了,看以后可不可以解决,然后使用了spring test,我之前就接触过spring test了
觉得挺好用的(主要是有回滚)
说了这么多,为也把spring boot 的配置弄上来,以后好做个参照
首先是pom的依赖
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.2.5.RELEASE</version>
- </parent>
在pom中加上这个,spring boot推荐这么做,如果项目已经是某个项目的子项目了,也是有解决方案的,官网上有写,为没仔细看,所以也没记住怎么解决
然后想要用spring mvc的话 继续在pom中添加依赖
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- </dependencies>
这样有关mvc的jar包就全部下载下来了
然后就是Hello World了,为就把官网上的例子复制下来
- package hello;
- import org.springframework.boot.*;
- import org.springframework.boot.autoconfigure.*;
- import org.springframework.stereotype.*;
- import org.springframework.web.bind.annotation.*;
- @Controller
- @EnableAutoConfiguration
- public class SampleController {
- @RequestMapping("/")
- @ResponseBody
- String home() {
- return "Hello World!";
- }
- public static void main(String[] args) throws Exception {
- SpringApplication.run(SampleController.class, args);
- }
- }
然后运行这个main方法,在浏览器里面输入localhost:8080就能看到Hello World了
spring boot的所有项目都是从main方法启动的,mvc默认使用tomcat,默认端口8080,tomcat不需要自己配置,它会自动下载tomcat的jar包
想换成jetty启动的话,在pom里面添加依赖
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jetty</artifactId>
- </dependency>
然后再重新启动下,就可以发现是jetty启动了(看打印的日志)
说到tomcat 和jetty 我就不得不吐槽了,不知道为发现的这个问题是不是存在,还是我自己使用错,当为使用tomcat的时候如果有一个action的key是 /user/login(controller上mapping "user", 方法上mapping "login"),另一个action也一样,key为 /goods/add 如果为已经触发了/user/login,并且进入了相应的页面,页面中有个链接触发action(url为 /goods/add) 实际上并不会触发/goods/add 而是请求错误,实际的url看地址栏里面是 /user/goods/add 所以我就无语 首字母为/ 不是代表着根目录吗?所以以前使用tomcat的时候都是在页面上加上上下文地址.
在使用jetty之后,为发现上面这个问题解决了,所以,为现在一直使用jetty启动项目,貌似网上也是都推荐使用jetty的
说远了,继续spring boot
spring 的默认配置文件为application.properties,一些配置和参数都可以写在里面
比如
- #freemarker
- spring.freemarker.suffix=.html
- spring.freemarker.content-type=text/html
- spring.freemarker.expose-session-attributes=true
- spring.freemarker.expose-request-attributes=true
- spring.freemarker.expose-spring-macro-helpers=true
- spring.freemarker.request-context-attribute=request
- spring.freemarker.allow-request-override=true
- spring.freemarker.enabled=true
- #datasource
- spring.datasource.url=jdbc:mysql://127.0.0.1:3306/design?characterEncoding=utf8
- spring.datasource.username=root
- spring.datasource.password=luolei1994
- #jpa
- spring.jpa.show-sql=false
- #server
- server.port=8080
- server.tomcat.uri-encoding = UTF-8
- # REDIS (RedisProperties)
- spring.redis.host=127.0.0.1
- spring.redis.password=luolei
- spring.redis.port=6379
- spring.redis.pool.max-idle=8
- spring.redis.pool.min-idle=0
- spring.redis.pool.max-active=8
- spring.redis.pool.max-wait=-1
- #logger
- logging.path=
- logging.file=
- logging.config=
- #key
- key = luolei
- #test
- index=luolei
这样的话,修改项目的配置是非常方便的
当然,之前的Hello World 配置类上那么多注解也都是不必要了
可以这样写
- @SpringBootApplication
- public class Application extends WebMvcConfigurerAdapter {
- public static void main(String[] args) {
- SpringApplication.run(Application.class,args);
- }
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
- super.addInterceptors(registry);
- registry.addInterceptor(new LoginInterceptor());
- }
- }
可以不用继承任何类,我是因为要添加interceptor,所以继承了WebmvcConfigAdapter
官网上解释 @SpringBootApplication 这个注解,== @Configuration + @EnableAutoConfiguration + @ConponentScan 这三个注解
不过要注意配置类的位置,要在项目的最外层,不然无法扫描到全包
默认的静态文件夹为resourcs 下的static,或者public(可以看官网,不止这两个名字),把一些静态资源(js,css,images)放在里面是不会被拦截的,这样就解决了spring mvc静态资源被拦截的问题了(虽然解决很简单)
今天就说到这里了,都这个点了,还在公司里写博客,
为发现自己的话变多了,没有像之前的几篇博客里面都是代码了,这样挺好的,纯代码没多大意思,重要的是自己的理解,继续努力,争取大四上找个好工作,加油
spring boot初步尝试的更多相关文章
- Spring Boot 初步小结
Spring Boot 是一种开发模式,不涉及任何新的技术 1.了解自动配置的原理 2.常用application.yml文件的配置项 3.Spring Boot 及 第三方提供的各种 starter ...
- Spring Boot初步认识
Spring Boot 来源及背后 Spring Boot开发始于 2013 年,伴随Spring4.0而生,2014 年 4 月发布 1.0.0 版本.当前版本1.4.0,http://projec ...
- spring boot初步
spring boot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程. 该框架使用了特定的方式来进行配置,从而 ...
- liunx 安装ActiveMQ 及 spring boot 初步整合 activemq
源码地址: https://gitee.com/kevin9401/microservice.git 一.安装 ActiveMQ: 1. 下载 ActiveMQ wget https://arch ...
- Spring boot -环境搭建 ,初步接触(1)
1. Eclipse 创建 maven project 项目目录如下: 2. pom.xml 配置文件 <project xmlns="http://maven.apache.or ...
- spring/spring boot/spring cloud开发总结
背景 针对RPC远程调用,都在使用dubbo.dubbox等,我们也是如此.由于社区暂停维护.应对未来发展,我们准备尝试新技术(或许这时候也不算什么新技术了吧),选择使用了spring ...
- Spring Kafka和Spring Boot整合实现消息发送与消费简单案例
本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...
- Spring Boot常用注解总结
Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...
- spring boot多数据源配置(mysql,redis,mongodb)实战
使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...
随机推荐
- c:forEach实现换行
Map<String,String> map = new TreeMap<String,String>(); map.put("key1", "v ...
- Node.js:EventEmitter类
一.EventEmitter 类 Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时 ...
- Android触控屏幕Gesture(GestureDetector和SimpleOnGestureListener的使用教程) 分类:Androidandroid实例
1.当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Vie ...
- iOS公布app到App Store教程
要公布首先须要公布证书,其获取和安装的基本流程和真机调试证书一致,关于真机调试证书的获取和使用能够參考这篇文章.只是如今Xcode7不须要真机调试证书也可实现真机调试了.能够參考这篇文章. 要获取证书 ...
- ansi 控制码表及颜色代码
颜色代码: QUOTE: 字背景颜色范围: 40--49 字颜色: 30--39 40: 黑 30: ...
- 踩坑记:mysql timeStamp默认值0000-00-00 00:00:00 报错
报错现象: 从mysql5.5数据库导出的数据结构放到mysql5.7.10 报错create_time timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00 ...
- C#应用视频教程2.4 OPENGL虚拟仿真介绍
这一部分我们首先实现视图控制(包括了平移/旋转/缩放),前面我们已经讲过,通过lookat一个函数,或者通过translate+rotate两个函数,都能实现视图的控制(两个函数的方式比较简单,但是通 ...
- Eclipse与Android源码中ProGuard工具的使用(代码混淆)
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...
- Java Executor 线程池
- chrome 设置启动时打开特定一组网页
chrome 设置启动时打开特定一组网页 CreateTime--2018年4月25日08:57:00 Author:Marydon 1.使用场景 经常有一些必用的网站,每天打开chrome都要依 ...