精通SpringBoot——第十一篇:使用自定义配置

简介: spring boot 实现自定义配置的几种方式

今天这篇文章给大家介绍自定义配置的两种方式
第一式: 使用@ConfigurationProperties,且看代码

package com.developlee.customconfig.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.context.annotation.Configuration;

/**
 * @author Lensen
 * @desc
 * @since 2018/8/22 12:59
 */
@Configuration
@ConfigurationProperties(prefix = "one-app")
public class OneAppConfig {

    @NestedConfigurationProperty
    public Account account = new Account();

    public String appName;

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public class Account {
        private String username;
        private String password;
        private String age;

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public String getAge() {
            return age;
        }

        public void setAge(String age) {
            this.age = age;
        }
    }
}

很明显,这就是我们要在properties文件中要配置的配置项。
再看第二种方式

/**
 * @author Lensen
 * @desc
 * @since 2018/8/22 13:19
 */
@Configuration
public class TwoAppConfig {
    @Value("${two-app.welcome.message}")
    public String twoAppWelcomeMessage;

    @Value("${two-app.welcome.person}")
    public String twoAppWelcomePerson;

    public String getTwoAppWelcomeMessage() {
        return twoAppWelcomeMessage;
    }

    public void setTwoAppWelcomeMessage(String twoAppWelcomeMessage) {
        this.twoAppWelcomeMessage = twoAppWelcomeMessage;
    }

    public String getTwoAppWelcomePerson() {
        return twoAppWelcomePerson;
    }

    public void setTwoAppWelcomePerson(String twoAppWelcomePerson) {
        this.twoAppWelcomePerson = twoAppWelcomePerson;
    }
}

这个就简单粗暴啦。没有第一种方式结构那么清晰,具体怎么使用,完全取决于项目配置项的关联关系和复杂度,需要大家根据实际情况权衡。
接下来我写了个简单的测试类,来获取我们的配置信息
先看配置文件:

one-app:
  app-name: OneAPP
  account:
    username: Lensen
    password: Orcl
    age: 22

two-app:
  welcome:
    message: welcome to lensen's bolg
    person: LENSEN

一个简单的Controller类

package com.developlee.customconfig.controller;

import com.developlee.customconfig.config.OneAppConfig;
import com.developlee.customconfig.config.TwoAppConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Lensen
 * @desc
 * @since 2018/8/22 16:40
 */
@RestController
public class AppController {
    @Autowired
    private OneAppConfig oneAppConfig;
    @Autowired
    private TwoAppConfig twoAppConfig;

    @GetMapping("/hello")
    public ResponseEntity getConfig() {
        String str1 = "oneAppConfig: " + oneAppConfig.getAppName() + oneAppConfig.getAccount().getUsername()
                + oneAppConfig.getAccount().getPassword() + oneAppConfig.getAccount().getAge();
        String str2 = "twoAppConfig: " + twoAppConfig.getTwoAppWelcomePerson() + twoAppConfig.getTwoAppWelcomeMessage();
        return new ResponseEntity(str1 +"~~~~~~~"+ str2, HttpStatus.OK);
    }
}

在地址栏输入http:localhost:8080/hello, 回车
image
也可以自己指定文件,只需在类上加上注解@PropertySource注解就好了~~

@Configuration
@PropertySource("classpath:my.properties")
public class ThreeConfig {

    @Value("${my.name}")
    private String myName;

    public String getMyName() {
        return myName;
    }

    public void setMyName(String myName) {
        this.myName = myName;
    }
}

my.properties文件内容:

my.name=developlee

测试结果:
image

如果配置文件是yml格式的,则要使用YamlPropertiesFactoryBean来加载并设置到PropertySourcesPlaceholderConfigurer中

// 加载YML格式自定义配置文件
    @Bean
    public static PropertySourcesPlaceholderConfigurer properties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new FileSystemResource("config.yml"));//File引入
//        yaml.setResources(new ClassPathResource("youryml.yml"));//class引入
        configurer.setProperties(yaml.getObject());
        return configurer;

end...
浮躁的社会,浮躁的人生,唯有代码,宁静致远。(又开始装13了,见谅.....)

最后,以上示例代码可在我的github.com中找到。 我的个人公众号:developlee的潇洒人生。 关注了也不一定更新,更新就不得了了。
qrcode_for_gh_2bd3f44efa21_258

目录
相关文章
|
21天前
|
Java 数据库连接 Spring
面试题:springboot的自定义配置有哪些
面试题:springboot的自定义配置有哪些
22 0
|
11月前
|
SQL 关系型数据库 MySQL
SpringBoot自定义配置注入的方式:自定义配置文件注入,从mysql读取配置进行注入
SpringBoot自定义配置注入的方式:自定义配置文件注入,从mysql读取配置进行注入
173 0
|
21天前
|
Java
springboot WebMvcConfigurer详解自定义配置请求静态资源
springboot WebMvcConfigurer详解自定义配置请求静态资源
|
21天前
|
Java 数据库连接 Maven
SpringBoot【付诸实践 01】SpringBoot自定义starter保姆级教程(说明+源码+配置+测试)
SpringBoot【付诸实践 01】SpringBoot自定义starter保姆级教程(说明+源码+配置+测试)
42 1
|
7月前
|
Java
springboot中自定义配置
springboot中自定义配置
28 0
|
9月前
|
Java 容器
SpringBoot中的yml文件中读取自定义配置信息
SpringBoot中的yml文件中读取自定义配置信息
95 0
|
11月前
|
安全 Java Spring
SpringBoot整合Spring Security,自定义登录成功/失败处理器,配置登录人数(三)
一般采用的是实现接口的方式:implements AuthenticationSuccessHandler 但是如果想要实现登录成功后跳转回登录前的页面可以直接继承SavedRequestAwareAuthenticationSuccessHandler这个类,该类的父类SimpleUrlAuthenticationSuccessHandler实现了AuthenticationSuccessHandler。
224 0
|
前端开发 Java fastjson
Netty系列(一):Springboot整合Netty,自定义协议实现
Netty是由JBOSS提供的一个java开源框架,现为 [Github](https://github.com/netty/netty)上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
553 0
Netty系列(一):Springboot整合Netty,自定义协议实现
|
NoSQL 安全 Java
SpringBoot 自动配置的原理|学习笔记
快速学习 SpringBoot 自动配置的原理
144 0
SpringBoot 自动配置的原理|学习笔记
|
Java 容器
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
`SpringBoot`在不断地版本迭代中陆续提供了不同的配置参数绑定的方式,我们可以单独获取`一个配置参数`也可以将`一系列的配置`映射绑定到`JavaBean`的属性字段,下面我们来看看这几种方式的配置绑定哪一种是你最常用到的。
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定