【Spring Boot】四、Spring Boot基础及环境搭建

1Spring Boot 概述

理念:习惯优于配置,提升开发效率

核心功能:

  1. 内嵌Servlet容器,可以以jar包方式独立运行
  2. 提供start简化maven配置
  3. 自动配置Spring模块
  4. 运行时应用监控

2Spring环境搭建

maven配置:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.2.RELEASE</version>
	</parent>

	<groupId>com.study.spring</groupId>
	<artifactId>springboot2</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springboot2</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- 移除嵌入式tomcat插件 -->
			<!-- <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> 
				<artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> -->
		</dependency>
	</dependencies>
	
</project>

样例程序:

package com.study.spring.springboot2.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * Spring Boot开始程序
 * @author chaozai
 * @date 2018年9月5日
 *
 */
@SpringBootApplication
@RestController
public class HelloApp {
    
    /**
     * 
     * @return
     */
    @GetMapping("/hello")
    public String hello(){
	return "hello spring boot";
    }
    
    public static void main(String[] args) {
	SpringApplication.run(HelloApp.class, args);
    }
    
}

结果:

3基本配置

3.1启动类和@SpringBootApplication

启动方式:SpringApplication.run(HelloApp.class, args);

@SpringBootApplication源码:

核心注解,包含:@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan

/*** Eclipse Class Decompiler plugin, copyright (c) 2016 Chen Chao (cnfree2000@hotmail.com) ***/
package org.springframework.boot.autoconfigure;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurationExcludeFilter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;

@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = { TypeExcludeFilter.class }),
	@Filter(type = FilterType.CUSTOM, classes = { AutoConfigurationExcludeFilter.class }) })
public @interface SpringBootApplication {
    @AliasFor(annotation = EnableAutoConfiguration.class)
    Class<?>[] exclude() default {};

    @AliasFor(annotation = EnableAutoConfiguration.class)
    String[] excludeName() default {};

    @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
    String[] scanBasePackages() default {};

    @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
    Class<?>[] scanBasePackageClasses() default {};
}

3.2自动配置

@EnableAutoConfiguration

@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({ AutoConfigurationImportSelector.class })
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

关闭特定的自动配置,通过exclude,如:

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

3.3定制Banner

/src/main/resources下创建banner.txt

效果:

3.4配置文件:application.properties(yml)

配置端口和context-path

src/main/resources下创建application.properties

server.port=8000
server.servlet.contextPath=/study

效果:

配置属性:

self.author=chaozai

@Value使用

@Value("${self.author}")
private String author;
/**
* 
* @return
*/
@GetMapping("/author")
public String author(){
     return "author:"+author;
}

效果:

3.5starter 组件

Spring官方提供了许多starter模块,可以通过maven引入。

还有些第三方提供的组件,可以去GitHub上淘一淘

3.6使用额外XML配置

添加配置:

@ImportResource({"classpath:some-context.xml"})

3.7命令行配置

如:java -jar x.jar --server.port=9000

3.8属性文件注入

属性文件:src/main/resources/config/message.properties

文件编码:ISO-8859-1

warning.code=110
warning.msg=warning

配置类:

package com.study.spring.springboot2.hello.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
 * 
 * @author chaozai
 * @date 2018年9月6日
 *
 */
@Component
@ConfigurationProperties(prefix = "warning")
@PropertySource("classpath:/config/message.properties")
public class MessageWarningConfiguration {
    
    private String msg;
    private int code;

    public String getMsg() {
	return msg;
    }

    public void setMsg(String msg) {
	this.msg = msg;
    }

    public int getCode() {
	return code;
    }

    public void setCode(int code) {
	this.code = code;
    }
}

访问Controller:

package com.study.spring.springboot2.hello.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.study.spring.springboot2.hello.config.MessageWarningConfiguration;
/**
 * 
 * @author chaozai
 * @date 2018年9月6日
 *
 */
@RestController
public class MessageController {
    
    @Autowired
    MessageWarningConfiguration configuration;

    /**
     * 
     * @return
     */
    @GetMapping("/warning")
    public String warning(){
	System.out.println(configuration.getCode()+":"+configuration.getMsg());
	return configuration.getCode()+":"+configuration.getMsg();
    }
}

结果:

3.9日志配置

默认使用日志框架:logback

配置:src/main/resources/logback-spring.xml

<configuration>
	<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
	<!-- appender是configuration的子节点,是负责写日志的组件。 -->
	<!-- ConsoleAppender:把日志输出到控制台 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d %p (%file:%line\)- %m%n</pattern>
			<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
			<charset>UTF-8</charset>
		</encoder>
	</appender>
	<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
	<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是sys.log -->
	<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名 -->
	<appender name="studylog"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${user.dir}/logs/studylog.log</File>
		<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
		<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
			<!-- 文件名:log/sys.2017-12-05.0.log -->
			<fileNamePattern>${catalina.base}/logs/studylog.%d.%i.log</fileNamePattern>
			<!-- <fileNamePattern>E:/wptserver.%d.%i.log</fileNamePattern> -->
			<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
			<maxHistory>30</maxHistory>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
				<maxFileSize>10MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<!-- pattern节点,用来设置日志的输入格式 -->
			<pattern>
				%d %p (%file:%line\)- %m%n
			</pattern>
			<!-- 记录日志的编码 -->
			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
		</encoder>
	</appender>

	<!-- 控制台输出日志级别 -->
	<root level="info">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="studylog" />
	</root>

</configuration>  

结果:工程路径下将产生logs/studylog.log文件

4.10Profile配置

全局profile使用application-{profile}.properties配置,通过在application.properties中设置spring.profiles.active=prod来指定活动的Profile。

application.properties:

spring.profiles.active=prod

application-prod.properties:

#####################server######################
server.port=80
server.servlet.contextPath=/
#####################self######################
self.author=chaozai

结果:

 


爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qqchaozai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值