1

我从事 mavenized Java Spring Web 应用程序。我们在 Eclipse IDE 中广泛使用自动重启和热部署,但我注意到当您开始混合 maven 和 spring 配置时,Eclipse 中的集成并不好。我们希望在 web.xml 中有 maven 变量,这些变量将在项目构建期间由 maven-war-plugin 替换。

web.xml 中的 Maven 变量:

 <env-entry>
  <env-entry-name>spring.profiles.active</env-entry-name>
  <env-entry-type>java.lang.String</env-entry-type>
  <env-entry-value>${profileName}</env-entry-value>
 </env-entry>

和 maven 变量在构建过程中被 maven-war-plugin 替换:

        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>    
            <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
            </configuration>
        </plugin>

此解决方案仅在我从命令行通过 maven 构建项目时才有效。Eclipse 热部署机制显然跳过了所有那些 maven 插件......

您认为这是一个好习惯吗,有什么方法可以在 eclipse 中使用这种配置无缝工作?

我将适当地使用例如 maven jetty 插件从 IDE 中运行它,但是我不喜欢在 shell 窗口中使用控制台 - eclipse 控制台它更舒服一点。

4

1 回答 1

0

通过 Maven 构建的令牌过滤不适用于 Eclipse 热部署。

一种选择是将 -Dspring.profiles.active="dev" 传递给 JVM/App 进程。

我更喜欢使用 env 变量来控制配置文件加载。例如,MY_PROJECT_ENV=dev。

以下代码读取变量并初始化配置文件。

public class ProfileInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    public void initialize(ConfigurableApplicationContext applicationContext) {
        ConfigurableEnvironment environment = applicationContext.getEnvironment();
        environment.setActiveProfiles(System.getProperty("MY_PROJECT_ENV"));
    }
}
于 2013-04-08T07:55:19.513 回答