SpringBoot实战第六章-Spring Boot核心

SpringBoot实战第六章-Spring Boot核心

本章主要讲Spring Boot的一些核心内容与配置,非常简单粗暴,具体参数配置还在实际项目里实践才能真正使用好这些配置。

1.基本配置

1.1 入口类和@SpringBootApplication

在用intellij创建Spring Boot项目的时候会默认生成一个入口类,名为*Application的类,里面有个main方法,用于启动SpringBoot应用项目。在类的上面有个@SpringBootApplication,是Spring Boot的核心注解,由多个注解组合而成。

SpringBoot实战第六章-Spring Boot核心

其中,

@SpringBootConfiguration点进去发现其实也是一个@Configuration注解,代表着配置类

@EnableAutoConfiguration点进去是一大堆注解,作用是启动自动配置,根据添加的jar包来配置项目的默认配置

@ComponentScan配置扫描包以及过滤规则

1.2 关闭特定的自动配置

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

1.3 定制banner

在src/resources下面新建一个banner.txt,然后在网站http://patorjk.com/software/taag/ 生成自己的banner放进去,再次启动程序,banner自动变成自定义的banner了。

当不想使用banner时,可以使用以下方法,springboot1.5与springboot2.0还是不一样的。当然,这不是唯一的方法,还可以使用注解。

 public static void main(String[] args) {
       //SpringApplication.run(SpringbootApplication.class, args);
       //设置不使用banner,这里的设置跟springboot版本有关系,具体设置看情况
        /*

         * Banner.Mode.OFF:关闭;

         * Banner.Mode.CONSOLE:控制台输出,默认方式;

         * Banner.Mode.LOG:日志输出方式;

         */

        SpringApplication app=new SpringApplication(SpringbootApplication.class);
        //spring boot1.5以上
        app.setBannerMode(Banner.Mode.OFF);
        //spring boot1.5以下
        //app.setShowBanner(false);
        app.run(args);
    }

1.4 Spring Boot配置文件

Spring Boot有一个全局的配置文件,application.properties,也可以改成yaml语言的application.yml。yaml是以数据为中心的语言,在配置数据的时候有面向对象的特征。

例如,配置端口号以及访问路径

application.properties 中:

server.port=9090

server.servlet.path=/girl

或者

application.yml 中:

server:
  port: 9090
  servlet:

    context-path: /girl

1.5 starter pom

根据项目需求添加需要的starter pom,有些被其他的pom包含了,无需重复加入,一些官方的pom截图如下:

SpringBoot实战第六章-Spring Boot核心

1.6 使用xml配置

用@ImportResource来解决,例如:

@ImportResource({“classpath:one-context.xml”,”classpath:tow-context.xml”})

2 外部配置

2.1 命令行参数配置

Spring Boot如果选择基于jar包运行,可以在mvn clean package 将项目打成jar包后用以下的命令来运行:

java -jar xxx.jar

tomcat指定端口,可以加上–server.port=9080

2.2 常规属性配置

这个很简单,在配置文件里配置好之后,可以在代码里获取属性和值,本次实验是基于application.yml,简单配置如下:

book:
  author: han
  name: spring boot

java文件中获取参数:

    @Value("${book.author}")
    private String author;
    @Value("${book.name}")
    private String name;

2.3 类型安全的配置

resources下新建author.properties

author.name=good luck
author.age=19

新建一个实体类,自动获取文件里的属性值

package com.just.springboot.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "author")
@PropertySource("classpath:author.properties")
public class AuthorSettings {
    private String name;
    private Long age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getAge() {
        return age;
    }

    public void setAge(Long age) {
        this.age = age;
    }
}

注意,此处基于springboot2.0的@ConfigurationProperties里并没有location属性,所以要用@PropertySource指定是哪个文件,这个是和以前springboot版本不同的

测试是否成功:

package com.just.springboot;

import com.just.springboot.config.AuthorSettings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ImportResource({"classpath:one-context.xml","classpath:tow-context.xml"})
public class SpringbootApplication {
    @Value("${book.author}")
    private String author;
    @Value("${book.name}")
    private String name;

    @Autowired
    private AuthorSettings authorSettings;

    public static void main(String[] args) {
       //SpringApplication.run(SpringbootApplication.class, args);
       //设置不使用banner,这里的设置跟springboot版本有关系,具体设置看情况
        /*

         * Banner.Mode.OFF:关闭;

         * Banner.Mode.CONSOLE:控制台输出,默认方式;

         * Banner.Mode.LOG:日志输出方式;

         */

        SpringApplication app=new SpringApplication(SpringbootApplication.class);
        //spring boot1.5以上
        app.setBannerMode(Banner.Mode.OFF);
        //spring boot1.5以下
        //app.setShowBanner(false);
        app.run(args);
    }
    @RequestMapping("/")
    public Object index(){
        //return "demo spring boot"+"  author:"+author+" | name:"+name;
        return authorSettings;
    }
}

返回结果:

SpringBoot实战第六章-Spring Boot核心

3.日志配置

springboot默认使用logback作为日志框架,这个讲的很少,具体配置可以参考其他的博客,关于logback有个大神写的很全,可以参考:

https://www.cnblogs.com/warking/p/5710303.html

4.profile配置

这个在实际项目中是经常用到的,通常用来区分项目环境,比如本地、测试、生产环境,全局profile配置使用application-{profile}.properties(.yml文件同理)

比如,我们创建了一个文件application-prod.properties,配置生产环境的参数,当切换到生产环境的时候可以在application.properties文件里加一句,spring.profiles.active=prod

