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的配置文件中,如下图
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
如果是静态变量用上述方法 做参数的读取,
如果是非静态变量取值
直接即可