1. 简述

Spring profile用例,分3个场景(Test, Dev, Prod)相对Spring 环境与profile(一)——超简用例多了根据具体的profile获取对应的Properties

2. 代码结构

3. 各模块介绍

接口

GenericEnv

public interface GenericEnv {

}

#com.env模块

DevEnv.java

@Component
public class DevEnv implements GenericEnv { private String envName = "dev"; @Value("${profile.name}")
private String profileName; public String getEnvName() {
return envName;
} public void setEnvName(String envName) {
this.envName = envName;
} public String getProfileName() {
return profileName;
} public void setProfileName(String profileName) {
this.profileName = profileName;
} @Override
public String toString() {
return "DevEnv [envName=" + envName + ", profileName=" + profileName
+ "]";
}
}

ProdEnv

@Component
public class ProdEnv implements GenericEnv { private String envName = "prod"; @Value("${profile.name}")
private String profileName; public String getEnvName() {
return envName;
} public void setEnvName(String envName) {
this.envName = envName;
} public String getProfileName() {
return profileName;
} public void setProfileName(String profileName) {
this.profileName = profileName;
} @Override
public String toString() {
return "ProdEnv [envName=" + envName + ", profileName=" + profileName
+ "]";
}
}

TestEnv.java

@Component
public class TestEnv implements GenericEnv { private String envName = "test"; @Value("${profile.name}")
private String profileName; public String getEnvName() {
return envName;
} public void setEnvName(String envName) {
this.envName = envName;
} public String getProfileName() {
return profileName;
} public void setProfileName(String profileName) {
this.profileName = profileName;
} @Override
public String toString() {
return "TestEnv [envName=" + envName + ", profileName=" + profileName
+ "]";
}
}

#resources.properties文件

application-default.properties

# Application Common Properties
profile.name=spring.profile

application-dev.properties

profile.name=dev.profiles

# Database Properties
db.driverClass=com.mysql.jdbc.Driver
db.connectionURL=jdbc:mysql://localhost:3306/emp
db.username=dev_usr
db.password=dev_pss # JMS Properties
jms.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
jms.provider.url=tcp://localhost:61616
jms.queue=dev.queue

application-prod.properties

profile.name=prod.profiles

# Database Properties
db.driverClass=com.mysql.jdbc.Driver
db.connectionURL=jdbc:mysql://192.168.1.1:3306/emp
db.username=prod_usr
db.password=prod_pss # JMS Properties
jms.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
jms.provider.url=tcp://192.168.1.1:61616
jms.queue=prod.queue

application-test.properties

profile.name=test.profiles

# Database Properties
db.driverClass=com.mysql.jdbc.Driver
db.connectionURL=jdbc:mysql://192.168.1.2:3306/emp
db.username=test_usr
db.password=test_pss # JMS Properties
jms.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
jms.provider.url=tcp://192.168.1.2:61616
jms.queue=test.queue

#需解析properties的2个类

DatabaseProperties.java

package com.jcg.prop;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component
public class DatabaseProperties { @Value("${db.driverClass}")
private String driverClass; @Value("${db.connectionURL}")
private String connectionURL; @Value("${db.username}")
private String username; @Value("${db.password}")
private String password; public String getDriverClass() {
return driverClass;
} public String getConnectionURL() {
return connectionURL;
} public String getUsername() {
return username;
} public String getPassword() {
return password;
} @Override
public String toString() {
return "DatabaseProperties [driverClass=" + driverClass
+ ", connectionURL=" + connectionURL + ", username=" + username
+ ", password=" + password + "]";
}
}

JmsProperties

package com.jcg.prop;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component
public class JmsProperties {
/*
JMS即Java消息服务(Java Message Service)应用程序接口
*/ @Value("${jms.factory.initial}")
private String factoryInitial; @Value("${jms.provider.url}")
private String providerUrl; @Value("${jms.queue}")
private String queue; public String getFactoryInitial() {
return factoryInitial;
} public String getProviderUrl() {
return providerUrl;
} public String getQueue() {
return queue;
} @Override
public String toString() {
return "JmsProperties [factoryInitial=" + factoryInitial
+ ", providerUrl=" + providerUrl + ", queue=" + queue + "]";
} }

#resources.spring模块

xml-config-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- scans for annotated classes in the com.company package -->
<context:component-scan base-package="com.jcg" /> <!-- enables annotation based configuration -->
<context:annotation-config /> <beans profile="dev">
<!-- allows for ${} replacement in the spring xml configuration from the
application-default.properties, application-dev files on the classpath -->
<context:property-placeholder
location="classpath:properties/application-default.properties, classpath:properties/application-dev.properties"
ignore-unresolvable="true" /> <!-- scans for annotated classes in the com.env.dev package -->
<context:component-scan base-package="com.env.dev" />
</beans> <beans profile="test">
<context:property-placeholder
location="classpath:properties/application-default.properties, classpath:properties/application-test.properties"
ignore-unresolvable="true" /> <context:component-scan base-package="com.env.test" />
</beans> <beans profile="prod">
<context:property-placeholder
location="classpath:properties/application-default.properties, classpath:properties/application-prod.properties"
ignore-unresolvable="true" /> <context:component-scan base-package="com.env.prod" />
</beans> </beans>

4. 测试

package com.jcg.test;

