Spring Boot自定义配置
参考链接
Spring Boot自定义配置开发配置创建设置添加打包依赖使用配置简单配置复杂配置稍微复杂一点的配置
开发配置
在开发项目时, 需要设置许多配置, 使用常亮类是个不错的选择, 但是使用Spring Boot开发的同学可以使用一种更加合理的方式设置配置信息.
创建设置
如创建自定义配置时, 不错的习惯是以自己的包名开始, 逐步细分进行配置, 注意变量的命名要求是单词间-分割命名, 对应变量应为驼峰式命名
如topic-exchange
配置对应topicExchange
变量
com:example:rabbitmq:topic-exchange: spring-boot-exchangequeue: spring-bootis-valid: false
在IDEA中自定义配置会报warning, 无法理解配置属性, 其实也就是没从包的META-INF中查找到这个配置属性, 可以通过Alt
+ Enter
选择Define configuration key’…..’
来创建配置, 其中包含了对应的名称, 类型, 描述等, 方便日后开发维护, 自动创建后的配置文件位于resources/META-INF/additional-spring-configuration-metadata.json
:
{"properties": [{"name": "com.example.rabbitmq.topic-exchange","type": "java.lang.String","description": "RabbitMQ topic exchange name."},{"name": "com.example.rabbitmq.queue","type": "java.lang.String","description": "RabbitMQ queue name."},{"name": "com.example.rabbitmq.is-valid","type": "java.lang.String","description": "Test field."}]}
添加打包依赖
这个时候添加META-INF后发现警告还在, 打开IDEA给的链接后发现少了个依赖, 应该是IDEA从target/classes下的classpath去扫描META-INF, 所以要添加下依赖进行打包
↗ 你可以使用这个依赖包很容易地从被注解了@ConfigurationProperties
的条目生成自定义配置的metadata文件. 这个依赖jar包包含了Java的注解处理器, 可以在项目构建时调用, 要使用这个处理器, 包含这个依赖即可.
使用Maven依赖应该声明为optional, 如下:
org.springframework.bootspring-boot-configuration-processortrue
之后进行打包处理
打包后的taget/classes中多了个spring-configuration-metadata.json文件, 就是这个processor生成的:
使用配置
简单配置
使用SpringBoot配置时, 通常我们都使用@Value注解进行导入, 简单的单个值得时候很方便:
@Value("${message:Hello default}")private String message;
复杂配置
配置项变得多了, 可以通过一个类来装载配置, 这时候可以通过@ConfigurationProperties
来处理导入配置工作:
// 这个注解还是需要的, 生成相应的get set方法, java问题吧, 没有这个配置注入不进去@Data@Component// 配置前缀, 对应配置信息@ConfigurationProperties(prefix = "com.example.rabbitmq")public class RabbitMQProperties {// 为了方便使用我使用public修饰public String queue;public String topicExchange;}
稍微复杂一点的配置
@ConfigurationProperties(prefix="server")public class ServerProperties {private String name;private Host host;// ... getter and setters // 配置深度public static class Host {private String ip;private int port;// ... getter and setters}}