如何使用 Maven 型材设置弹簧活动型材

2022-08-31 14:47:22

我有一个使用maven作为构建工具的应用程序。

我正在使用maven配置文件从不同的配置文件设置不同的属性。

我想做的是,maven中的所有活动配置文件也将移植到弹簧活动配置文件中,以便我可以在bean签名()中引用它们。但我不知道该怎么做。@profile

例如:考虑以下 maven 设置

<profiles>
    <profile>
        <id>profile1</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
        </properties>
    </profile>
    <profile>
        <id>profile2</id>
        <properties>
        </properties>
    </profile>
    <profile>
        <id>development</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
        </properties>
    </profile>
    <profile>
        <id>production</id>
        <properties>    
        </properties>
    </profile>
</profiles>

假设我运行maven,并指定我希望弹簧具有的任何其他配置文件并作为活动配置文件。profile1development


答案 1

有一种更优雅的方式可以同时在2个maven +弹簧型材之间切换。

首先,将轮廓添加到POM(注意 - maven+弹簧轮廓由单个系统变量激活):

<profiles>
    <profile>
        <id>postgres</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <property>
                <name>spring.profiles.active</name>
                <value>postgres</value>
            </property>
        </activation>
        <dependencies>
            <dependency>
                <groupId>postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>9.1-901.jdbc4</version>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>h2</id>
        <activation>
            <property>
                <name>spring.profiles.active</name>
                <value>h2</value>
            </property>
        </activation>           
        <dependencies>
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <version>1.4.191</version>
            </dependency>
        </dependencies>
    </profile>
</profiles>

其次,为弹簧设置默认配置文件(对于maven,它已经在POM中设置)。对于Web应用程序,我插入了以下行:web.xml

<context-param>
   <param-name>spring.profiles.default</param-name>
   <param-value>postgres</param-value>
</context-param>

第三,将与配置文件相关的 Bean 添加到您的配置中。在我的情况下(XML配置),它是:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="mainDataSource" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </property>
    <property name="jpaProperties" ref="hibProps"/>
    <property name="packagesToScan">
        <list>
            <value>my.test.model</value>
        </list>
    </property>
</bean>
...
<beans profile="postgres">
    <bean name="mainDataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.postgresql.Driver" />
        <property name="url" value="jdbc:postgresql://127.0.0.1:5432/webchat" />
        <property name="username" value="postgres" />
        <property name="password" value="postgres" />
    </bean>
</beans>

<beans profile="h2">
    <bean name="mainDataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.h2.Driver" />
        <property name="url" value="jdbc:h2:file:./newsdb;INIT=RUNSCRIPT FROM 'classpath:init.sql';TRACE_LEVEL_FILE=0" />
        <property name="username" value="sa" />
        <property name="password" value="" />
    </bean>
</beans>

现在可以:

  • 使用 或 命令 在 Postgres DB 上运行我的 Web 应用程序mvn jetty:runmvn jetty:run -Dspring.profiles.active=postgres
  • 在 H2 DB 上运行我的 Web 应用程序mvn clean jetty:run -Dspring.profiles.active=h2

答案 2

您需要的第一件事是两个用于保留配置的属性文件。文件的名称应与模式应用程序 -{custom_suffix}.属性匹配。在 Maven 项目的 src/main/resources 目录中,在 main application.properties 文件旁边创建它们,稍后将使用该文件激活其他文件之一并保存两个配置文件共享的值。

然后是时候修改你的pom.xml了。您需要在每个 Maven 配置文件中定义一个自定义属性,并将其值设置为与要与特定配置文件一起加载的相应属性文件的后缀匹配。下面的示例还将第一个配置文件标记为默认运行,但这不是必需的。

<profile>
    <id>dev</id>
    <properties>
        <activatedProperties>dev</activatedProperties>
    </properties>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>
<profile>
    <id>release</id>
    <properties>
        <activatedProperties>release</activatedProperties>
    </properties>
</profile>

接下来,在同一文件的构建部分中,为资源插件配置过滤。这将允许您将上一步中定义的属性插入到资源目录中的任何文件中,这是后续步骤。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    …
</build>

最后,将以下行添加到 application.properties 中。

spring.profiles.active=@activatedProperties@

运行构建时,资源插件会将占位符替换为活动 Maven 配置文件中定义的属性值。启动应用程序后,Spring 框架将根据活动 Spring 配置文件的名称加载相应的配置文件,该配置文件由 spring.profiles.active 属性的值描述。请注意,Spring Boot 1.3 取代了默认的资源插件语法,用于过滤值和用途,而不是表示法。@activatedProperties@${activatedProperties}

它完美地工作。希望这可以帮助你。


推荐