首页 > 其他分享 >快捷配置

快捷配置

时间:2023-11-30 19:12:13浏览次数:32  
标签:String spring 配置 Bean 快捷 datasource public

 

注解@ConfigurationProperties使用方法


前言#

最近在思考使用java config的方式进行配置,java config是指基于java配置的spring。传统的Spring一般都是基本xml配置的,后来spring3.0新增了许多java config的注解,特别是spring boot,基本都是清一色的java config。

Spring配置方式#

第一阶段:xml配置
    在spring 1.x时代,使用spring开发满眼都是xml配置的bean,随着项目的扩大,
我们需要把xml配置文件分放到不同的配置文件中,那时候需要频繁地在开发的类和配置文件间切换。

第二阶段:注解配置#

在spring 2.x时代,随着JDK1.5带来的注解支持,spring提供了声明bean的注解,
大大减少了配置量。这时spring圈子存在一种争论:注解配置和xml配置究竟哪个更好?我们最终的选择是应用
的基本配置用xml,业务配置用户注解。

第三阶段:Java配置(java config)#

从spring 3.x到现在,spring提供了Java配置的能力,使用Java配置更好的理解
配置的bean。spring 4.x和spring boot都推荐使用Java配置。

Spring IOC有一个非常核心的概念——Bean。由Spring容器来负责对Bean的实例化,装配和管理。XML是用来描述Bean最为流行的配置方式。但随着Spring的日益发展,越来越多的人对Spring提出了批评。“Spring项目大量的烂用XML”就是最为严励的一个批评。由于Spring会把几乎所有的业务类都以Bean的形式配置在XML文件中,造成了大量的XML文件。使用XML来配置Bean失去了编译时的类型安全检查。大量的XML配置使得整个项目变得更加复杂。

随着JAVA EE 5.0的发布,其中引入了一个非常重要的特性——Annotations(注释)。注释是源代码的标签,这些标签可以在源代码层进行处理或通过编译器把它熔入到class文件中。在JAVA EE5以后的版本中,注释成为了一个主要的配置选项。Spring使用注释来描述Bean的配置与采用XML相比,因类注释是在一个类源代码中,可以获得类型安全检查的好处。可以良好的支持重构。

JavaConfig就是使用注释来描述Bean配置的组件。JavaConfig 是Spring的一个子项目, 比起Spring,它还是一个非常年青的项目。目前的版本是1.0 M2。使用XML来配置Bean所能实现的功能,通过JavaConfig同样可以很好的实现。

下面具体讲一讲@ConfigurationProperties使用方法

@ConfigurationProperties#

Spring源码中大量使用了ConfigurationProperties注解,比如server.port就是由该注解获取到的,通过与其他注解配合使用,能够实现Bean的按需配置。

该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上

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

简单一句话概括就是:Sring的有效运行是通过上下文(Bean容器)中Bean的配合完成的,Bean可以简单理解成对象,有些对象需要指定字段内容,那么这些内容我们可以通过配置文件进行绑定,然后将此Bean归还给容器

作用于方法#

比较常见的就是配置读写分离的场景。

配置文件内容#

Copy
#数据源
spring.datasource.druid.write.url=jdbc:mysql://localhost:3306/jpa
spring.datasource.druid.write.username=root
spring.datasource.druid.write.password=1
spring.datasource.druid.write.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.druid.read.url=jdbc:mysql://localhost:3306/jpa
spring.datasource.druid.read.username=root
spring.datasource.druid.read.password=1
spring.datasource.druid.read.driver-class-name=com.mysql.jdbc.Driver

java代码#

Copy
@Configuration
public class DruidDataSourceConfig {
    /**
     * DataSource 配置
     * @return
     */
    @ConfigurationProperties(prefix = "spring.datasource.druid.read")
    @Bean(name = "readDruidDataSource")
    public DataSource readDruidDataSource() {
        return new DruidDataSource();
    }


    /**
     * DataSource 配置
     * @return
     */
    @ConfigurationProperties(prefix = "spring.datasource.druid.write")
    @Bean(name = "writeDruidDataSource")
    @Primary
    public DataSource writeDruidDataSource() {
        return new DruidDataSource();
    }
}

也许有的人看到这里会比较疑惑,prefix并没有指定配置的全限定名,那它是怎么进行配置绑定的呢?

相信大家肯定了解@Value注解,它可以通过全限定名进行配置的绑定,这里的ConfigurationProperties其实就类似于使用多个@Value同时绑定,绑定的对象就是DataSource类型的对象,而且是 隐式绑定 的,意味着在配置文件编写的时候需要与对应类的字段名称 相同,比如上述spring.datasource.druid.write.url=jdbc:mysql://localhost:3306/jpa ,当然了,你也可以随便写个配置,比如 spring.datasource.druid.write.uuu=www.baidu.com,此时你只需要在注解中加上以下参数即可

以上就完成了多个数据源的配置,为读写分离做了铺垫

作用于Class类及其用法#

