在上篇文章学习到了如何搭建一个简单的Spring Boot的项目,这篇文章咱们主要围绕Spring Boot的外部化文件展开,php
首先是一个典型的Spring Boot的项目结构以下css
com +- example +- myproject +- Application.java | +- domain | +- Customer.java | +- CustomerRepository.java | +- service | +- CustomerService.java | +- web +- CustomerController.java
而后咱们全部的资源文件都统一放在resources目录下,结构以下:html
static +- css | +- style.css | +- common.css +- js | +- index.js +- img +- img.png templates +- index.html | +- pages | +- page.html
咱们全部的配置文件都默认放在在resources目录下java
咱们只须要在Spring Boot工程的/src/main/resources目录下建立一个banner.txt文件,而后将ASCII字符画复制进去,就能替换默认的banner了。这是一个自定义的banner.txt文件mysql
${AnsiColor.BRIGHT_GREEN} ______ _ ______ / _____) (_) (____ \ _ ( (____ ____ ____ _ ____ ____ ____) ) ___ ___ _| |_ \____ \ | _ \ / ___)| || _ \ / _ | | __ ( / _ \ / _ \ (_ _) _____) )| |_| || | | || | | |( (_| | | |__) )| |_| || |_| | | |_ (______/ | __/ |_| |_||_| |_| \___ | |______/ \___/ \___/ \__) |_| (_____| ${AnsiColor.BRIGHT_RED} Application Version: ${application.version}${application.formatted-version} Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}
在banner.txt中可使用以下的变量:web
${AnsiColor.BRIGHT_RED}:设置控制台中输出内容的颜色spring
${application.version}:用来获取MANIFEST.MF文件中的版本号sql
${application.formatted-version}:格式化后的${application.version}版本信息数据库
${spring-boot.version}:Spring Boot的版本号apache
${spring-boot.formatted-version}:格式化后的${spring-boot.version}版本信息
打印效果图:
备注:
banner的字符画的生成工具:
什么是YAML:
YAML是一个可读性高,用来表达数据序列的格式。YAML参考了其余多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中得到灵感。Clark Evans在2001年首次发表了这种语言[1],另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者[2]。目前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。引自维基百科
为何使用YML:
在以往的项目中一写关于数据库之类的配置一般都会写在Properties中,YAML的做用与Properties相似都是用来配置一些属性值的,可是YAML相比于Properties要更加简洁,在项目中推荐使用YAML代替Properties,默认名称为application.yml。
Spring Boot 中的yml:
Spring框架提供两个便利的类用于加载YAML文档,YamlPropertiesFactoryBean会将YAML做为Properties来加载,YamlMapFactoryBean会将YAML做为Map来加载。
示例:
environments: dev: url: http://dev.bar.com name: Developer Setup prod: url: http://foo.bar.com name: My Cool App
上面的YAML文档会被转化到下面的属性中:
environments.dev.url=http://dev.bar.com environments.dev.name=Developer Setup environments.prod.url=http://foo.bar.com environments.prod.name=My Cool App
使用:
YAML列表被表示成使用[index]间接引用做为属性keys的形式,例以下面的YAML:
my: servers: - dev.bar.com - foo.bar.com
将会转化到下面的属性中:
my.servers[0]=dev.bar.com my.servers[1]=foo.bar.com
使用Spring DataBinder工具绑定那样的属性(这是@ConfigurationProperties作的事),你须要肯定目标bean中有个java.util.List或Set类型的属性,而且须要提供一个setter或使用可变的值初始化它,好比,下面的代码将绑定上面的属性:
@Component @ConfigurationProperties(prefix="my") public class Config { private List<String> servers = new ArrayList<String>(); public List<String> getServers() { return this.servers; } }
一个配置数据库链接的示例:
spring: datasource: platform: mysql type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false username: root password: root
数据的松散绑定:
@Component @ConfigurationProperties(prefix="person") public class ConnectionSettings { private String firstName; }
下面的属性名都能用于上面的@ConfigurationProperties类:
person.firstName 标准驼峰规则
person.first-name 虚线表示,推荐用于.properties和.yml文件中
PERSON_FIRST_NAME 大写形式,使用系统环境变量时推荐
了解更多的 常见应用属性
了解更多 Spring Boot 中的yml使用
Spring Boot在全部内部日志中使用Commons Logging,可是默认配置也提供了对经常使用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger均可以经过配置使用控制台或者文件输出日志内容。
Spring Boot默认的日志输出格式以下:
2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52 2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms 2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'h
默认状况下,Spring Boot只会将日志记录到控制台而不会写进日志文件。能够经过'logging.level.*=LEVEL'('LEVEL'是TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF中的一个)设置的日志级别。若是除了输出到控制台你还想写入到日志文件,那你须要设置logging.file或logging.path属性。
下面是一个使用YML配置打印路径及级别的例子:
logging: level: org.hibernate: ERROR org.springframework : DEBUG path: /logs file: myapp.log
日志管理
Spring Boot 日志记录 SLF4J
Spring Boot日志管理
在这篇文章中对Spring Boot 中经常使用的外置化配置作了一个简要的介绍,在下一篇文章将会介绍关于 使用配置类。
新年彩蛋:Spring Boot自定义Banner
《Spring Boot参考指南》-配置类
Spring boot(2)-配置详解