内容简介:除了将配置类注解为Spring自定义配置的IDE提示,需要使用APT技术。因此,需要添加依赖依赖项添加完成后,执行命令
app: name: HelloWorld version: 1
示例 Java 代码
package bj;
import lombok.Data;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, QuartzAutoConfiguration.class})
public class App implements ApplicationListener<ApplicationReadyEvent> {
public static void main(String[] args) {
new SpringApplication(App.class) {{
setWebApplicationType(WebApplicationType.NONE);
}}.run(args);
}
@Resource
private Settings settings;
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
System.out.println(settings);
}
@Component
@ConfigurationProperties(prefix = "app")
@Data
public static class Settings {
private String name;
private int version;
}
}
除了将配置类注解为 Component
外,还可以使用注解 @EnableConfigurationProperties(...)
显示指定启用的配置类。用法:
package bj;
import lombok.Data;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationListener;
import javax.annotation.Resource;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, QuartzAutoConfiguration.class})
@EnableConfigurationProperties(App.Settings.class)
public class App implements ApplicationListener<ApplicationReadyEvent> {
public static void main(String[] args) {
new SpringApplication(App.class) {{
setWebApplicationType(WebApplicationType.NONE);
}}.run(args);
}
@Resource
private Settings settings;
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
System.out.println(settings);
}
@ConfigurationProperties(prefix = "app")
@Data
public static class Settings {
private String name;
private int version;
}
}
示例控制台输出
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.RELEASE)
2018-12-10 15:44:53.585 INFO 4761 --- [ main] bj.App : Starting App on MacBook-Air-2.local with PID 4761 (/Users/yuchao/temp/java/hellomaven/target/classes started by yuchao in /Users/yuchao/temp/java/hellomaven)
2018-12-10 15:44:53.591 INFO 4761 --- [ main] bj.App : No active profile set, falling back to default profiles: default
2018-12-10 15:44:55.490 WARN 4761 --- [ main] reactor.netty.tcp.TcpResources : [http] resources will use the default LoopResources: DefaultLoopResources {prefix=reactor-http, daemon=true, selectCount=4, workerCount=4}
2018-12-10 15:44:55.492 WARN 4761 --- [ main] reactor.netty.tcp.TcpResources : [http] resources will use the default ConnectionProvider: PooledConnectionProvider {name=http, poolFactory=reactor.netty.resources.ConnectionProvider$$Lambda$270/2128961136@6c44052e}
2018-12-10 15:44:55.770 INFO 4761 --- [ main] bj.App : Started App in 3.103 seconds (JVM running for 4.582)
App.Settings(name=HelloWorld, version=1)
启用IDE智能提示
Spring自定义配置的IDE提示,需要使用APT技术。因此,需要添加依赖 spring-boot-configuration-processor
。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
依赖项添加完成后,执行命令 mvn clean build
,智能提示即可生效。APT会生成智能提示所需的JSON文件
target/classes/META-INF/spring-configuration-metadata.json
{
"groups": [
{
"name": "app",
"type": "bj.App$Settings",
"sourceType": "bj.App$Settings"
}
],
"properties": [
{
"name": "app.name",
"type": "java.lang.String",
"sourceType": "bj.App$Settings"
},
{
"name": "app.version",
"type": "java.lang.Integer",
"sourceType": "bj.App$Settings",
"defaultValue": 0
}
],
"hints": []
}
多级配置示例
有时候只有List和Map数据类型不能满足配置需求,需要嵌套另一个配置类。示例如下:
Yaml配置
logging:
level:
root: info
app:
name: HelloWorld
version: 1
author:
name: Unname
age: 88
Java代码
package bj;
import lombok.Data;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, QuartzAutoConfiguration.class})
public class App implements ApplicationListener<ApplicationReadyEvent> {
public static void main(String[] args) {
new SpringApplication(App.class) {{
setWebApplicationType(WebApplicationType.NONE);
}}.run(args);
}
@Resource
private Settings settings;
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
System.out.println(settings);
}
@ConfigurationProperties(prefix = "app")
@Component
@Data
public static class Settings {
private String name;
private int version;
@Resource
private Author author;
@ConfigurationProperties(prefix = "app.author")
@Component
@Data
public static class Author {
private String name;
private String age;
}
}
}
示例输出
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.RELEASE)
2018-12-10 16:01:41.261 INFO 4798 --- [ main] bj.App : Starting App on MacBook-Air-2.local with PID 4798 (/Users/yuchao/temp/java/hellomaven/target/classes started by yuchao in /Users/yuchao/temp/java/hellomaven)
2018-12-10 16:01:41.267 INFO 4798 --- [ main] bj.App : No active profile set, falling back to default profiles: default
2018-12-10 16:01:43.718 WARN 4798 --- [ main] reactor.netty.tcp.TcpResources : [http] resources will use the default LoopResources: DefaultLoopResources {prefix=reactor-http, daemon=true, selectCount=4, workerCount=4}
2018-12-10 16:01:43.720 WARN 4798 --- [ main] reactor.netty.tcp.TcpResources : [http] resources will use the default ConnectionProvider: PooledConnectionProvider {name=http, poolFactory=reactor.netty.resources.ConnectionProvider$$Lambda$269/828088650@6650813a}
2018-12-10 16:01:44.030 INFO 4798 --- [ main] bj.App : Started App in 3.727 seconds (JVM running for 6.006)
App.Settings(name=HelloWorld, version=1, author=App.Settings.Author(name=Unname, age=88))
以上所述就是小编给大家介绍的《SpringBoot配置》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 6、如何获取配置中心的配置
- React降级配置及Ant Design配置
- vscode 配置eslint 开发vue的相关配置
- git commit 规范校验配置和版本发布配置
- hadoop地址配置、内存配置、守护进程设置、环境设置
- 在hibernate中配置事务级别与命名查询配置【原创】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入浅出程序设计(中文版)
Paul Barry、David Griffiths / 蒋雁翔、童健 / 东南大学出版社 / 2012-1 / 98.00元
《深入浅出程序设计(中文版)》介绍了编写计算机程序的核心概念:变量、判断、循环、函数与对象——无论运用哪种编程语言,都能在动态且多用途的python语言中使用具体示例和练习来运用并巩固这些概念。学习基本的工具来开始编写你感兴趣的程序,而不是其他人认为你应该使用的通用软件,并对软件能做什么(不能做什么)有一个更好的了解。当你完成这些,你就拥有了必要的基础去使用任何一种你需要或想要学习的语言或软件项目......一起来看看 《深入浅出程序设计(中文版)》 这本书的介绍吧!