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 ...
随机推荐
- Kubenertes资源分配之Request和Limit解析
收录待用,修改转载已取得腾讯云授权 Kubernetes是一个容器集群管理平台,Kubernetes需要统计整体平台的资源使用情况,合理地将资源分配给容器使用,并且要保证容器生命周期内有足够的资源来保 ...
- UIWebView页面的控制(二)
1.UIWebView的内容控制的属性/方法列表 loading属性 确认当前页面是否在读入中 canGoForward属性 确认goForward 方法是否可运行, ...
- 【canvas】四角光阑
代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...
- gedit如何使用代码片段
gedit的片段插件 1 打开这个插件 2 以HTML为例,我们看到触发器是doctype 3则我在编辑一个HTML文档的时候,先输入doctype,再按Tab键,将会自动提示,我选择即可插入 ...
- PHP如何安装和配置Zend Studio
1 网上下载该软件,安装之后关闭三个东西 2 新建一个本地的PHP项目 3 展开左侧的资源树,发现多了一个PHP的相关东西 4 右击"基础知识",新建一个PHP文件并输入以下代码 ...
- ipkg包管理
添加ipkg更新源 你可以通过修改/opt/etc/ipkg.conf去添加 ############################ echo src optware http://ipkg.nsl ...
- GameCenter 使用指南
原地址:http://www.cocoachina.com/gamedev/misc/2010/1022/2229.html GameCenter 为单机游戏为主的 iPhone 游戏平台引入了社会化 ...
- Android 自己定义View (四) 视频音量调控
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24529807 今天没事逛eoe,看见有人求助要做一个以下的效果,我看以下一哥们说 ...
- Linux环境源码编译安装SVN
zhoulf 2015/2/28 原创 安装说明 安装环境:Red Hat Enterprise Linux 安装方式:源码安装 软件:apr-1.5.0.tar.gz.apr-iconv-1.2.1 ...
- python笔记-列表和元组
列表和元组: -可以将列表和元组当成普通的数组 -列表和元组可以保存任意类型的python对象 -通过从0开始的数字索引访问元素 -列表和元组可以存储不同类型的对象 列表和元组的区别: -列表元素使用 ...