经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring Boot » 查看文章
Spring Boot 2 使用自定义配置
来源:cnblogs  作者:gdjlc  时间:2019/9/26 9:13:41  对本文有异议

在application.yml定义配置后,可以使用Environment来读取配置,也可以使用@Value注解让业务代码去读取配置。
如果属性较多,可以定义属性映射对象。

开发环境:IntelliJ IDEA 2019.2.2
Spring Boot版本:2.1.8

新建一个名称为demo的Spring Boot项目。

一、使用@Value注解

1、application.yml配置为

  1. jdbc:
  2. url: localhost:3306

2、添加一个类 ValueProp.cs

注解@Component把类ValueProp注册到Spring容器中,@Value的值对应application.yml中的配置。

  1. package com.example.demo;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. public class ValueProp {
  6. @Value("${jdbc.url}")
  7. private String jdbcUrl;
  8. public String getJdbcUrl() {
  9. return jdbcUrl;
  10. }
  11. }

3、修改启动类代码 DemoApplication.cs

  1. package com.example.demo;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. @SpringBootApplication
  8. @RestController
  9. public class DemoApplication {
  10. public static void main(String[] args) {
  11. SpringApplication.run(DemoApplication.class, args);
  12. }
  13. @Autowired
  14. private ValueProp valueProp;
  15. @RequestMapping("/")
  16. public String index(){
  17. return valueProp.getJdbcUrl();
  18. }
  19. }

项目结构图

 

访问:http://localhost:8080/
页面显示:localhost:3306

二、定义属性映射对象

如果上面例子application.yml里面的jdbc下面有多个属性时,直接使用@Value会造成代码冗余。
可以新建一个属性映射类来指定配置前缀jdbc。

1、application.yml配置为

备注:roles下面是一个字符串集合,需要使用 - 格式。

  1. jdbc:
  2. url: localhost:3306
  3. user: root
  4. password: 123456
  5. db:
  6. name: mysql
  7. version: 1.0
  8. roles:
  9. - manager
  10. - client

2、新建一个属性映射类 JdbcProp.cs

使用注解@ConfigurationProperties声明该类的配置前缀为“jdbc”。

  1. package com.example.demo;
  2. import org.springframework.boot.context.properties.ConfigurationProperties;
  3. import java.util.List;
  4. @ConfigurationProperties(prefix = "jdbc")
  5. public class JdbcProp {
  6. private String url;
  7. private String user;
  8. private String password;
  9. private Database db;
  10. public String getUrl() {
  11. return url;
  12. }
  13. public void setUrl(String url) {
  14. this.url = url;
  15. }
  16. public String getUser() {
  17. return user;
  18. }
  19. public void setUser(String user) {
  20. this.user = user;
  21. }
  22. public String getPassword() {
  23. return password;
  24. }
  25. public void setPassword(String password) {
  26. this.password = password;
  27. }
  28. public Database getDb() {
  29. return db;
  30. }
  31. public void setDb(Database db) {
  32. this.db = db;
  33. }
  34. public static class Database{
  35. private String name;
  36. private String version;
  37. private List<String> roles;
  38. public String getName() {
  39. return name;
  40. }
  41. public void setName(String name) {
  42. this.name = name;
  43. }
  44. public String getVersion() {
  45. return version;
  46. }
  47. public void setVersion(String version) {
  48. this.version = version;
  49. }
  50. public List<String> getRoles() {
  51. return roles;
  52. }
  53. public void setRoles(List<String> roles) {
  54. this.roles = roles;
  55. }
  56. }
  57. }

3、新建一个配置类 JdbcConfig.cs

目的是让Spring容器知道有这么一个自定义的属性映射对象。

  1. package com.example.demo;
  2. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  3. import org.springframework.context.annotation.Configuration;
  4. @Configuration
  5. @EnableConfigurationProperties(value = JdbcProp.class)
  6. public class JdbcConfig {
  7. }

4、修改启动类代码 DemoApplication.cs

  1. package com.example.demo;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.http.MediaType;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. @SpringBootApplication
  9. @RestController
  10. public class DemoApplication {
  11. public static void main(String[] args) {
  12. SpringApplication.run(DemoApplication.class, args);
  13. }
  14. @Autowired
  15. private JdbcProp jdbcProp;
  16. @RequestMapping(value = "/", produces = MediaType.APPLICATION_JSON_VALUE)
  17. public JdbcProp index(){
  18. return jdbcProp;
  19. }
  20. }

项目结构图

  

访问:http://localhost:8080/

页面显示:

  1. {"url":"localhost:3306","user":"root","password":"123456","db":{"name":"mysql","version":"1.0","roles":["manager","client"]}}

 

原文链接:http://www.cnblogs.com/gdjlc/p/11588350.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号