実際の開発では、多くの場合、あなたは、このようなmysqlのホストアドレス、ポート番号、ユーザー名とパスワードとして、設定ファイルにいくつかの設定情報を記述する必要があります。さらに、コードは設定パラメータのセットを開発する場合、テスト環境にデプロイすると、設定パラメータの別のセットを使用しますが、使用して、テストが完了したオンライン環境、およびパラメータオンライン環境の別のセットを使用する必要性に展開することができます。そのため、実際の開発プロジェクトに複数の環境でプロファイルを追加すると、異なる環境が自動的に異なるプロファイルを使用できるようにする方法に直面しました。
春は、通常の状況下で、我々はDEV、テストとしてこの値を設定し、オンラインで、オンラインの開発環境、テスト環境と本番環境を表すだろう、spring.profiles.activeパラメータを提供します。例えば、開発環境で現在実行中を表すspring.profiles.active DEV値は、プロファイルは、開発環境で使用されるべきです。
別のプロファイルを選択するためのプログラムを実行するときに異なる値にspring.profiles.activeパラメータを渡すことによって。このように、一度だけ、パッケージ、異なる環境ごとに一度パックはありません。
次のショーは、どのように運用段階でプロファイルを選択します。上部にプロジェクトの変更は、(第1の元の形式に上記プロジェクトを復元します)。
まず、ディレクトリresoures 4つのプロファイル、それぞれapplication.properties、application-dev.properties、application-test.propertiesとapplication-online.propertiesで作成されました。application.propertiesファイルは、構成情報に格納されているそれぞれのオンライン他の三つの開発環境、テスト環境および構成環境に対応し、すべての環境に共通しています。
設定ファイルは、プロジェクトの操作に行くために選択されますので、そのため、すべての設定ファイルがプロジェクトにパッケージを必要としています。最初の3つの共通の環境application.propertiesでファイルの設定項目、パラメータcity.nameを、北京れる追加します。
city.name =北京
和前面的例子一样,dev、test和online环境的配置文件都配置了一个名为env.name的参数,值分别为env-dev、env-test和env-online。
接下来修改spring.xml,增加如下一行配置如下:
1 <context:property-placeholder location="classpath:application.properties, classpath:application-${spring.profiles.active}.properties"/>
这一行是告诉spring容器去哪加载配置文件。这里添加了两个配置文件,一个是所有环境都通用的application.properties文件,另一个则取决于spring.profiles.active参数的值是多少,如果是dev(即开发环境),则是application-dev.properties文件;同理,如果是test(测试环境)则是application-test.properties文件;如果是online(线上环境)则是application-online.properties文件。
为了观察配置的效果,修改HelloServiceImpl文件的内容如下:
1 package com.mytest.service.impl; 2 3 import com.mytest.service.HelloService; 4 import org.springframework.beans.factory.annotation.Value; 5 import org.springframework.stereotype.Service; 6 7 @Service 8 public class HelloServiceImpl implements HelloService { 9 10 @Value("${env.name}") 11 private String envName; 12 13 @Value("${city.name}") 14 private String cityName; 15 16 @Override 17 public String sayHello(String to) { 18 return "hello " + to + ", env.name:" + envName + ", cityName:" + cityName; 19 } 20 }
HelloServiceImpl除了引用了配置文件中的env.name参数外,还引用了通用配置文件中的city.name参数。
接下在maven命令行中执行如下命令构建整个工程:
1 clean package
这里构建时没有再传入任何参数了。
接下来将打包好的mvc-test-1.0-SNAPSHOT.war文件拷贝到tomcat的webapps目录下,并改名为mvc-test.war。
运行时进行配置文件的选择,其原理就是在用java命令执行java程序时传入给spring.profiles.active参数不同的值,比如:
1 java xxx -Dspring.profiles.active=dev
这样就在启动程序时就把spring.profiles.active参数的设置为dev了。
因为tomcat是我们通常是用它自身bin目录下的catalina.sh脚本来启动的,所以我们把启动参数写到这个脚本里。打开catalina.sh脚本,搜索到如下行:
1 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
将其改成:
1 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Dspring.profiles.active=dev"
表示现在是开发环境。保存并退出,然后在tomcat的bin目录下执行以下命令以启动tomcat:
1 sh ./catalina.sh run
然后在浏览器中输入http://localhost:8080/mvc-test/hello?name=tom,回车即可看到结果:
可以看到,程序正确地选择了开发环境下的配置文件。
用同样的方法,将spring.profiles.active设置为test,并重新启动tomcat,在浏览器中访问,可以看到程序正确地选择了测试环境下的配置文件:
将spring.profiles.active设置为online,并重新启动tomcat,在浏览器中访问,可以看到程序正确地选择了线上环境的配置文件:
我们再看下tomcat的webapps目录下,mvc-test的目录结构:
可以看到所有的配置文件都打包到WEB-INF/classes目录下了,因为是运行时才选择配置文件,所以所有的配置文件都要打包过来。
综上,可以将所有环境都通用的配置信息写入到application.properties文件中,而不同运行环境下不同的配置信息则分别写入到application-dev.properties、application-test.properties和application-online.properties文件中,再通过运行程序时给sring.profiles.active参数传入不同的值(dev或test或online)即可完成不同运行环境下选择不同的配置文件的功能。