专栏首页悠扬前奏的博客Spring Boot-2.配置基础

Spring Boot-2.配置基础

1. 基本配置

1.1 入口类

Spring Boot通常以一个名为*Application的类作为入口类,入口类里的main方法(即标准的Java应用的入口方法)作为Spring Boot应用项目的入口方法。 @SpringBootApplication是Spring Boot的核心注解,这是一个组合注解,源码为:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {
    Class<?>[] exclude() default {};
    String[] excludeName() default {};
    String[] scanBasePackages() default {};
    Class<?>[] scanBasePackageClasses() default {};
}

因此,不使用@SpringBootApplication注解,可以在入口类上直接使用@Configuration、@EnableAutoConfiguration、@ComponentScan。 其中@EnableAutoConfiguration让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置。

Spring Boot 会自动扫描@SpringBootApplication所在类的同级包,以及包下的Bean。因此,建议入口类放置在groupId+artifactId组合的包名下。

1.2 自动配置的关闭

关闭特定的自动配置应该使用@SpringBootApplication注解的exclude参数。 例如:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

1.3 Banner

在Spring Boot启动的时候有一个默认的启动图像:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.9.RELEASE)

1.3.1 修改Banner

  1. 工具网站生成字符。
  2. 在/src/main/resources下新建banner.txt,将生成的字符复制到这个文件中。
  3. 再次启动程序,可以看到引导图案变成指定的样式。

1.3.2关闭Banner

  1. 在main函数中设置:
SpringApplication app = new SpringApplication(DemoApplication.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);

1.4 Spring Boot的配置文件

Spring Boot的全局配置文件application.properties或者application.yml,位于/src/main/resources目录或类路径的/config下。

1.5 starter pom

通过使用应用场景所需要的start pom 。相关的技术配置将会消除,可以得到Spring Boot提供的自动配置的Bean。

1.5.1 官方提供的starter pom

名称

描述

spring-boot-starter

springboot核心starter ,包括自动配置,日志,yaml配置文件的支持

spring-boot-starter-actuator

准生产特性,用来监控和管理应用

spring-boot-starter-remote-shell

提供基于ssh协议的监控和管理

spring-boot-starter-amqp

使用spring-rabbit支持AMQP

spring-boot-starter-aop

使用AOP和AspectJ支持面向切面编程

spring-boot-starter-batch

对springBatch支持

spring-boot-starter-cache

对SpringCache抽象的支持

spring-boot-starter-cloud-connectors

对云平台(Cloud Foundry ,Heroku)提供的服务简化的连接方式

spring-boot-starter-data-elasticsearch

对spring-data-elasticsearch的支持

spring-boot-starter-data-gemfire

对分布式存储GemFire的支持

spring-boot-starter-data-jpa

对jpa的支持,包括spring-data-jap,spring-orm,Hibernate

spring-boot-starter-data-mongodb

通过spring-data-mongodb对mongodb的支持

spring-boot-starter-data-rest

通过spring-data-rest-webmvc对spring Data reposity暴露为REST形式的服务

spring-boot-starter-data-solr

通过spring-data-solr对Apache Solr的支持

spring-boot-starter-data-freemaker

对Freemaker的支持

spring-boot-starter-data-groovy-templates

对Groovy模版引擎的支持

spring-boot-starter-hateoas

通过spring-hateoas对基于HATEOAS的REST形式的网络服务的支持

spring-boot-starter-hornetq

通过HornetQ对JMS的支持

spring-boot-starter-integration

对系统集成框架spring-integration的支持

spring-boot-starter-jdbc

对JDBC数据库的支持

spring-boot-starter-jersey

对Jersey REST形式的网络服务的支持

spring-boot-starter-jta-atomikos

通过Atomikos对分布式事物的支持

spring-boot-starter-jta-bitronix

通过Bitronix对分布式事物的支持

spring-boot-starter-mail

对spring mail的支持

spring-boot-starter-mobile

对spring mobile的支持

spring-boot-starter-mustache

对Mustache模版引擎的支持

spring-boot-starter-redis

对键值对内存数据库Redis的支持,包含spring-redis

spring-boot-starter-security

对spring-security的支持

spring-boot-starter-social-facebook

通过spring-social-facebook 对facebook的支持

spring-boot-starter-social-twitter

通过spring-social-twitter 对twitter的支持

spring-boot-starter-social-linkedin

通过spring-social-linkedin 对linkedin的支持

spring-boot-starter-thymeleaf

对Thymeleaf模版引擎的支持,包含于spring的整合配置

spring-boot-starter-velocity

对velocity模版引擎的支持

spring-boot-starter-web

对web项目开发的支持,包含tomcat和spring-webmvc

spring-boot-starter-Tomcat

springboot默认容器tomcat

spring-boot-starter-Jetty

jetty容器

spring-boot-starter-undertow

Undertow容器

spring-boot-starter-logging

默认日志输出框架Logback

spring-boot-starter-log4j

支持log4j

spring-boot-starter-websocket

websocket的支持

spring-boot-starter-ws

spring webservice的支持

1.5.2 第三方starter pom

存在第三方为Spring Boot编写的starter pom。

1.6 使用xml配置

Spring Boot提倡零配置,即无xml配置,但是需要使用xml配置的话,可以通过Spring提供的@ImportResource来加载xml,例如:

@OmportResource({"classpath:some-context.xml","classpath:another-context.xml"})

2.外部配置

Spring Boot 允许使用properties文件,yaml文件或者命令行参数作为外部配置。