import junit.framework.TestCase;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.jcg.prop.DatabaseProperties;
import com.jcg.prop.GenericEnv;
import com.jcg.prop.JmsProperties; @RunWith(SpringJUnit4ClassRunner.class)
//Change it to your desired profile
@ActiveProfiles(profiles = "dev")
@ContextConfiguration("classpath:spring/xml-config-context.xml")
public class SpringPropertiesTest extends TestCase { @Autowired
private GenericEnv env; @Autowired
private DatabaseProperties dbProp; @Autowired
private JmsProperties jmsProp; @Test
public void testAppProperties() { System.out.println("Running DatabasePropertiesTest ..."); System.out.println("Environment : " + env.toString()); System.out.println("Database Properties: " + dbProp.toString()); System.out.println("JMS Properties : " + jmsProp.toString());
} }

输出

Running DatabasePropertiesTest ...
Environment : DevEnv [envName=dev, profileName=dev.profiles]
Database Properties: DatabaseProperties [driverClass=com.mysql.jdbc.Driver, connectionURL=jdbc:mysql://localhost:3306/emp, username=dev_usr, password=dev_pss]
JMS Properties : JmsProperties [factoryInitial=org.apache.activemq.jndi.ActiveMQInitialContextFactory, providerUrl=tcp://localhost:61616, queue=dev.queue]

5. 代码

路径

Spring 环境与profile(二)——Properties with Spring的更多相关文章

  1. Spring Boot2 系列教程(二十三)理解 Spring Data Jpa

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa! 其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring ...

  2. Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源

    本文是 Spring Boot 整合数据持久化方案的最后一篇,主要和大伙来聊聊 Spring Boot 整合 Jpa 多数据源问题.在 Spring Boot 整合JbdcTemplate 多数据源. ...

  3. Spring Boot2 系列教程(二十六)Spring Boot 整合 Redis

    在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...

  4. Spring Boot系列(二):Spring Boot自动装配原理解析

    一.Spring Boot整合第三方组件(Redis为例) 1.加依赖 <!--redis--> <dependency> <groupId>org.springf ...

  5. Spring Boot2 系列教程(二十四)Spring Boot 整合 Jpa

    Spring Boot 中的数据持久化方案前面给大伙介绍了两种了,一个是 JdbcTemplate,还有一个 MyBatis,JdbcTemplate 配置简单,使用也简单,但是功能也非常有限,MyB ...

  6. Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件

    上一篇文章,写了如何搭建一个简单的Spring boot项目,本篇是接着上一篇文章写得:Spring boot入门:快速搭建Spring boot项目(一),主要是spring boot集成mybat ...

  7. Spring学习笔记(二) 初探Spring

    版权声明 笔记出自<Spring 开发指南>一书. Spring 初探 前面我们简单介绍了 Spring 的基本组件和功能,现在我们来看一个简单示例: Person接口Person接口定义 ...

  8. Spring Boot (十二): Spring Boot 邮件服务

    最早我们发邮件的时候是使用 JavaMail 来发送邮件,而在 Spring Boot 中, Spring Boot 帮我们将 JavaMail 封装好了,是可以直接拿来使用的. 1. 依赖文件 po ...

  9. Spring Boot2 系列教程(二十八)Spring Boot 整合 Session 共享

    这篇文章是松哥的原创,但是在第一次发布的时候,忘了标记原创,结果被好多号转发,导致我后来整理的时候自己没法标记原创了.写了几百篇原创技术干货了,有一两篇忘记标记原创进而造成的一点点小小损失也能接受,不 ...

随机推荐

  1. sdut 3916

    这道题就是二分枚举加贪心,小蓝书上一开始就讲的,但是我给忘了,很难受 #include <iostream> #include <cstdio> #include <cs ...

  2. [kuangbin]树链剖分 C - Tree

    和平常的树链剖分维护边权不同的地方在于对线段树的要求较高 NEGATE 反转区间,也就是a - b 内所有的边权取相反数 而Query询问是最大值,所以也就是维护可取反区间的最大值问题 需要维护的值是 ...

  3. tarjan算法--求解无向图的割点和桥

    1.桥:是存在于无向图中的这样的一条边,如果去掉这一条边,那么整张无向图会分为两部分,这样的一条边称为桥 也就是说 无向连通图中,如果删除某边后,图变成不连通,则称该边为桥 2.割点:无向连通图中,如 ...

  4. Handle( )

    Handle( ) //得到PB窗口型对象的句柄 功  能:得到PB窗口型对象的句柄.使用该函数可以得到应用对象.窗口或控件的句柄,但不能得到绘图对象的句柄. 语  法:Handle ( object ...

  5. sentiwordnet的简单使用

    # Example line: # POS     ID     PosS  NegS SynsetTerm#sentimentscore    Desc # a   00009618  0.5    ...

  6. hdu 1.3.2 Moving Tables

    这道题比较简单,就是用数组存取其路径.如101和102是对门,其过道号可以记为51.  1和2之间的为1. 今早突然收到操作系统停课的通知,哈哈 回来就做一下水题,开心 #include<cst ...

  7. Visual Studio Code 显示隐藏的.git文件和目录

    在默认设置中,Visual Studio Code 将下列文件文件排除在显示列表中: "files.exclude": { "**/.git": true, & ...

  8. SQL SERVER的锁机制(四)——概述(各种事务隔离级别发生的影响)

    六.各种事务隔离级别发生的影响 修改数据的用户会影响同时读取或修改相同数据的其他用户.即这些用户可以并发访问数据.如果数据存储系统没有并发控制,则用户可能会看到以下负面影响: · 未提交的依赖关系(脏 ...

  9. 利用 Azure Devops 创建和发布 Nuget 包

    利用 Azure Devops 创建和发布 Nuget 包 原 Visual Studio Team Service ,简称 VSTS,能够创建 pipelines 管道以构建应用程序,并将其部署到任 ...

  10. C# Enum枚举类型操作扩展类

    使用示例: using System.ComponentModel; namespace SchoolEnterpriseManageSys.Enum { /// <summary> // ...