配置文件不是从tomcat中设置的环境变量中挑选出来的,而是在web.xml中提到的时候选择

时间:2016-11-21 15:34:10

标签: spring tomcat web.xml profiles

我创建了一个在我的Web应用程序中处于活动状态的配置文件的环境变量条目: 在Tomcat服务器中的setenv.bat文件中 JAVA_OPTS =%JAVA_OPTS%-Dspring.profiles.active = prod

当我的应用程序尝试使用活动配置文件加载数据源时,它会提供异常,因为没有设置活动配置文件。

在applicationcontext.xml中输入:

 <beans profile="dev">
  <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <property name="driverClassName"  value="oracle.jdbc.driver.OracleDriver"></property>  
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:books"></property>  
        <property name="username" value="system"></property>  
        <property name="password" value="xyz"></property>  
    </bean>  
    </beans>

    <beans profile="prod">
  <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <property name="driverClassName"  value="oracle.jdbc.driver.OracleDriver"></property>  
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>  
        <property name="username" value="system"></property>  
        <property name="password" value="abc"></property>  
    </bean>  
    </beans>

</beans>

然而,当我通过web.xml条目执行相同的操作时,它可以工作:

 <context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>dev</param-value>
    </context-param>

任何人都可以告诉我使用环境变量加载配置文件有什么问题。

1 个答案:

答案 0 :(得分:0)

因为该命令行选项为Tomcat本身定义了一个系统属性,它不会被正在运行的Web上下文自动选取。

like this可能会有效:

<context-param>
  <param-name>spring.profiles.active</param-name>
  <param-value>${spring.profiles.active}</param-value>
</context-param>

或者,根据您希望对部署进行哪种更改,您可能需要查看Spring Boot,它简化了配置和启动单个Spring应用程序。