由于需要访问MongoDB,但是本地开发环境不能直接连接MongoDB,需要通过SecureCRT使用127.0.0.2本地IP代理。但是程序部署到线上生产环境后,是可以直接访问MongoDB的,因此开发好程序后,总是要修改一下MongoDB服务器的IP才能提交代码,这样很是不方便。

    private static final String PUBCHAT_HOST = "127.0.0.2";
// private static final String PUBCHAT_HOST = "PROD_MONGO_SERVER_IP";

由于没有使用spring-boot自带的 spring-boot-starter-data-mongodb ,而是使用 mongo-java-driver 访问MongoDB,因此在程序中需要定义一些访问MongoDB的配置,比如服务器地址、IP端口、数据库名……使用一个工具类的静态变量声明这些配置信息,配置信息的值保存在application.yml 配置文件中。通过 @ConfigurationProperties 注入。

静态工具类定义

属性是静态的:

private static  String chat_username;

然后通过非静态的 set方法注入:

    @Value("${mongo.config.username}")
public void setChat_username(String chat_username) {
MongoConfig.chat_username = chat_username;
}

其他类通过公有的静态get方法获取属性:

    public static String getChat_username() {
return chat_username;
}

prefix 的值在 application.yml 中定义

@ConfigurationProperties(prefix = "mongo.config")
public class MongoConfig {
.....

整个完整代码如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* Created by Administrator on 2018/4/4.
*/
@Component(value = "MongoConfig")
@ConfigurationProperties(prefix = "mongo.config")
public class MongoConfig { private static String chat_username; private static String chat_password ; private static String chat_host; private static int chat_port; private static String chat_dbname; private static String chat_collprefix; public static String getChat_username() {
return chat_username;
} @Value("${mongo.config.username}")
public void setChat_username(String chat_username) {
MongoConfig.chat_username = chat_username;
} public static String getChat_password() {
return chat_password;
} @Value("${mongo.config.password}")
public void setChat_password(String chat_password) {
MongoConfig.chat_password = chat_password;
} public static String getChat_host() {
return chat_host;
} @Value("${mongo.config.host}")
public void setChat_host(String chat_host) {
MongoConfig.chat_host = chat_host;
} public static int getChat_port() {
return chat_port;
} @Value("${mongo.config.port}")
public static void setChat_port(int chat_port) {
MongoConfig.chat_port = chat_port;
} public static String getChat_dbname() {
return chat_dbname;
} @Value("${mongo.config.dbname}")
public void setChat_dbname(String chat_dbname) {
MongoConfig.chat_dbname = chat_dbname;
} public static String getChat_collprefix() {
return chat_collprefix;
} @Value("${mongo.config.collprefix}")
public void setChat_collprefix(String chat_collprefix) {
MongoConfig.chat_collprefix = chat_collprefix;
}
}

yml配置文件定义

通过 profile 指定不同环境下使用不同的配置。active 指定激活的环境,比如 dev 或者 prod

spring:
application:
name: textml
profiles:
active: dev ---
spring:
profiles: dev, default,test mongo:
config:
username: "xxx"
password: "xxx"
host: "127.0.0.2"
port: 10001
dbname: "xxx"
collprefix: "xxxx" ---
spring:
profiles: prod
mongo:
config:
username: "xxx"
password: "xxx"
host: "xxxx"
port: 10001
dbname: "xxxx"
collprefix: "xxx"

测试

由于使用了MongoDB自定义配置,故使用 @SpringBootApplication(exclude = MongoAutoConfiguration.class) 排除Spring-boot 中自带的MongoDB配置。

@SpringBootApplication(exclude = MongoAutoConfiguration.class)
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("--config value--username:" + MongoConfig.getChat_username());
}
}

参考:spring boot 静态变量注入配置文件