2.1命令行参数配置

Spring Boot可以基于jar包运行的,打包成jar包的程序可以通过以下命令运行:

java -jar xx.jar

因此可以通过设置java命令的参数为项目设定参数,例如修改Tomcat端口号:

java -jar xx.jar --server.port=9090

2.2 常规属性配置

在Spring Boot中,在application.properties文件中定义属性,直接使用@Value即可注入。

例如: (1)在application.properties中添加属性:

boot.author=asd
book.name=spring boot

(2)在类中可以用以下方式获取属性值:

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

2.3 类型安全的配置

Spring Boot可以通过@ConfigurationProperties将properties属性和一个Bean及其属性关联,从而实现类型安全的配置。 例如: (1)在application.propertie中添加

author.name=asd
author.age=25

(2)在Bean进行关联

@Component
@ConfigurationProperties(perfix = "author")
public class AuthorSettings {
    private String name;
    private Long age;
    public String getName() {
        return name;
    }
    public Long getAge() {
        return age;
    }

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

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

(3)在类中引用

@RestController
@SpringBootApplication
public class DemoApplication {

    @Autowired // 使用@Autowired直接注入
    private AuthorSettings authorSettings;

    @RequestMapping("/")
    public String index(){
        return "Author name is " + authorSettings.getName() + ", and the age is "  + authorSettings.getAge() + ".";
    }
    public static void main(String[] args){
        SpringApplication.run(DemoApplication.class,args);
    }
}

3. 日志配置

  • Spring Boot支持Java Util Logging、Log4J,Log4J2和Logback作为日志框架。
  • 选择框架后,Spring Boot会为当前日志框架的控制输出以及文件输出做好设置。
  • 默认情况下,Spring Boot使用Logback作为日志框架。
  • 配置日志文件:
logging.file=D:/logs/log.log
  • 配置日志文件
logging.level.org.springframework.web = DEBUG

4. Profile配置

*Profile是Spring根据不同的环境的不同配置来提供支持的。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

推荐阅读

  • 远程办公经验为0,如何将日常工作平滑过度到线上?

    我是一名创业者,我的公司(深圳市友浩达科技有限公司)在2018年8月8日开始运营,现在还属于微型公司。这个春节假期,我一直十分关注疫情动向,也非常关心其对公司带来的影响。

    TVP官方团队
    TAPD 敏捷项目管理腾讯乐享企业邮箱企业编程算法
  • 数据中台,概念炒作还是另有奇效? | TVP思享

    作者简介:史凯,花名凯哥,腾讯云最具价值专家TVP,ThoughtWorks数据智能业务总经理。投身于企业数字化转型工作近20年。2000年初,在IBM 研发企业级中间件,接着加入埃森哲,为大型企业提供信息化架构规划,设计,ERP,云平台,数据仓库构建等技术咨询实施服务,随后在EMC负责企业应用转型业务,为企业提供云迁移,应用现代化服务。现在专注于企业智能化转型领域,是数据驱动的数字化转型的行业布道者,数据中台的推广者,精益数据创新体系的创始人,2019年荣获全球Data IQ 100人的数据赋能者称号,创业邦卓越生态聚合赋能官TOP 5。2019年度数字化转型专家奖。打造了行业第一个数据创新的数字化转型卡牌和工作坊。创建了精益数据创新方法论体系构建数据驱动的智能企业,并在多个企业验证成功,正在向国内外推广。

    TVP官方团队
    大数据数据分析企业
  • 扩展 Kubernetes 之 CRI

    使用 cri-containerd 的调用流程更为简洁, 省去了上面的调用流程的 1,2 两步

    王磊-AI基础
    Kubernetes
  • 扩展 Kubernetes 之 Kubectl Plugin

    kubectl 功能非常强大, 常见的命令使用方式可以参考 kubectl --help,或者这篇文章

    王磊-AI基础
    Kubernetes
  • 多种登录方式定量性能测试方案

    最近接到到一个测试任务,某服务提供了两种登录方式:1、账号密码登录;2、手机号+验证码登录。要对这两种登录按照一定的比例进行压测。

    八音弦
    测试服务 WeTest
  • 线程安全类在性能测试中应用

    首先验证接口参数签名是否正确,然后加锁去判断订单信息和状态,处理用户增添VIP时间事务,成功之后释放锁。锁是针对用户和订单的分布式锁,使用方案是用的redis。

    八音弦
    安全编程算法
  • 使用CDN(jsdelivr) 优化博客访问速度

    PS: 此篇文章适用于 使用 Github pages 或者 coding pages 的朋友,其他博客也类似.

    IFONLY@CUIT
    CDNGitGitHub开源
  • 扩展 Kubernetes 之 CNI

    Network Configuration 是 CNI 输入参数中最重要当部分, 可以存储在磁盘上

    王磊-AI基础
    Kubernetes
  • 聚焦【技术应变力】云加社区沙龙online重磅上线!

    云加社区结合特殊时期热点,挑选备受关注的音视频流量暴增、线下业务快速转线上、紧急上线防疫IoT应用等话题,邀请众多业界专家,为大家提供连续十一天的干货分享。从视野、预判、应对等多角度,帮助大家全面提升「技术应变力」!

    腾小云
  • 京东购物小程序购物车性能优化实践

    它是小程序开发工具内置的一个可视化监控工具,能够在 OS 级别上实时记录系统资源的使用情况。

    WecTeam
    渲染JavaScripthttps网络安全缓存

扫码关注云+社区

领取腾讯云代金券