java - 无法使用 Spring 访问 Maven 属性

标签 java spring maven spring-boot

您好,我对 Maven 总体来说还是个新手,所以如果我弄错了,我想提前道歉。

我有一个带有 spring 的 Maven 项目,其中我还访问 MySQL 数据库。
通常 MySQL 数据库无法访问,因此我使用本地数据库进行测试,通过更改 Activity 配置文件在两者之间进行交换。

我通过将其放入 POM.xml 中来设置配置文件:

<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 Boot 有关。

最佳答案

除了特定的 sprint-boot 问题之外,我认为您还缺少 maven resource filtering配置。

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

但是如果没有打开maven过滤,属性不会自动解析,通常如果你在src/resources文件夹下没有很多项目,你可以使用全局启用过滤

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

您的属性文件应将占位符替换为 Maven 值。

另一方面,如果您在 src/main/resources 中有多个资源,则应该更深入地检查文档以避免 binary files腐败

我认为 Spring Boot 只是将所有过程自动包装在应用程序属性文件中。

关于java - 无法使用 Spring 访问 Maven 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36826025/

相关文章:

java.lang.NullPointerException 和未知来源

java - 如何为 final类创建动态代理?

java - 无法执行目标 org.sonarsource.scanner.maven 对于 Artifact {null :null:null:jar}: The groupId cannot be empty

java - IntelliJ IDEA 无法导入依赖

使用 XTEA 的 Java 加密

java - eclipse ADT : Java was started but returned exit code=13

spring - Eureka server和eureka client要分开tomcat服务器

java - 为什么我的方面不起作用?

java - 如何设置 spring-data-rest 的默认媒体类型?

java - Maven 如何执行该操作?