spring boot初步尝试

第一次知道spring boot这个项目是为在学习spring的时候,在官网上看到的,那个时候不知道这个项目是干吗的,也就没再继续关注了css

这些天实习没什么事作,一直没用spring框架了,就想着去官网上看看有什么变化,再次看到spring boot这个项目,决定进去看看,反正开学要交的课程设计也就是对数据库的增删改查作个看的过去的小网站,因而就决定在官网上看看怎么用,而后完成课程设计,期间还遇到了很多问题,加上用百度搜索spring boot 结果基本都是hello world,因此遇到一个问题得花很长世间解决,不过为发如今stackoverflow上却是有很多解决spring boot的问题。html

先说下spring boot是用来干吗的吧,官网上说的是 用来快速构建项目的一个工具(大概是这么个意思)java

spring boot基本上是用的注解配置,固然也可使用xml配置,可是推荐使用注解配置,我认为,若是想使用xml配置的话,就不必使用sprong boot了mysql

spring boot的注解配置很简单,虽然spring mvc 也有全注解配置,可是为感受挺复杂的,以前准备学习spring mvc的全注解配置的,可是百度搜索了一下,结果很坑爹,全是使用xml配置,而后再代码里面使用注解 注入 和IOC,这就算是全注解了,对于百度搜索技术问题,我已经要崩溃了,并且接近十年前的结果还保留着,为也真是醉了(吐槽下)git

反正我的以为spring mvc的注解配置比较复杂,spring boot的注解配置挺简单github

而后,使用spring boot 推荐使用项目管理工具,我使用的是maven,这样,spring boot就能统一管理jar包了,这也是为比较喜欢的地方,终于不在有jar包冲突了,终于不会再少包了,好比想要使用spring aop的功能,只须要在pom.xml中加上一句web

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
 </dependency>

而后它就会把aop使用的jar包都会弄下来,就不用本身一个一个的依赖了,这对于那些对aop不熟的同窗很是方便了(好比说我),不用考虑jar包导全美,声明一句就能够直接使用了,为查了下spring aop貌似还有依赖aspectj这个项目,要是对这个不熟悉,少了个jar包,到时候报错了都不知道怎么处理了redis

ok,说了这么多,先说下为是怎么学习的吧,我是先去官网上,按照上面的quick start,弄一个hello world出来,(百度spring boot获得的结果基本也是别人弄个hello world)spring

而后我就把spring boot 的reference简单的扫视了一遍,有个大概的了解,而后直接去github上把spring boot 的项目拉下来,里面有各类示例,照着里面学确实挺简单的,遇到问题就去stackoverflow上搜索一下,基本都可以解决sql

而后就能基本使用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静态资源被拦截的问题了(虽然解决很简单)

今天就说到这里了,都这个点了,还在公司里写博客,

为发现本身的话变多了,没有像以前的几篇博客里面都是代码了,这样挺好的,纯代码没多大意思,重要的是本身的理解,继续努力,争取大四上找个好工做,加油

相关文章
相关标签/搜索