当然,在实际项目中一般是在命令行里指定的环境,–spring.profiles.active=prod

在intellij里启动可以这样指定profile:

SpringBoot实战第六章-Spring Boot核心

5 Spring Boot运行原理

没太看明白,主要是自动配置和bean,有个编码配置的例子,主要是条件注解condition,当碰到的时候再深究吧

package com.just.springboot.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

import java.nio.charset.Charset;
@ConfigurationProperties("spring.http.encoding")
public class HttpEncodingProperties {
    private static final Charset  DEFAULT_CHARSET=Charset.forName("UTF-8");
    private Charset charset=DEFAULT_CHARSET;
    private boolean force=true;

    public Charset getCharset() {
        return charset;
    }

    public void setCharset(Charset charset) {
        this.charset = charset;
    }

    public boolean isForce() {
        return force;
    }

    public void setForce(boolean force) {
        this.force = force;
    }
}
package com.just.springboot.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.filter.OrderedCharacterEncodingFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;

@Configuration
@EnableConfigurationProperties(HttpEncodingProperties.class)
@ConditionalOnClass(CharacterEncodingFilter.class)   //当CharacterEncodingFilter在类路径的情况下
@ConditionalOnProperty(prefix = "spring.http.encoding",value = "enabled",matchIfMissing = true)
public class HttpEncodingAutoConfig {
    @Autowired
    private HttpEncodingProperties httpEncodingProperties;
    @Bean
    @ConditionalOnMissingBean(CharacterEncodingFilter.class) //当容器中没有这个bean的时候创建这个bean
    public CharacterEncodingFilter characterEncodingFilter(){
        CharacterEncodingFilter filter=new OrderedCharacterEncodingFilter();
        filter.setEncoding(this.httpEncodingProperties.getCharset().name());
        filter.setForceEncoding(this.httpEncodingProperties.isForce());
        return filter;
    }
}

其他

通过本章的学习,主要学会了配置相关的东西,在项目例子的基础上改成了yml文件来配置,比较清晰,application.yml配置如下:

#配置端口和servlet访问路径
server:
  port: 8080
  servlet:
    context-path: /

#配置日志
logging:
  file: boot.log
  level:
    org:
      springframework:
        web: debug


#其他参数
book:
  author: han
  name: spring boot
#指定运行环境
spring:
  profiles:
    active: dev
#设置编码
  http:
    encoding:
      charset: UTF-8
      force: false

end.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100303.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php开发工程师面试题知识点总结(一)「建议收藏」

    php开发工程师面试题知识点总结(一)

    2022年2月12日
    38
  • 什么品种的猫最受欢迎?Python爬取猫咪网站交易数据[通俗易懂]

    什么品种的猫最受欢迎?Python爬取猫咪网站交易数据[通俗易懂]本篇文章是关于某化妆品企业的销售分析。从分析思路开始带大家一步步地用python进行分析,找出问题,并提出解决方案的整个流程。以下文章来源于修炼Python作者:叶庭云Python爬虫、数据分析、网站开发等案例教程视频免费在线观看https://space.bilibili.com/523606542一、前言看到可爱的猫咪表情包,总是会忍不住收藏,晒部分图如下:认识的一些朋友也养了猫,比如橘猫、英短、加菲猫之类的,看他们发朋友圈撸猫,老羡慕了,猫咪真的太可爱啦。发.

    2025年11月14日
    0
  • 解决方案:VS2017 无法打开源文件 stdio.h main.h 等头文件[通俗易懂]

    解决方案:VS2017 无法打开源文件 stdio.h main.h 等头文件[通俗易懂]问题描述:在VS2017中运行解决方案是有错误:“E1696 无法打开源文件“stdio.h” ”…原因:这种问题一般发生在该项目代码是在网上下载而来的情况,或者电脑重装新的系统等情况,导致电脑系统与该项目生成时所采用的windowsSDK不同,从而在默认的位置(已发生变化)找不到许多源文件。解决方案:1.在C++项目处(示例为“Fibonacci”),鼠标右击,弹出的菜…

    2022年6月16日
    80
  • HTML基础教程_网页编程html示范

    HTML基础教程_网页编程html示范1.一般我都是在记事本中写HTML文件,也有很多人用DreamWeaver,这个随意~~2.HTML的一般结构如下:—-以开始,以结束,表示之间的文档是HTML—-HTML文档的头部,主要放文档的标题信息未使用CSS的HTML文件—-HTML的主体部分 未使用CSS的HTML文件—-在网页中插入一条水平线未使用CSS的HTML文件

    2022年9月24日
    2
  • linux 查看当前所有环境变量的两种方法_查看环境变量的命令

    linux 查看当前所有环境变量的两种方法_查看环境变量的命令原文From: http://os.51cto.com/art/201005/202463.htm 系统的环境变量在配置webserver以及编写程序都常常被用到,因此了解必要的关于系统变量的知识是非常有必要的,下面关于linux系统变量的查看以及方法。在Windows下,查看环境变量的命令是:set,这个命令会输出系统当前的环境变量。Linux下Linux查看环境变量准确…

    2022年10月1日
    2
  • mpc hc设置_mpc是指什么

    mpc hc设置_mpc是指什么MPC-HC播放器设置启动 MPC-HC ,先设置语言:(最新版本会自动选择对应的系统语言)View-Language-Chinese=>界面变为中文进 视图-选项:播放器:建议勾选「保存设置至.ini文件中」格式:建议勾选全部视频类格式,其中 QuickTime 建议采用「DirectShow」滤镜(双击右侧,在下拉框中即可选择),播放性能会

    2025年11月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号