针对生产环境,测试环境,以及本地调试开发有时会配置多套数据库,在一个数据配置文件进行修改,往往有时发布到生成环境会忘记修改,或者本地调试时还是生产环境的库,会导致生产环境数据被污染。

ps--刚开始配完发现在Myeclipse一直是“development”模式,后来发现tomcat配置完之后要myeclise中进行jdk配置。

1.这里我们可以配置多个数据源配置文件:

application.development.properties 作为开发环境;

application.local.properties 作为本地调试环境;

application.properties 作为生产环境;

application.test.properties 作为测试环境;

1

2

3

4

5

6

7

8

9

10

11

12

jdbc.driver=com.mysql.jdbc.Driver

#development

jdbc.url=jdbc:mysql://ip:port/database?autoReconnect=true&initialTimeout=3&useUnicode=true&characterEncoding=utf-8

jdbc.username=user

jdbc.password=password

#connection pool settings

jdbc.pool.minIdle=1

jdbc.pool.maxIdle=3

jdbc.pool.maxActive=30

jdbc.pool.maxWait=12000

  

2.然后在applicationContext.xml配置文件中配置对应的数据源:

配置文件有点长,主要是我配置了四个数据源,耐心点看吧- -

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

<?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" xmlns:jdbc="http://www.springframework.org/schema/jdbc"  

    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"

    xmlns:jpa="http://www.springframework.org/schema/data/jpa"

    xsi:schemaLocation="

        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd

        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd

        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd

        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd

        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd"

    default-lazy-init="true">

    <description>Spring公共配置 </description>

    <context:annotation-config />

    

    <!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 -->

    <context:component-scan base-package="com.eteclab.wodm">

        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

        <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>

    </context:component-scan>

    <!-- Jpa Entity Manager 配置 -->

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 

        <property name="dataSource" ref="dataSource"/>

        <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>

        <property name="packagesToScan" value="com.eteclab"/>

        <property name="jpaProperties">

            <props>

                <!-- 命名规则 My_NAME->MyName -->

                <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>

            </props>

        </property>

    </bean>

    

    <bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">

        <property name="databasePlatform">

            <bean factory-method="getDialect" class="org.eteclab.modules.persistence.Hibernates">

                <constructor-arg ref="dataSource"/>

            </bean>

        </property>

    </bean>

    <!-- Spring Data Jpa配置 -->

    <jpa:repositories base-package="com.eteclab.wodm"  transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>

   

    <!-- Jpa 事务配置 -->

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

        <property name="entityManagerFactory" ref="entityManagerFactory"/>

    </bean>

    <!-- 使用annotation定义事务 -->

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

    <!-- JSR303 Validator定义 -->

    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />

    

    <!-- production环境 -->

    <beans profile="production">

        <context:property-placeholder ignore-unresolvable="true" 

        location="classpath*:/application.properties"/>  

        

        <!-- 数据源配置, 使用Tomcat JDBC连接池 -->

        <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">

            <!-- Connection Info -->

            <property name="driverClassName" value="${jdbc.driver}" />

            <property name="url" value="${jdbc.url}" />

            <property name="username" value="${jdbc.username}" />

            <property name="password" value="${jdbc.password}" />

        

            <!-- 连接数控制与连接归还策略 -->

            <property name="maxActive" value="${jdbc.pool.maxActive}" />

            <property name="maxIdle" value="${jdbc.pool.maxIdle}" />

            <property name="minIdle" value="${jdbc.pool.minIdle}" />

            <property name="maxWait" value="${jdbc.pool.maxWait}" />

            <property name="defaultAutoCommit" value="false" />

            <!-- 连接Idle一个小时后超时 -->

            <property name="timeBetweenEvictionRunsMillis" value="30000" />

            <property name="minEvictableIdleTimeMillis" value="30000" />

            <!-- 应对网络不稳定的策略 -->

            <!-- <property name="testOnBorrow" value="true" />

            <property name="validationInterval" value="30000" />

            <property name="validationQuery" value="select 1 from dual" /> -->

             <property name="testOnReturn" value="true"></property>

             <property name="testWhileIdle" value="true"></property>

            <property name="testOnBorrow" value="true" />

            <property name="validationInterval" value="30000" />

            <property name="validationQuery" value="select 1 from dual" />

            <!-- 应对连接泄漏的策略 -->

            <property name="removeAbandoned" value="true" />

            <property name="removeAbandonedTimeout" value="60" />

        </bean>

        

        <!-- 数据源配置,使用应用服务器的数据库连接池 -->

        <!--<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/ExampleDB" />-->

    </beans>

    

    <!-- local development环境 -->

    <beans profile="development">

        <context:property-placeholder ignore-resource-not-found="true"

            location="classpath*:/application.development.properties" /> 

        <!-- Tomcat JDBC连接池 -->

        <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">

            <!-- Connection Info -->

            <property name="driverClassName" value="${jdbc.driver}" />

            <property name="url" value="${jdbc.url}" />

            <property name="username" value="${jdbc.username}" />

            <property name="password" value="${jdbc.password}" />

        

            <!-- 连接数控制与连接归还策略 -->

            <property name="maxActive" value="${jdbc.pool.maxActive}" />

            <property name="maxIdle" value="${jdbc.pool.maxIdle}" />

            <property name="minIdle" value="${jdbc.pool.minIdle}" />

            <property name="maxWait" value="${jdbc.pool.maxWait}" />

            <property name="defaultAutoCommit" value="false" />

            <!-- 连接Idle一个小时后超时 -->

            <property name="timeBetweenEvictionRunsMillis" value="30000" />

            <property name="minEvictableIdleTimeMillis" value="30000" />

            <!-- 应对网络不稳定的策略 -->

            <property name="testOnBorrow" value="true" />

            <property name="validationInterval" value="30000" />

            <property name="validationQuery" value="select 1 from dual" />

            <!-- 应对连接泄漏的策略 -->

            <property name="removeAbandoned" value="true" />

            <property name="removeAbandonedTimeout" value="60" />

        </bean>

    </beans>

    

    <!-- local test 环境 -->

    <beans profile="local">

        <context:property-placeholder ignore-resource-not-found="true"

            location="classpath*:/application.local.properties" />   

        <!-- Tomcat JDBC连接池 -->

        <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">

            <!-- Connection Info -->

            <property name="driverClassName" value="${jdbc.driver}" />

            <property name="url" value="${jdbc.url}" />

            <property name="username" value="${jdbc.username}" />

            <property name="password" value="${jdbc.password}" />

        

            <!-- 连接数控制与连接归还策略 -->

            <property name="maxActive" value="${jdbc.pool.maxActive}" />

            <property name="maxIdle" value="${jdbc.pool.maxIdle}" />

            <property name="minIdle" value="${jdbc.pool.minIdle}" />

            <property name="maxWait" value="${jdbc.pool.maxWait}" />

            <property name="defaultAutoCommit" value="false" />

            <!-- 连接Idle一个小时后超时 -->

            <property name="timeBetweenEvictionRunsMillis" value="30000" />

            <property name="minEvictableIdleTimeMillis" value="30000" />

            <!-- 应对网络不稳定的策略 -->

            <property name="testOnBorrow" value="true" />

            <property name="validationInterval" value="30000" />

            <property name="validationQuery" value="select 1 from dual" />

            <!-- 应对连接泄漏的策略 -->

            <property name="removeAbandoned" value="true" />

            <property name="removeAbandonedTimeout" value="60" />

        </bean>

    </beans>

    

    <!-- unit test环境 -->

    <beans profile="test">

        <context:property-placeholder ignore-resource-not-found="true"

            location="classpath*:/application.test.properties" />    

        

        <!-- Tomcat JDBC连接池 -->

        <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">

            <!-- Connection Info -->

            <property name="driverClassName" value="${jdbc.driver}" />

            <property name="url" value="${jdbc.url}" />

            <property name="username" value="${jdbc.username}" />

            <property name="password" value="${jdbc.password}" />

        

            <!-- 连接数控制与连接归还策略 -->

            <property name="maxActive" value="${jdbc.pool.maxActive}" />

            <property name="maxIdle" value="${jdbc.pool.maxIdle}" />

            <property name="minIdle" value="${jdbc.pool.minIdle}" />

            <property name="maxWait" value="${jdbc.pool.maxWait}" />

            <property name="defaultAutoCommit" value="false" />

            <!-- 连接Idle一个小时后超时 -->

            <property name="timeBetweenEvictionRunsMillis" value="30000" />

            <property name="minEvictableIdleTimeMillis" value="30000" />

            <!-- 应对网络不稳定的策略 -->

            <property name="testOnBorrow" value="true" />

            <property name="validationInterval" value="30000" />

            <property name="validationQuery" value="select 1 from dual" />

            <!-- 应对连接泄漏的策略 -->

            <property name="removeAbandoned" value="true" />

            <property name="removeAbandonedTimeout" value="60" />

        </bean>

    </beans>