配置文件内容#

Copy
spring.datasource.url=jdbc:mysql://127.0.0.1:8888/test?useUnicode=false&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

java代码#

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

    private String url;

    private String username;

    private String password;

    // 配置文件中是driver-class-name, 转驼峰命名便可以绑定成
    private String driverClassName;

    private String type;

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

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

用法#

Copy
@Controller
@RequestMapping(value = "/config")
public class ConfigurationPropertiesController {

    @Autowired
    private DatasourcePro datasourcePro;

    @RequestMapping("/test")
    @ResponseBody
    public Map<String, Object> test(){

        Map<String, Object> map = new HashMap<>();
        map.put("url", datasourcePro.getUrl());
        map.put("userName", datasourcePro.getUsername());
        map.put("password", datasourcePro.getPassword());
        map.put("className", datasourcePro.getDriverClassName());
        map.put("type", datasourcePro.getType());

        return map;
    }
}

总结#

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

标签:String,spring,配置,Bean,快捷,datasource,public
From: https://www.cnblogs.com/gaokeji/p/17868053.html

相关文章

  • 个人笔记:阿里云Centos8.4+ZABBIX6.2的安装配置
    ##############################1、安装zabbix仓库##############################[root@test~]#rpm-Uvhhttps://repo.zabbix.com/zabbix/6.2/rhel/8/x86_64/zabbix-release-6.2-3.el8.noarch.rpmRetrievinghttps://repo.zabbix.com/zabbix/6.2/rhel/8/x86_64/zabbix-rele......
  • 多数据源之mybatis配置的log无法打印
    多数据源打印sql日志配置:@Bean@ConfigurationProperties(prefix="mybatis.configuration")publicorg.apache.ibatis.session.ConfigurationglobalConfiguration(){returnneworg.apache.ibatis.session.Configuration();}@Be......
  • SpringBoot集成hutool配置定时任务,支持crontab和quartz表达式
    1、pom.xml引入hutool<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>修改version</version></dependency>2、Java文件packagecom.xxx.schedule;importcn.hutool.cron.CronUtil......
  • 『Jmeter超级干货』| Linux下Jmeter安装配置、脚本设计执行、监控及报告完整过程
    (『Jmeter超级干货』|Linux下Jmeter安装配置、脚本设计执行、监控及报告完整过程)注意:1、之前写过一个是windows平台的,本文是Linux平台的;2、另外需要注意的是,本文仅为示例过程,所以将客户端和服务器都用在同一台机器上。一般情况下不建议这么做,会影响性能结果的准确性。1JDK......
  • 软件测试/人工智能|PyCharm常用快捷键指南
    简介我们安装好pycharm之后,就要开始使用pycharm了,但是pycharm的操作太多,顶部菜单选项已经很多,每个顶部菜单的选项下又有很多个子操作,所以我们在写代码的时候,如果要进行什么操作的话,在顶部菜单操作,就会显得比较繁琐,经常要找两级甚至三级菜单,如果我们对pycharm的快捷键比较熟悉的......
  • centos7-MQTT Server搭建(apache-apollo)搭建和配置
    #############################安装apache-apollo###################################################官方的安装文档:http://activemq.apache.org/apollo/documentation/getting-started.htmlhttp://www.apache.org/dyn/closer.cgi?path=activemq/activemq-apollo/1.7.1/apach......
  • 微信人证核身 - 浮层 H5 配置流程
    本文档以接入微信浮层H5的操作流程为例,描述通过微信HTML5方式接入人脸核身的完整操作流程。引用URL:https://cloud.tencent.com/document/product/1007/78124一、前提条件1.已注册腾讯云账号,并完成实名认证。2.已申请通过腾讯云人脸核身。如果还未完成以上操作,可参考流程指引......
  • Apache SkyWalking 告警配置指南 Apache SkyWalking
    来源:https://www.cnblogs.com/heihaozi/p/apache-skywalking-alarm.htmlApacheSkyWalkingApacheSkyWalking是分布式系统的应用程序性能监视工具(ApplicationPerformanceManagement,APM),专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。它提供了分布式追踪、服......
  • Docker-Compose部署Gitlab以及Gitlab配置SMTP邮件服务
    使用Docker-Compose部署Gitlab拉取镜像地址:https://hub.docker.com/r/gitlab/gitlab-ce/tags拉取到镜像后,使用dockertag修改镜像,dockerpush推送到自己的镜像仓库(内网部署)编写docker-compose文件##创建容器挂载出来的文件夹mkdir/gitlab&&cd/gitlabmkdir-pdata/{l......
  • Spring Cloud 配置 Nacos
    一,下载Nacos 下载地址:https://github.com/alibaba/nacos/releases 二,启动Nacos安装Nacos的bin目录下,执行:startup.cmd-mstandalone 然后打开上图红框的地址 三,配置服务1配置Nacos创建命名空间(无论本地还是测试服务期,全部注册到Nacos上,通过命名空间可以区分......