Spring Boot-基础配置
Posted 幸遥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot-基础配置相关的知识,希望对你有一定的参考价值。
Spring Boot的一些基础配置
全局配置
基本用法
在src/main/resources
下可以定义Spring Boot的默认配置文件application.perproties
或者application.yml
创建application.yml全局配置文件,使用@Value注入到对象中
ranger:
name: chenyaping
age: 21
@Configuration
public class Ranger {
@Value("${ranger.name}")
private String name;
@Value("${ranger.age}")
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Ranger{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
启动Spring Boot应用程序,打印从容器中获取的Ranger实例如下:
Ranger{name=‘chenyaping‘, age=21}
使用配置文件实现开关
创建配置属性类EmailProperties
@ConfigurationProperties(prefix = "ranger.mail")
public class EmailProperties {
private String username;
private Integer port;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
@Override
public String toString() {
return "EmailProperties{" +
"username='" + username + ''' +
", port=" + port +
'}';
}
}
创建自动配置类
@Configuration
@EnableConfigurationProperties(EmailProperties.class)
@ConditionalOnProperty(prefix = "ranger.mail",value = "enable",matchIfMissing = false)
public class EmailSender {
@Autowired
private EmailProperties emailProperties;
@Override
public String toString() {
return "EmailSender{" +
"emailProperties=" + emailProperties +
'}';
}
}
改变Yaml文件的配置来开启和关闭EmailSender组件,当ranger.mail.enable
为false时
ranger:
name: chenyaping
age: 21
mail:
enable: true
port: 22
username: ${ranger.name} # 属性间可以引用
启动应用通过ApplicationContext#getBean()
获取EmailSender会抛出异常如下:
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.ranger.boot.config.EmailProperties' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:346)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:337)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1123)
at com.ranger.boot.Application.main(Application.java:22)
当Yaml中ranger.mail.enable的值为true时,运行结果如下:
EmailProperties{username='chenyaping', port=22}
EmailSender{emailProperties=EmailProperties{username='chenyaping', port=22}}
这样,我们就可以通过改变配置文件来实现开关的功能
自定义配置
除了可以在application.yml里配置属性,我们还可以自定义一个配置文件。在src/main/resources目录下新建一个test.properties:
test.username=ranger
创建配置类
@Configuration
@ConfigurationProperties(prefix="test")
@PropertySource("classpath:test.properties")
public class CustomConfig {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "CustomConfig{" +
"username='" + username + ''' +
'}';
}
}
注解@PropertySource("classpath:test.properties")
指明了使用哪个配置文件。启动程序运行结果打印
CustomConfig{username=‘ranger‘}
命令行配置
同样在Spring Boot应用启动时命令行也可以传递参数供配置文件使用
- 使用
-D
来配置参数
@Configuration
public class CommandLineConfig {
@Value("${args.username}")
private String username;
@Value("${args.age}")
private String age;
// getter,setter and toString
}
使用mvn clean package
来打包应用,然后使用如下命令行来运行
java -jar -Dargs.username=ranger -Dargs.age=22 spring-boot-config-1.0-SNAPSHOT.jar
结果可以看到:CommandLineConfig{username=‘ranger‘, age=‘22‘}
,参数已经成功注入到配置类中
- 使用
--
改变命令行的使用方式为如下:
java -jar spring-boot-config-1.0-SNAPSHOT.jar --args.username=ranger --args.age=22
可以看到相同的结果
多配置文件Profile
Profile用来针对不同的环境下使用不同的配置文件,多环境配置文件必须以application-{profile}.yml
的格式命,其中{profile}
为环境标识。比如定义两个配置文件
application-dev.yml
server:
port: 8080
application-prod.yml
server:
port: 80
我们可以在application.yml中使用spring.profile.active这个属性来激活那个配置文件,属性值为application-{profile}.yml
中profile
的值
自定义启动bannner
在src/main/resources下创建banner.txt文件,将自己的图案粘贴进去即可
以上是关于Spring Boot-基础配置的主要内容,如果未能解决你的问题,请参考以下文章
Java基础十Spring Boot /Spring Cloud