SpringBoot--外部配置
常见的SpringBoot外部配置有常规属性配置、类型安全的配置、日志配置、Profile配置
一、常规属性配置
在spring中,注入properties中的配置值时,需要两步:
- 通过注解@PropertySource指明 properties文件的位置
- 通过注解@Value注入配置值
而在springboot中,只要将配置项加载配置文件中,就可以通过注解@Value注入
例如我在application.properties中增加如下配置:
demo:
userName: zhangsan
message: HelloWorld
然后在类中就可以直接通过注解@Value注入并获取到值了:
@Value("${demo.userName}")
private String userName; @Value("${demo.message}")
private String message;
二、类型安全的配置
上面的配置方式,在配置项很多的情况下,如果每个都用注解@Value注入就很繁琐了,针对这种情况,springboot提供了一种称之为基于安全类型的配置方式,通过注解@ConfigurationProperties将properties(或者yml)属性和一个bean及其属性关联,从而实现类型安全的配置。下面举一个例子说明,本次我使用yml配置文件。
1、首先新建一个自定义的配置文件user.yml
user:
userName: zhangsan
age: 26
sex: male
2、创建一个名为UserSettings.java的bean,与配置项中的属性进行关联
package com.hyc.settings; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component; /**
* 基于类型安全的配置:将属性中的配置映射成一个bean
* 注解@PropertySource指定自定义配置文件的路径
* 注解@ConfigurationProperties加载配置文件中的配置项,prefix指定配置的前缀
*/
@Component
@PropertySource(value = "classpath:user.yml")
@ConfigurationProperties(prefix = "user")
public class UserSettings {
private String userName; private int age; private String sex; public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
}
}
上面的bean中,有三个注解,分别代表着:
- @Component注解使这个类能够被扫描到;
- @PropertySource注解中的value属性定义对应的配置文件的路径,如果是在application.yml(或application.properties)中,则不需要此注解;
- @ConfigurationProperties注解将加载指定配置文件中的配置项,并通过属性prefix指定配置的前缀,本例中是user
需要注意的是,这种方式需要增加下面的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
3、注入配置
直接在需要使用配置项值的类中,通过注解@Autowired注入bean,并通过调用它的get方法来获取:
/**
* 将配置项映射类自动注入,就能调用它的get方法获取配置值了
*/
@Autowired
private UserSettings user; @RequestMapping("/")
String index() { return "name: " + user.getUserName() + " age:" + user.getAge() + " sex:" + user.getSex();
}
明显这种方式看上去更加整洁清晰。
三、日志配置
SpringBoot支持Java Util Logging、 Log4J、SLF4J和Logback多种日志框架,但是默认是logback,这个可以在日志依赖配置
spring-boot-starter-logging-2.1.0.RELEASE.pom中找到,配置如下:
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.1.0.RELEASE</version>
<name>Spring Boot Logging Starter</name>
<description>Starter for logging using Logback. Default logging starter</description>
<url>https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-logging</url>
上面红色部分描述了springboot默认使用的是LogBack,但是在这个pom文件中,已经加入了其他日志的依赖,如下:
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.11.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.25</version>
<scope>compile</scope>
</dependency>
</dependencies>
所以我们使用时不需要额外增加相关日志框架的依赖了!!!
- 日志级别及优先级为trace<debug<info<warn<error;
- 默认是info级别,就是会输出优先级大于等于info的日志;
- 日志默认输出到控制台,可以设置输出到文件,并配置文件路径;
下面以上述三点为例,在application.yml中进行配置:
logging:
file: ./log/demo.log
level:
com.hyc.*: trace
其中:
- file用来配置日志路径及文件名;
- level用来配置日志级别,需要注意的是level需要以map的形式配置,不能直接在level后配置日志级别,本例中的配置意义是com.hyc下所有包中的日志级别都是trace,这样就可以给不同的包配置不同的日志级别了;
下面来写一个测试类,测试日志的输出:
@RestController
@SpringBootApplication
public class DemoApplication { Logger logger = LoggerFactory.getLogger(getClass()); @RequestMapping("/log")
public void logging() {
logger.trace("trace logger");
logger.debug("debug logger");
logger.info("info logger");
logger.warn("warn logger");
logger.error("error logger");
} public static void main(String[] args) { SpringApplication app = new SpringApplication(DemoApplication.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
}
运行,查看控制台和日志文件:
1️⃣控制台
2018-11-27 17:35:33.127 TRACE 7038 --- [nio-8088-exec-2] ication$$EnhancerBySpringCGLIB$$43201a05 : trace logger
2018-11-27 17:35:33.128 DEBUG 7038 --- [nio-8088-exec-2] ication$$EnhancerBySpringCGLIB$$43201a05 : debug logger
2018-11-27 17:35:33.128 INFO 7038 --- [nio-8088-exec-2] ication$$EnhancerBySpringCGLIB$$43201a05 : info logger
2018-11-27 17:35:33.128 WARN 7038 --- [nio-8088-exec-2] ication$$EnhancerBySpringCGLIB$$43201a05 : warn logger
2018-11-27 17:35:33.128 ERROR 7038 --- [nio-8088-exec-2] ication$$EnhancerBySpringCGLIB$$43201a05 : error logger
2️⃣日志文件
2018-11-27 17:35:32.788 TRACE 7038 --- [http-nio-8088-exec-1] ication$$EnhancerBySpringCGLIB$$43201a05 : trace logger
2018-11-27 17:35:32.789 DEBUG 7038 --- [http-nio-8088-exec-1] ication$$EnhancerBySpringCGLIB$$43201a05 : debug logger
2018-11-27 17:35:32.789 INFO 7038 --- [http-nio-8088-exec-1] ication$$EnhancerBySpringCGLIB$$43201a05 : info logger
2018-11-27 17:35:32.789 WARN 7038 --- [http-nio-8088-exec-1] ication$$EnhancerBySpringCGLIB$$43201a05 : warn logger
2018-11-27 17:35:32.789 ERROR 7038 --- [http-nio-8088-exec-1] ication$$EnhancerBySpringCGLIB$$43201a05 : error logger
因为配置的日志级别是trace,所以会输出trace及其以上级别的日志;
除上述配置之外,还有其他的一些配置,可以参考下面默认配置项进行配置:
logging.config= # Location of the logging configuration file. For instance, `classpath:logback.xml` for Logback.
logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.
logging.file= # Log file name (for instance, `myapp.log`). Names can be an exact location or relative to the current directory.
logging.file.max-history=0 # Maximum of archive log files to keep. Only supported with the default logback setup.
logging.file.max-size=10MB # Maximum log file size. Only supported with the default logback setup.
logging.level.*= # Log levels severity mapping. For instance, `logging.level.org.springframework=DEBUG`.
logging.path= # Location of the log file. For instance, `/var/log`.
logging.pattern.console= # Appender pattern for output to the console. Supported only with the default Logback setup.
logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss.SSS # Appender pattern for log date format. Supported only with the default Logback setup.
logging.pattern.file= # Appender pattern for output to a file. Supported only with the default Logback setup.
logging.pattern.level=%5p # Appender pattern for log level. Supported only with the default Logback setup.
logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.
四、Profile配置
profile用来提供不同的环境配置,如开发环境、生产环境和测试环境中,需要使用不同的端口,数据库等信息时,可以使用profile来完成,基本用法分以下几步:
- 针对不同的环境创建不同的配置文件application-{profile}.yml(或application-{profile.properties})
- 在全局配置application.yml中通过spring.profiles.active={profile}来指定环境
下面针对开发、测试、生产环境配置不同的端口和数据库,来完成一次多环境的配置:
第一步:创建不同环境的配置文件
1️⃣开发环境application-dev.yml
server:
port: 8088
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5433/dev?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: dev
password: dev
2️⃣测试环境application.test.yml
server:
port: 8088
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://10.192.22.5:5433/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: test
password: test
3️⃣生产环境application-prod.yml
server:
port: 88
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://10.192.22.3:5433/prod?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: prod
password: prod
第二步:在全局配置application.yml中指定开发环境
server:
port: 8088
servlet:
context-path: /
spring:
profiles:
active: dev
目录如下:
注意:active后面的就是application-{profile}.yml中的profile的值!!!
可以通过日志查看是否配置成功:
所以,在springboot中可以通过profile来配置多数据源!!
以上就是常用的配置。
SpringBoot--外部配置的更多相关文章
- SpringBoot外部配置
Spring Boot的配置文件 Spring Boot使用一个全局的配置文件application.properties或者application.yml(yaml语言的配置文件),放置在src/m ...
- SpringBoot外部配置属性注入
一.命令行参数配置 Spring Boot可以是基于jar包运行的,打成jar包的程序可以直接通过下面命令运行: java -jar xx.jar 那么就可以通过命令行改变相关配置参数.例如默认tom ...
- SpringBoot系列之外部配置用法简介
SpringBoot系列之外部配置用法简介 引用Springboot官方文档的说法,官方文档总共列举了如下用法: 1.Devtools global settings properties on yo ...
- 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 ...
- SpringBoot——配置文件加载位置及外部配置加载顺序
声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...
- 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 SpringBoot是如何实现自动配置的?--SpringBoot源码(四) 温故而知新,我们来简单回顾一下上 ...
- SpringBoot外部化配置使用Plus版
本文如有任何纰漏.错误,请不吝指正! PS: 之前写过一篇关于SpringBoo中使用配置文件的一些姿势,不过嘛,有句话(我)说的好:曾见小桥流水,未睹观音坐莲!所以再写一篇增强版,以便记录. 序言 ...
- SpringBoot常用配置,引入外部配置文件信息,热加载
SpringBoot的配置文件格式 yml规范 SpringBoot的配置文件支持properties和yml,甚至还支持json. 更推荐使用yml文件格式: yml文件,会根据换行和缩进帮助咱们管 ...
- 补习系列(10)-springboot 之配置读取
目录 简介 一.配置样例 二.如何注入配置 1. 缺省配置文件 2. 使用注解 3. 启动参数 还有.. 三.如何读取配置 @Value 注解 Environment 接口 @Configuratio ...
- SpringBoot之配置
回顾 SpringBoot之基础 配置文件 ① 两种全局配置文件(文件名是固定的) 配置文件放在src/main/resources目录或者类路径/config下 application.proper ...
随机推荐
- flink idea 打包jar 并放到集群上运行
flink idea 打包jar 并放到集群上运行 在开始之前注意前提,当前项目的scala的版本要和集群上的scala一致 我已经创建好一个wordCount的flink项目 注意项目的po ...
- gitj基础2
回滚版本 git reset --hard HEAD^ 回滚上一个版本 git reset --hard 版本号(或者版本号前6位) 回滚到指定版本 如果修改版本了,也关 ...
- Java判断链表是否为回文链表
请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 思路:1.通过快慢指针,来遍历链表 ...
- vue中数据绑定遇到的问题
<!-- 使用element中的表格组件,在编辑的时候传递每行的数据 --> <el-button size="small" type="success ...
- 46 python学习笔记
0 引言 之前用python跑过深度学习的代码,用过一段时间的jupiter和tensorflow:最近在Ubuntu下搭建起了VSCode + Anaconda的python开发环境,感觉很好用,尤 ...
- web音乐播放器
今天闲暇时间,花了2小时,写了个简单音乐播放器.欢迎大家来吐糟 先看下界面截图 大体实现:播放,停止,上一曲,下一曲,循环播放功能. 知识点:1.html 中audio 2.css 位置fixed 其 ...
- Delphi Xml
用递归方法,使用 xml 文档生成 Treeview 树形视图.由于是动态生成,所以可以通过修改 xml 的逻辑来定制 Treeview 的结构,从而实现了 xml 对 Treeview 的动态配置, ...
- spring boot jpa没有自动生成表的原因——加上@Entity
别人的项目弄了好久,竟然是忘记加注解,当然配置文件还是要配置jpa的,pom也要依赖jpa. @Entity jpa: hibernate: ddl-auto: update show-sql: tr ...
- Centos 6 & Centos 7安装rabbitmq3.6.15(单节点)
系统准备 安装 erlang 语言环境 安装rabbitmq 配置网页插件 配置访问账号密码和权限 系统准备 centos6.5 与 centos7 都可以 ###安装依赖文件 yum -y inst ...
- linux下df查看空间已经占用%100,但是找不到大文件的解决方法
有时候在linux下会遇到这种情况:df查看空间已经占用%100,但是找不到大文件,怎么回事呢,经过网上查找资料,得到解决方法: 1.使用lsof查看已删除但未释放的文件 lsof -n | grep ...