jparepository需要指定的泛型參數,spring 容器的 profile 功能

 2023-12-06 阅读 24 评论 0

摘要:為什么80%的碼農都做不了架構師?>>> ?? ? ? ? ? 軟件開發的一般流程為工程師開發 ->?測試?-> 上線,因此就涉及到三個不同的環境,開發環境、測試環境以及生產環境,通常這三個環境會有很多配置參數不同,例如數據源、文件路徑

為什么80%的碼農都做不了架構師?>>> ??hot3.png

? ? ? ? 軟件開發的一般流程為工程師開發 ->?測試?-> 上線,因此就涉及到三個不同的環境,開發環境、測試環境以及生產環境,通常這三個環境會有很多配置參數不同,例如數據源、文件路徑、url等,如果每次上線一個新版本時都手動修改配置會十分繁瑣,容易出錯。spring?為我們提供了 profile 機制來解決這個問題。

? ? ? ? spring允許我們通過定義 profile 來將若干不同的 bean 定義組織起來,從而實現不同環境自動激活不同的 profile 來切換配置參數的功能,下面介紹以 xml 的方式定義 profile、如何激活 profile以及定義默認的 profile,整個過程我以配置不同環境的數據源為例,為了簡化配置,這里假設只有開發和生產兩個環境。

數據源定義為

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  <property name="user" value="${jdbc.user}" />   <property name="password" value="${jdbc.password}" />   <property name="jdbcUrl" value="${jdbc.jdbcUrl}" />     <property name="driverClass" value="${jdbc.driverClass}" />  <property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>  <property name="acquireIncrement" value="${c3p0.acquireIncrement}"/>  <property name="minPoolSize" value="${c3p0.minPoolSize}"/>  <property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>  <property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}" />  <property name="preferredTestQuery" value="${c3p0.preferredTestQuery}"/>  
</bean>  

classpath下外部資源文件有兩個?settings-development.properties 和?settings-production.properties,分別是開發環境和生產環境的數據源配置參數,內容如下

jparepository需要指定的泛型參數?settings-development.properties

jdbc.user=root  
jdbc.password=111111  
jdbc.driverClass=com.mysql.jdbc.Driver  
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/xxx  
c3p0.minPoolSize=5   
c3p0.initialPoolSize=5  
c3p0.acquireIncrement=5  
c3p0.maxIdleTime=3600  
c3p0.idleConnectionTestPeriod=3600  
c3p0.preferredTestQuery=select 1  

settings-production.properties

jdbc.user=xxx  
jdbc.password=xxxx  
jdbc.driverClass=com.mysql.jdbc.Driver  
jdbc.jdbcUrl=jdbc:mysql:///xxx  
c3p0.minPoolSize=20   
c3p0.initialPoolSize=20  
c3p0.acquireIncrement=10  
c3p0.maxIdleTime=3600  
c3p0.idleConnectionTestPeriod=3600  
c3p0.preferredTestQuery=select 1  

1. 定義 profile

現在就可以通過定義 profile 來將開發和生產環境的數據源配置分開,這里我們定義兩個 profile,一個名稱是 development,另一個名稱是 production(配置到Spring的配置文件中即可)

<!-- 開發環境配置文件 -->  
<beans profile="development">  <context:property-placeholder location="classpath:settings-development.properties"/>  
</beans>  <!-- 生產環境配置文件 -->  
<beans profile="production">  <context:property-placeholder location="classpath:settings-production.properties"/>  
</beans> 

2. 定義默認 profile

默認 profile 是指在沒有任何 profile 被激活的情況下,默認 profile 內定義的內容將被使用,通常可以在 web.xml 中定義全局 servlet 上下文參數?spring.profiles.default?實現,代碼如下

<!-- 配置spring的默認profile -->  
<context-param>  <param-name>spring.profiles.default</param-name>  <param-value>development</param-value>  
</context-param>  

當然此種方式也是使用默認profile的方式,即如果不指定激活哪個環境則使用默認方式加載文件

<beans profile="default">  <context:property-placeholder ignore-resource-not-found="true" location="classpath:application.properties"/>  
</beans>  

3. 激活 profile (目前采用的方式)

spring 為我們提供了大量的激活 profile 的方法,可以通過代碼來激活,也可以通過系統環境變量、JVM參數、servlet上下文參數來定義?spring.profiles.active 參數激活 profile,這里我們通過定義 JVM 參數實現。在生產環境中,以 tomcat 為例,我們在 tomcat 的啟動腳本中加入以下 JVM 參數

-Dspring.profiles.active="production"

java protected和private區別、而開發環境中不需要定義該參數,如果不定義,則會使用我們指定的默認 profile ,在這里也就是名稱為 development 的 profile。這樣當項目部署到不同的環境時,便可以通過?JVM 參數來實現不同環境 profile 自動激活。

4. 延伸

該參數還可以延伸,以至于我們可以在?Java?代碼中繼續通過該參數來區分不同的環境,從而執行不同的操作,代碼如下

public class Config {  public static String ENV = "development";  
}  
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;  }  }  
}  

在項目初始化時獲取到該參數后,我們便可以在項目任何位置使用,來執行一些不同環境需要區別對待的操作,例如統計流量的代碼只需要在生產環境激活,就可以在jsp中加入如下代碼

<!-- 生產環境統計、推送代碼 -->  
<c:if test="${env == 'production' }">  
<script>  
//統計代碼  
..  
</script>  
</c:if>

?

轉載于:https://my.oschina.net/mywiki/blog/1492289

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/189803.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息