您好我是Maven的新手,所以如果我出错了,我想提前道歉。
我有一个带有spring的Maven项目,我也访问了MySQL数据库。
通常MySQL数据库不可访问所以我使用本地数据库进行测试,我通过更改活动配置文件在两者之间进行交换。
我通过将它放在我的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有关。
答案 0 :(得分:2)
除了特定的sprint-boot问题,我认为你错过了maven resource filtering配置。
Maven属性不会自动传播到Spring,除非您将它们放入单独的属性文件中,然后必须由spring管理(通常通过PropertyPlaceholderConfigurer)。
但是没有maven过滤打开属性不会自动解决,通常如果你在tour src / resources文件夹下没有很多项目,你可以通过
全局启用过滤<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
您的属性文件应该用maven值替换占位符。
另一方面,如果您在src / main / resources中有多个资源,则应该更深入地检查文档以避免binary files损坏
我认为spring boot只是在应用程序属性文件中自动包装所有进程。
答案 1 :(得分:0)
您在个人资料中指定了属性,因此有一种解决方法。诸如@Value("${name}")
之类的注释正在引用外部化配置,例如来自application.yml。您应该使用此文件来加载所需的属性。 @property_name@
从您的maven个人资料中加载属性。
jdbc:
url: @jdbc.url@
username: @jdbc.username@
and so on...
然后可以在您的代码中访问这些属性。
答案 2 :(得分:0)
Maven 属性不会放入 Spring 可以访问的环境变量或 JVM 变量中。
但是,您通常可以指示 maven 插件为您执行此操作。
例如我用来设置测试数据库的 maven-failsafe-plugin
配置:
<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>