SpringBoot 静态属性值的注入-----------使用@Value注入static属性

spring 不允许/不支持把值注入到静态变量中,因为Spring 依赖注入是依赖 set方法,而set方法是普通的对象方法,而被static修饰的属性字段是属于类变量,所以无法注入。

当我们需要给一个配置类的static属性赋值时:private static String clusterName;

 当我们给clusterName属性赋值时,思路就是将静态属性的静态set方法覆写成普通的set方法(也就是去掉static修饰),覆写其静态的set方法:

    @Value("${spring.elasticsearch.cluster.name}")

    public  void setClusterName(String clusterName) {

        ElasticSearchConfiguration.clusterName = clusterName;

    }

    注意:这里的set方法是没有使用static修饰的

    一个类实例如下:

package com.caict.core.config;

import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @Author : fengx
 * @Date : 2018/6/25 16:06
 * @Description
 * @Version 1.0
 */
@Component
@ConfigurationProperties
@PropertySource("classpath:nginx.properties")
public class ElasticSearchConfiguration {

    /** ES集群 */
    private static String[] hosts;

    /** ES端口配置 */
    private static int port;

    /** ES是否启动自动嗅探机制 */
    private static boolean sniff;

    /** ES集群名称 */
    private static String clusterName;

    /** 超时时间 */
    private static String timeout;


    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }

    public static String[] getHosts() {
        return hosts;
    }

    @Value("${spring.elasticsearch.hosts}")
    public  void setHosts(String[] hosts) {
        ElasticSearchConfiguration.hosts = hosts;
    }

    public static int getPort() {
        return port;
    }

    @Value("${spring.elasticsearch.port}")
    public  void setPort(int port) {
        ElasticSearchConfiguration.port = port;
    }

    public static boolean isSniff() {
        return sniff;
    }

    @Value("${spring.elasticsearch.client.transport.sniff}")
    public  void setSniff(boolean sniff) {
        ElasticSearchConfiguration.sniff = sniff;
    }

    public static String getClusterName() {
        return clusterName;
    }

    @Value("${spring.elasticsearch.cluster.name}")
    public  void setClusterName(String clusterName) {
        ElasticSearchConfiguration.clusterName = clusterName;
    }

    public static String getTimeout() {
        return timeout;
    }

    @Value("${spring.elasticsearch.client.transport.ping.timeout}")
    public  void setTimeout(String timeout) {
        ElasticSearchConfiguration.timeout = timeout;
    }
}

对应的配置文件

#elasticSearch配置
spring.elasticsearch.hosts=ES集群IP
spring.elasticsearch.port=9300
spring.elasticsearch.client.transport.sniff=true
spring.elasticsearch.cluster.name=elasticsearch
spring.elasticsearch.client.transport.ping.timeout=20s

注:SpringBoot的配置文件注入好像不支持.yml格式的资源文件,只能使用*.properties格式的资源文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值