</beans>

 3.对tomcat服务器进行修改:

{tomcat_home}

/bin/catalina.bat 或 catalina.sh 以确定tomcat所在服务器的环境

{production, development, local, test}

对于windows操作系统,在catalina.bat的第二行,增加如下的语句

set CATALINA_OPTS=%CATALINA_OPTS% -Dspring.profiles.active="production"

对于linux操作系统,在catalina.sh的第二行,增加如下的语句

CATALINA_OPTS="$CATALINA_OPTS -Dspring.profiles.active=\"production\""

注意这里的"production",只能是{production, development, local, test}中的一个

例如我在我本地开发,使用“local”配置:

还有一步要注意的地方就是在web.xml文件中:

配置默认为开发环境,这样如果新接触项目的开发人员如果本地没有配置tomcat,也不会触及到生产环境。

*************************************************************************************************

*************************************************************************************************

这里我们可以在项目中写一个监听类,来监听项目运行时所属的环境:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public class InitConfigListener  implements ServletContextListener {

    

    public void contextInitialized(ServletContextEvent sce) {

        //侦测jvm环境,并缓存到全局变量中

        String env = System.getProperty("spring.profiles.active");

        if(env == null) {

            Config.ENV = "development";

        else {

            Config.ENV = env;

        }

        

        System.out.println("==================================================================================================");

        System.out.println("The Application "+sce.getServletContext().getServletContextName()+" is running on the environment:" + Config.ENV);

        System.out.println("==================================================================================================");

    }

    @Override

    public void contextDestroyed(ServletContextEvent arg0) {

    }

}

  

1

2

3

4

5

public class Config {

    public static String ENV = "development";//默认开发常量

    

}

  直接启动tomcat看到如下效果:

当然我们更希望是在Myeclise开发工具中启动- -

最后启动tomcat就出来了= =

配置多个数据源,spring profile 多环境配置管理相关推荐

  1. Springboot使用Maven Profile和Spring Profile进行多环境配置

    Springboot使用Maven Profile和Spring Profile进行多环境配置 目的 在实际的项目上,一般会分三种环境dev.test.prod来方便我们的开发和部署,要求我们在开发的 ...

  2. springboot配置多项目下统一切换不同环境变量profile办法

    springboot配置多项目下统一切换不同环境变量profile办法 springboot 适合于微服务那种多项目开发,每一个小项目就是一个springboot 项目,比如我们这样: 问题发生: 我 ...

  3. SpringBoot-Spring profile多环境logback日志配置

    SpringBoot-Spring profile多环境logback日志配置 Spring profile多环境配置 参考 Spring profile是Spring 3引入的概念,主要用在项目多环 ...

  4. Spring配置详解,Spring配置元信息详解,Spring配置大全及源码分析

    文章目录 一.Spring都可以配置哪些元信息 二.Spring Bean 配置元信息 1.GenericBeanDefinition 2.RootBeanDefinition 3.Annotated ...

  5. Springboot使用Maven项目使用 Profiles和Spring Profile进行多环境配置 动态激活指定

    最终效果:①:IDEA右边"maven"的工具栏 ②:项目配置的多环境选项入口[默认:dev] ③:项目配置的多环境配置文件 ④:选择②操作后编译生成的配置文件[去除其它环境配置文 ...

  6. 嗯,挺全乎儿的,Spring Boot 多环境配置都在这儿了,你喜欢哪一种呢?

    目录 前言 Spring Boot 自带的多环境配置 创建不同环境的配置文件 指定运行的环境 Maven 的多环境配置 创建多环境配置文件 定义激活的变量 pom 文件中定义 profiles 资源过 ...

  7. Spring Boot基础学习笔记05:Spring Boot多环境配置

    文章目录 零.学习目标 1.掌握使用Profile文件进行多环境配置 2.掌握使用@Profile注解进行多环境配置 3.熟悉随机值设置以及参数间引用 一.项目进行多环境配置的必要性 二.使用Prof ...

  8. Spring : Spring profile 实现多环境支持

    1.美图 2.概述 Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活.指定参数等方式快速切换环境 2.1 多Profile文件 在主配置文件编写的时候,文件名可以是 appl ...

  9. Spring Boot使用spring-data-jpa配置Mysql多数据源

    转载请注明出处 :Spring Boot使用spring-data-jpa配置Mysql多数据源 我们在之前的文章中已经学习了Spring Boot中使用mysql数据库 在单数据源的情况下,Spri ...

  10. 图文细描:Maven Profiles 与 Spring Profiles 多环境配置

    目录 前言 Spring Profiles使用 Maven Profiels使用 Spring Profiles和 Maven Profiles结合配置来打包 注意 前言 在项目开发过程中,我们离不开 ...

最新文章

  1. android m权限工具类,android M权限适配,简单工具类
  2. MKCMS6.2.3视频程序源码修复列表页
  3. Spring Boot系列教程五:使用properties配置文件实现多环境配置
  4. iPhone 12机模曝光:继续刘海屏、回归直面边框
  5. K8s与Docker
  6. 正则表达式 以字符串开头_干货-Shell编程之正则表达式
  7. 计算机多媒体应用的技术手段,计算机多媒体技术的关键性技术
  8. 干货 | 人工智能应用落地的关键成功要素
  9. 微信公众号迁移、公证办理流程
  10. win7序列号(可激活所有版本)
  11. 数值计算和SVM讲解(下)
  12. 注册表操作,reg脚本简单编写
  13. 【沙滩爱心桌面主题】_9.4
  14. 【Web】CSS实现鼠标悬停实现显示与隐藏 特效
  15. 具有超能力的对话式机器人性能如何? #Chatsonic AI
  16. 【Android安全】AOSP与GMS | 安卓开源
  17. matlab psb,基于Matlab_PSB的电路仿真分析
  18. Linux下cp命令
  19. JavaSE常识类英语
  20. Mac 如何重置 root 密码

热门文章

  1. arcgis下载地址
  2. 计算机技术学科分类号,专业分类号及学科码对照表.doc
  3. C# 在线PDF阅读
  4. web版pdf在线阅读器
  5. perl语言入门(1)标量数据
  6. 【笑话】男生追女生的数学模型
  7. 程序员必备的一些数学基础知识
  8. 分享我用cnode社区api做微信小应用的入门过程
  9. Java中如何删除文件呢?
  10. Mac安装MySQL详细教程