Spring Boot学习记录(一)–环境搭建


最近趁着下班闲时间学习spring-boot,记录下学习历程,因为要做项目,所以是用到什么了就去学什么,所以看起来可能有点乱,不过能用到的东西都会写进去,最后打算实战一个API管理平台,下面开始环境配置.


1.工程结构

使用maven建立一个普通结构,因为spring-boot内嵌tomcat,所以打包只需要打包成jar就可以直接运行,所以并不像以前那样建立WEB程序了,目录如下,类可以先建立好放在那: 
这里写图片描述

2.引入maven依赖

根据官方教程提示,直接引入parent就可以使用spring-boot,告别了之前的spring繁琐的依赖配置.在pom.xml中加入如下配置:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

3.编写DEMO

1.编写实体类DemoEntity

/**
 * @author Niu Li
 * @date 2016/8/9
 */
public class DemoEntity {
    private String id;
    private String username;
    private String password;
    //省略set和get方法
}

2.编写控制器HelloController,返回json类型

/**
 * @author Niu Li
 * @date 2016/8/9
 */
@Controller
public class HelloController {
    /**
     * 测试hello
     * @return
     */
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public @ResponseBody DemoEntity hello(){
        DemoEntity entity = new DemoEntity();
        entity.setId("1");
        entity.setUsername("niuli ");
        entity.setPassword("123456");
        return entity;
    }
}

3.编写启动入口 
既然是jar执行程序,则需要一个main函数作为启动入口,在Application.java中加入如下代码:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 默认启动类
 */
@SpringBootApplication
public class Application
{
    public static void main( String[] args )
    {
        SpringApplication.run(Application.class, args);
    }

}

4.测试访问 
spring-boot默认启动在8080端口,直接访问地址即可:

这里写图片描述

4.配置logger

1.spring-boot的日志输出默认是多彩形式,会根据你电脑自身支持不支持来判断,当然也可以在application.properties中配置

spring.output.ansi.enabled

NEVER:禁用ANSI-colored输出(默认项) 
DETECT:会检查终端是否支持ANSI,是的话就采用彩色输出(推荐项) 
ALWAYS:总是使用ANSI-colored格式输出,若终端不支持的时候,会有很多干扰信息,不推荐使用

2.spring-boot默认显示info级别及其以上的日志,你可以使用

logging.level.root = debug
//或者
debug=true

给自己项目自定义级别可以使用

logging.level.cn.mrdear=debug

这样的话声明你自己包下的日志debug及其以上级别都会输出.

3.使用logger 
spring-boot自动引入了使用slf4j和logback,使用日志不需要自己再引入包.修改之前的controller如下:

import cn.mrdear.entity.DemoEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author Niu Li
 * @date 2016/8/9
 */
@Controller
public class HelloController {

    private Logger logger = LoggerFactory.getLogger(HelloController.class);
    /**
     * 测试hello
     * @return
     */
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public @ResponseBody DemoEntity hello(){
        DemoEntity entity = new DemoEntity();
        entity.setId("1");
        entity.setUsername("niuli ");
        entity.setPassword("123456");
        logger.debug("这是debug信息");
        logger.info("这是info信息");
        logger.warn("这是warn信息");
        logger.error("这是error信息");
        return entity;
    }
}

这里写图片描述

4.写入log文件 
需要在application.properties中配置logging.file或logging.path属性

logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log 
logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log 
* 日志文件会在10Mb大小的时候被截断,产生新的日志文件,默认级别为:ERROR、WARN、INFO *

5.自定义配置

spring支持log自定义配置,你只需要把相应的log配置文件放入classpath目录下,就可以覆盖点spring-boot本身的配置,当然命名要遵循如下规范:

Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml

替换后的配置就和之前配置logger方式一模一样了

5.自定义json解析器

博主喜欢使用fastjson来作为json解析器,因为简单易用. 
原理是替换到spring的HttpMessageConverters,在这里面注入自己的转换器即可.

首先引入fastjson依赖:

    <!--fast json start-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.14</version>
    </dependency>
    <!--fast json end-->

在conf包下建立WEBMessageConvert.java

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;

/**
 * 使用fastjson作为消息转换器
 * @author Niu Li
 * @date 2016/8/9
 */
@Configuration
public class WEBMessageConvert {
    /**
     * 使用bean注入,才能使其有效果,验证的话就在Entity字段中使用fastjson的
     * 注解@JSONField(serialize = false),转换出来的信息不含该字段,则成功
     * @return
     */
    @Bean
    public HttpMessageConverters customConverters() {
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        fastConverter.setFastJsonConfig(fastJsonConfig);
        return new HttpMessageConverters((HttpMessageConverter<?>) fastConverter);
    }
}

6.banner替换

banner就是spring-boot启动时打出来的信息

这里写图片描述

替换很简单,就是在classpath目录下建立一个banner.txt,这样的话spring-boot会自动读取这个配置,然后输出.如果想关闭的话在application中配置:

spring.main.banner-mode=off

即可.


7.热部署配置

热部署的话只需要把maven插件添加个依赖

    <!--spring boot plugin start-->
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <!--配置热部署-->
        <dependencies>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
            <version>1.2.0.RELEASE</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
    <!--spring boot plugin end-->

这样就实现热部署了,另外热部署的话需要自己手动编译才能实现热部署.

猜你喜欢

转载自blog.csdn.net/weixin_42600182/article/details/82111327