Spring框架通过@Value读取配置文件中的值从配置到完成,Spring静态变量@Value如何读取配置文件中的参数

Spring框架,注意!!!!!不是Springboot ! ! ! ! !

先看pom文件中配置

下面展示一些 内联代码片

   <build>
        <finalName>aps-server</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>filters/*</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
        <filters>
            <filter>src/main/resources/filters/${deploy.env}.properties</filter>
        </filters>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <deploy.env>dev</deploy.env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <deploy.env>test</deploy.env>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <deploy.env>prod</deploy.env>
            </properties>
        </profile>
        <profile>
            <id>huawei</id>
            <properties>
                <deploy.env>huawei</deploy.env>
            </properties>
        </profile>
    </profiles>

这是pom文件的配置,不需要具体的解释 配上配置文件的图片你就懂了

在这里插入图片描述

xml文件中装配,Spring不是boot 不能自动装配的,内容还是需要你将配置文件中的内容以键值对的形式托管给Spring框架

// <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
	    <property name="ignoreUnresolvablePlaceholders" value="true" />
	     <property name="order" value="1" />  
	    <property name="locations">  
	        <list>  
	            <value>classpath:jdbc.properties</value>
                <value>classpath:application.properties</value>
	        </list>  
	    </property>  
	</bean>

其中application.properties的位置在这里,如下图
在这里插入图片描述
为什么不放在里面的配置文件,而是要放在外面的配置文件???
因为内部的配置文件代表不同的环境,而在pom文件的位置可以指定此项目启动究竟是加载的哪个环境的配置文件,
在这里插入图片描述
因此,只要讲配置文件所需要的读取的键值对参数放在 内部配置文件,而用外部配置文件去引用,则可以做到 不同配置文件 参数的自动转换!!

在这里插入图片描述

而在dev的配置文件中,如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217113739981.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDg2MDQ4NQ==,size_16,color_FFFFFF,t_70

Java代码为

package com.yhl.aps.base.rabbitmq;

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.yhl.aps.base.config.RabbitConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;


import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * RabbitMQ的基础连接
 * @author zj
 * @date 2020/11/7
 */
@Component
public class RabbitMQConnectionUtils {


    private  static String BOSCH_RABBITMQ_HOST;

    private  static String BOSCH_RABBITMQ_USER;

    private  static String BOSCH_RABBITMQ_PASSWORD;

    public static volatile Connection connection;


    /**
     * 若connection timeout 连接不上尝试关闭防火墙或者放开端口访问
     * @return
     * @throws IOException
     * @throws TimeoutException
     */
    public static Connection getConnection() throws IOException, TimeoutException {

        if(connection==null){//第一层检查,检查是否有引用指向对象,高并发情况下会有多个线程同时进入
            synchronized (RabbitMQConnectionUtils.class){//第一层锁,保证只有一个线程进入
                if(connection==null){//第二层检查
                    //定义一个连接工厂
                    ConnectionFactory connectionFactory = new ConnectionFactory();

                    //设置服务器地址
                    connectionFactory.setHost(BOSCH_RABBITMQ_HOST);

                    //AMQP 15672
                    connectionFactory.setPort(5672);

                    //vhost
                    connectionFactory.setVirtualHost(RabbitConfig.BOSCH_VHOST);

                    //设置用户名
                    connectionFactory.setUsername(BOSCH_RABBITMQ_USER);

                    //设置密码
                    connectionFactory.setPassword(BOSCH_RABBITMQ_PASSWORD);

                    return connectionFactory.newConnection();
                }
            }
        }
        return connection;

    }

    @Value("${rabbitmq.host}")
    public void setBOSCH_RABBITMQ_HOST(String host){
        RabbitMQConnectionUtils.BOSCH_RABBITMQ_HOST = host;
    }

    @Value("${rabbitmq.username}")
    public void setBOSCH_RABBITMQ_USER(String username){
        RabbitMQConnectionUtils.BOSCH_RABBITMQ_USER = username;
    }

    @Value("${rabbitmq.password}")
    public void setBOSCH_RABBITMQ_PASSWORD(String password){
        RabbitMQConnectionUtils.BOSCH_RABBITMQ_PASSWORD = password;
    }
}



不同业务不同用法, 其中主要核心就是 此类需要被Spring所管理,所以类名上面是需要加注解的,@Service 或者是@Component

如果是静态变量用上述方法 做参数的读取,

如果是非静态变量取值
直接即可

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值