首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Spring访问Maven属性

无法使用Spring访问Maven属性
EN

Stack Overflow用户
提问于 2016-04-24 16:45:37
回答 3查看 2.8K关注 0票数 1

你好,我是一般Maven的新手,所以如果我弄错了,我想提前道歉。

我有一个带有spring的Maven项目,其中我还访问了一个MySQL数据库。

通常,MySQL数据库是不可访问的,因此我使用本地数据库进行测试,我通过更改活动配置文件在两者之间进行交换。

我在我的POM.xml中设置了这些配置文件:

代码语言:javascript
复制
<profiles>
        <profile>
            <id>Local</id>
            <dependencies>
                <dependency>
                    <groupId>org.hsqldb</groupId>
                    <artifactId>hsqldb</artifactId>
                    <version>2.3.3</version>
                    <classifier>jdk5</classifier>
                </dependency>
            </dependencies>
            <properties>
                <jdbc.url>jdbc:hsqldb:file:databaseName</jdbc.url>
                <jdbc.username>a</jdbc.username>
                <jdbc.password></jdbc.password>
                <jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver>
            </properties>
        </profile>
        <profile>
            <id>MySQL</id>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.38</version>
                </dependency>
            </dependencies>
            <properties>
                <jdbc.url>jdbc:mysql://mysql.website.ac.uk:3306</jdbc.url>
                <jdbc.username>user</jdbc.username>
                <jdbc.password>1234</jdbc.password>
                <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
            </properties>
        </profile>
    </profiles>

例如,当我试图通过${jdbc.url}访问属性变量时,它们不会转换为配置文件中定义的实际值,因此会出现错误。我怀疑这可能与Spring有关。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-24 16:53:23

您在配置文件中指定了属性,因此有一个解决办法。像@Value("${name}")这样的注释引用的是外部化配置,例如来自application.yml。您应该使用此文件加载所需的属性。@property_name@从您的maven配置文件加载属性。

代码语言:javascript
复制
jdbc:
  url: @jdbc.url@
  username: @jdbc.username@
and so on...

然后,这些属性将可以在您的代码中访问。

票数 0
EN

Stack Overflow用户

发布于 2016-04-24 20:12:00

除了特定的sprint引导问题之外,我认为您还缺少maven资源过滤配置。

Maven属性不会自动传播到Spring,除非您将它们放入单独的属性文件中,然后必须由spring (通常通过PropertyPlaceholderConfigurer)管理它们。

但是,如果不打开maven筛选,则不会自动解析属性,通常,如果您在居家src/resources文件夹中没有许多项,则只需启用全局筛选。

代码语言:javascript
复制
<resource>
  <directory>src/main/resources</directory>
  <filtering>true</filtering>
</resource>

属性文件应该用maven值替换占位符。

另一方面,如果在src/main/resources中有多个资源,则应该更深入地检查文档,以避免二进制文件损坏。

我认为spring引导只是简单地自动结束应用程序属性文件中的所有进程。

票数 2
EN

Stack Overflow用户

发布于 2021-04-05 10:54:35

Maven属性不会放入您可以通过Spring访问的环境变量或JVM变量中。

然而,您通常可以指示maven插件为您做这件事。

例如,我用来设置测试db的maven-failsafe-plugin配置:

代码语言:javascript
复制
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <configuration>
                    <includes>**/*Integration.java</includes>
                    <environmentVariables>
                        <mysql.version>${mysql.version}</mysql.version>
                        <test.mysql.username>${test.mysql.username}</test.mysql.username>
                        <test.mysql.password>${test.mysql.password}</test.mysql.password>
                        <test.mysql.port>${test.mysql.port}</test.mysql.port>
                        <test.mysql.db>${test.mysql.db}</test.mysql.db>
                    </environmentVariables>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36826025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档