微信小程序实战教程 程序设计 图像处理 optimization callback HammerJS vue开发文档 vue安装教程 ubuntu更改文件夹权限 nfc卡片 Navicat mysql将时间戳转换成日期 python指令 python当前日期 python基础代码 javatrim java字符串查找 java环境变量配置 java的random jdk环境配置 java入门基础 java数据类型转换 lol设置 cf透视辅助 linux多线程编程 按键精灵脚本教程 黑市商人 16进制编辑器 lol语音包 特战英雄辅助 qq黑客软件 神魔辅助 cad文件 混凝土配合比计算软件 python去重 mysql定时备份 微信骰子控制 javascript基础教程 武林外传天师加点 橙子助手
当前位置: 首页 > 学习教程  > 编程语言

每天一个SpringBoot注解之@ConfigurationProperties

2021/1/13 20:07:53 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

我们知道,每一个springboot项目都会有很多配置,application.yml,bootstrap.xml等。数据库连接地址,redis地址,nacos,dubbo,cloud等,而我们读取这些配置,因为spring的版本进行了几次更…

我们知道,每一个springboot项目都会有很多配置,application.yml,bootstrap.xml等。数据库连接地址,redis地址,nacos,dubbo,cloud等,而我们读取这些配置,因为spring的版本进行了几次更新。
1.xml配置,通过xml去获取bean
2.注解,我们通常使用@Value等注解去获取配置
3.java Config,java Config是spring的一个子项目,我们通过java代码和@ConfigurationProperties注解去读取配置。
今天我说的就是第三种方法,我们点开这个注解,常用的属性就是prefix,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上

/**
 * Annotation for externalized configuration. Add this to a class definition or a
 * {@code @Bean} method in a {@code @Configuration} class if you want to bind and validate
 * some external Properties (e.g. from a .properties file).
 * <p>
 * Note that contrary to {@code @Value}, SpEL expressions are not evaluated since property
 * values are externalized.
 *
 * @author Dave Syer
 * @since 1.0.0
 * @see ConfigurationPropertiesBindingPostProcessor
 * @see EnableConfigurationProperties
 */
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ConfigurationProperties {
	@AliasFor("prefix")
	String value() default "";
	
	@AliasFor("value")
	String prefix() default "";
	
	boolean ignoreInvalidFields() default false;
	boolean ignoreUnknownFields() default true;
}

可以从注解说明中看到,当将该注解作用于方法上时,如果想要有效的绑定配置,那么该方法需要有@Bean注解且所属Class需要有@Configuration注解。

下面我会简单举例这两者用法

我们先在application.yml上简单配置一点东西

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3368/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: admin
    password: 123456

1.用在类上

我们新建一个类DatasourceBeanTest,注意,类上有@Component和@ConfigurationProperties注解
,注解的prefix就是我们配置文件中的前缀

@ConfigurationProperties(prefix = "spring.datasource")
@Component
public class DatasourceBeanTest {

    private String url;

    private String username;

    private String password;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    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;
    }
}

写个测试类调一下,在测试类中注入这个类

@SpringBootTest
class DemoApplicationTests {
    @Autowired
    DatasourceBeanTest datasourceBeanTest;
    @Test
    void contextLoads() {
        System.out.println(datasourceBeanTest.getUsername());
        System.out.println(datasourceBeanTest.getPassword());
        System.out.println(datasourceBeanTest.getUrl());
    }
}

我们启动之后看看控制台,可以看到,我们的配置文件已经能取到了

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.1)

2021-01-13 18:11:43.302  INFO 8252 --- [    main] com.example.demo.DemoApplicationTests 
2021-01-13 18:11:43.311  INFO 8252 --- [    main] com.example.demo.DemoApplicationTests
2021-01-13 18:11:44.540  INFO 8252 --- [    main] o.s.s.concurrent.ThreadPoolTaskExecutor 
2021-01-13 18:11:44.855  INFO 8252 --- [    main] com.example.demo.DemoApplicationTests

admin
123456
jdbc:mysql://127.0.0.1:3368/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8

2.用在方法上

我们新建一个类CfgPropertiesTest,在这个类中,我们加上了@Configuration注解,我们有一个新的方法testDataSource,这个方法上面就用了@ConfigurationProperties注解

@Configuration
public class CfgPropertiesTest {
    @Bean(name = "testDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.server")
    public DruidDataSource testDataSource() {
        return new DruidDataSource();
    }
}

总结一下哈
@ConfigurationProperties 和 @value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便
@ConfigurationProperties 的 对象类的命名比较严格,因为它必须和prefix的后缀名要一致, 不然值会绑定不上, 特殊的后缀名是“driver-class-name”这种带横杠的情况,在对象里面的命名规则是 下划线转驼峰 就可以绑定成功,所以就是 “driverClassName”


本文链接: http://www.dtmao.cc/news_show_600254.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?