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 ...
随机推荐
- MapReduce API 基本概念
在正式分析新旧 API 之前, 先要介绍几个基本概念. 这些概念贯穿于所有 API 之中,因此, 有必要单独讲解. 1.序列化 序列化是指将结构化对象转为字节流以便于通过网络进行传输或写入持久存储的过 ...
- http响应报文,如果响应的内容比较大,客户端怎么样判断接收完了呢?
1. http协议有正文大小说明的content-length 2. 或者分块传输chunked的话 读到0\r\n\r\n 就是读完了 ---------------------------- ...
- Transform数据权限浅析2之利用Java完成权限设置
一:项目背景 1.1:cognos的两种建模工具 为了更好的满足客户的需求,提升报表展现的效率,一种建模工具已经不能满足报表开发和展现的需要.Cognos除了给我们提供了一种基于关系型数据库的建模工具 ...
- [AngularJS] $scope.$warchCollection
For the $watch in last article, we watch 'user.password', actually it is a string. If you watch 'use ...
- 【树莓派】树莓派raspi-config配置
发现有些树莓派盒子,输入的结果和键盘的实际字符有差异,比如输入 | ,结果显示为 ~. 这是因为树莓派的键盘设置问题. 可以通过设置raspi-config进行配置: 第一次使用树莓派的时候需要进行一 ...
- 如何使用飞秋FeiQ实现两电脑通信(或传输文件)
如何使用飞秋FeiQ实现两电脑通信(或传输文件) 1. 在两天电脑上,分别按照飞秋FeiQ 我使用的绿色飞秋2013正式版 2. 使用一根网线,将两电脑的网口连接一起 3. 设置飞秋FeiQ的端口号不 ...
- uva10401Injured Queen Problem(递推)
题目:uva10401Injured Queen Problem(递推) 题目大意:依然是在棋盘上放皇后的问题,这些皇后是受伤的皇后,攻击范围缩小了.攻击范围在图中用阴影表示(题目).然后给出棋盘的现 ...
- SpringMVC请求参数和响应结果全局加密和解密
前提 前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数据报文包括三个部分: 1.t ...
- ant design pro (六)样式
一.概述 参看地址:https://pro.ant.design/docs/style-cn 基础的 CSS 知识或查阅属性,可以参考 MDN文档. 二.详细介绍 2.1.less Ant Desig ...
- UNIX网络编程卷2进程间通信读书笔记(一)—概述
http://blog.chinaunix.net/uid-12868584-id-92807.html 写的灰常好,我就转载了 一.什么是进程间通信 IPC是进程间通信的简称,所谓进程通信,就是不同 ...