zoukankan      html  css  js  c++  java
  • Spring Boot 2 使用自定义配置

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

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

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

    一、使用@Value注解

    1、application.yml配置为

    jdbc:
      url: localhost:3306

    2、添加一个类 ValueProp.java

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

    package com.example.demo;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ValueProp {
    
        @Value("${jdbc.url}")
        private String jdbcUrl;
    
        public String getJdbcUrl() {
            return jdbcUrl;
        }
    }

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

    package com.example.demo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class DemoApplication  {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @Autowired
        private ValueProp valueProp;
    
        @RequestMapping("/")
        public String index(){
            return valueProp.getJdbcUrl();
        }
    }

    项目结构图

     

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

    二、定义属性映射对象

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

    1、application.yml配置为

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

    jdbc:
      url: localhost:3306
      user: root
      password: 123456
      db:
        name: mysql
        version: 1.0
        roles:
          - manager
          - client

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

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

    package com.example.demo;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    import java.util.List;
    
    @ConfigurationProperties(prefix = "jdbc")
    public class JdbcProp {
        private String url;
        private String user;
        private String password;
        private Database db;
    
        public String getUrl() {
            return url;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        public String getUser() {
            return user;
        }
        public void setUser(String user) {
            this.user = user;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public Database getDb() {
            return db;
        }
        public void setDb(Database db) {
            this.db = db;
        }
    
        public static class Database{
            private String name;
            private String version;
            private List<String> roles;
    
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public String getVersion() {
                return version;
            }
            public void setVersion(String version) {
                this.version = version;
            }
            public List<String> getRoles() {
                return roles;
            }
            public void setRoles(List<String> roles) {
                this.roles = roles;
            }
        }
    }

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

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

    package com.example.demo;
    
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @EnableConfigurationProperties(value = JdbcProp.class)
    public class JdbcConfig {
    }

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

    package com.example.demo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class DemoApplication  {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @Autowired
        private JdbcProp jdbcProp;
    
        @RequestMapping(value = "/", produces = MediaType.APPLICATION_JSON_VALUE)
        public JdbcProp index(){
            return jdbcProp;
        }
    }

    项目结构图

      

    访问:http://localhost:8080/

    页面显示:

    {"url":"localhost:3306","user":"root","password":"123456","db":{"name":"mysql","version":"1.0","roles":["manager","client"]}}
  • 相关阅读:
    2021昆明站K-Riichi!!(麻将)
    数据结构 Week 3 --- dsu on tree 和 点分治
    数据结构 Week 2 --- 平衡树
    数据结构 Week 1 --- 从线段树到主席树
    一些思维题(三)
    一些思维题(二)
    2021ICPC昆明站总结及补题
    2021ICPC昆明M题 非主席树做法
    2020ICPC昆明参赛
    记5.28leetcode简单题
  • 原文地址:https://www.cnblogs.com/gdjlc/p/11588350.html
Copyright © 2011-2022 走看看