由于需要访问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. 【BZOJ5324】[JXOI2018]守卫(动态规划)

    [BZOJ5324][JXOI2018]守卫(动态规划) 题面 BZOJ 洛谷 题解 既然只能看到横坐标在左侧的点,那么对于任意一个区间\([l,r]\)而言,\(r\)必须被选. 假设\(r\)看不 ...

  2. Dynamic CRM 2015学习笔记(2)更改系统显示语言

    默认装的是英文的系统,想换成中文的.下面列出操作步骤: 1. 下载并安装语言包 http://www.microsoft.com/en-US/download/details.aspx?id=4501 ...

  3. 不是说记住rm -rf的教训就够了

    不是说记住rm -rf的教训就够了 李阿玲· 12 天前 2013年,我在同步CTAN镜像的时候,在/home下我的文件夹里面操作了下面的命令: rsync -av --delete rsync:// ...

  4. noiac26 T1 (并查集)

    考虑计算每个位置的数作为最小值时有多少种情况 方便起见,以位置为第二关键字比较大小,这样就不会出现“相同的”数 可以方便地计算出以i位置为最小值的区间端点的可行位置:[A,i],[i,B] 这是我选的 ...

  5. FZU 2150 Fire Game (bfs+dfs)

    Problem Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M board ...

  6. 树状数组入门 hdu1541 Stars

    树状数组 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有元素之和,但是每次 ...

  7. iView 的分页结合表格用法

    HTML: <Table border stripe ref="selection" :columns="columns" :data="now ...

  8. 洛谷P4363 一双木棋 chess

    洛谷P4363 一双木棋 chess 省选最水的一道题了. 且看我数个月AC一道题...... 具体是这样的:我们发现这个下了棋的地方一定形成一个锯齿形,那么怎么状态压缩呢? 维护轮廓线! 从左下角出 ...

  9. 区间最深LCA

    求编号在区间[l, r]之间的两两lca的深度最大值. 例题. 解:口胡几种做法.前两种基于莫队,第三种是启发式合并 + 扫描线,第四种是lct + 线段树. ①: 有个结论就是这个答案一定是点集中D ...

  10. 透彻掌握Promise的使用

    Promise的重要性我认为我没有必要多讲,概括起来说就是必须得掌握,而且还要掌握透彻.这篇文章的开头,主要跟大家分析一下,为什么会有Promise出现. 在实际的使用当中,有非常多的应用场景我们不能 ...