Spring boot 工具类静态属性注入及多环境配置的更多相关文章

  1. spring框架对于实体类复杂属性注入xml文件的配置

    spring框架是javaWeb项目中至关重要的一个框架,大多web 项目在工作层次上分为持久层.服务层.控制层.持久层(dao.mapper)用于连接数据库,完成项目与数据库中数据的传递:服务层(s ...

  2. 2015第30周三Spring常用工具类

    文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...

  3. 17、Spring Boot普通类调用bean【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/52013017 我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个 ...

  4. 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】

    原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...

  5. (17)Spring Boot普通类调用bean【从零开始学Spring Boot】

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ...

  6. Spring Boot 中的静态资源到底要放在哪里?

    当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥Spring Boot 中的静态资源加载问题:"松哥,我的HTML页面好像没有样式?& ...

  7. (16)Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】

    在上一节使用是配置文件的方式进行使用druid,这里在扩散下使用编程式进行使用Druid,在上一节我们新建了一个类:DruidConfiguration我在这个类进行编码: package com.k ...

  8. Spring Boot2 系列教程(十一)Spring Boot 中的静态资源配置

    当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥 Spring Boot 中的静态资源加载问题:"松哥,我的 HTML 页面好像没有样 ...

  9. Spring Boot实战:静态资源处理

    前两章我们分享了Spring boot对Restful 的支持,不过Restful的接口通常仅仅返回数据.而做web开发的时候,我们往往会有很多静态资源,如html.图片.css等.那如何向前端返回静 ...

随机推荐

  1. Hdoj 1392.Surround the Trees 题解

    Problem Description There are a lot of trees in an area. A peasant wants to buy a rope to surround a ...

  2. 通过pycharm将代码push到远程仓库

    现在使用pycharm作为python编辑器的人还是不少,而且,也可以通过pycharm将代码push到远程仓库. 步骤见下面截图: 填上远程仓库地址及克隆到本地的目录 输入远程仓库的账号和密码 修改 ...

  3. bzoj1009 GT考试 (kmp+矩阵优化dp)

    设f[i][j]是到第i位 已经匹配上了j位的状态数 然后通过枚举下一位放0~9,可以用kmp处理出一个转移的矩阵 然后就可以矩阵快速幂了 #include<bits/stdc++.h> ...

  4. CAN总线要点

    前言 CAN总线的应用在现在看来越来越广泛,我厂设备从最初的ARM9与ARM7平台.期间升级过度到CortexA8与Cortex M3平台,再到现在的Cortex M4平台,围绕CAN进行了一系列产品 ...

  5. BUG描述规范管理

    BUG:软件系统中存在的可能导致系统出错.失效.死机等问题的错误或缺陷. 描述一个缺陷,需要以下核心要素 标题:用简洁的话描述该缺陷,主要让开发知道这是一个什么样的缺陷 参数设置:Bug的类型(功能/ ...

  6. python pip NameError:name 'pip' is not defined”

    https://www.jianshu.com/p/f57f98ebcb21 问题: 如果直接在命令行里面输入pip或者pip3,提示:(如图1) “NameError:name 'pip' is n ...

  7. 转:upload.parseRequest为空

    上传是items一直是空list.导致原因是struts2把原始的原来S2为简化上传功能,把所有的enctype="multipart/form-data"表单做了wrapper最 ...

  8. Traffic Management Gym - 101875G

    题意: 有n辆车,在一条直线上运动,给定位置和速度.如果后车追上前车,则后车不会超车,而已变成前车的速度前进,问最后一次上述车速变化发生在何时. 思路: 假设有一下车辆,数字代表移动速度,具体位置未知 ...

  9. 利用sys打印进度条

    在很多常见中,需要对当前处理的进度进行显示,这个时候就需要进度条了,在python中,也有封装好的进度条模块,当然,也可以自己编写一个简单的进度条来帮助理解进度条的实现. 首先,需要理解一个概念,就是 ...

  10. (计算几何 线段判交) 51nod1264 线段相交

    1264 线段相交 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No".   ...