有没有办法(我的意思是如何)在maven项目中设置系统属性?
我想从我的测试和我的webapp(本地运行)访问一个属性,我知道我可以使用java系统属性.
我应该把它放在./settings.xml或类似的东西?
上下文
我参加了一个开源项目并设法更改数据库配置以使用JavaDB
现在,在JavaDB的jdbc url中,可以将数据库的位置指定为完整路径(请参阅:此其他问题)
或系统属性: derby.system.home
我已经有了代码工作,但目前所有硬编码都是:
jdbc:derby:/Users/oscarreyes/javadbs/mydb
Run Code Online (Sandbox Code Playgroud)
我想删除完整的路径,让它像:
jdbc:derby:mydb
Run Code Online (Sandbox Code Playgroud)
要做到这一点,我需要将系统属性(derby.system.home)指定为maven,但我不知道如何.
测试是使用junit执行的(我在pom.xml中看不到任何插件),web应用程序使用jetty插件运行.
在命令行中指定系统属性似乎适用于jetty,但我不确定这是否实用(授予其他一些用户可以从eclipse/idea /中运行它)
我正在使用 Spring Boot 1.4.3 并且有一大堆用@DataJpaTest. 默认情况下,它们针对内存数据库运行。我希望能够暂时针对本地 MySQL 运行所有这些。我怎样才能以简单的方式做到这一点?
我发现,我可以把它加入了一个工作,@ActiveProfiles("local")在那里我有一个application-local.properties是指向我的本地MySQL,但它仅仅是太多的工作,以补充说无处不在,运行测试,然后将其删除(因为我只想针对 MySQL 手动运行它,CI 环境将针对内存数据库运行)。
如果这很重要,我正在使用 Maven。
更新:
所以我有一个application-local.properties包含 db 属性来连接到我的本地 MySQL 数据库(我已经使用它来针对本地 MySQL 运行我的应用程序)
然后我在 IntelliJ 中右键单击一个包并选择“运行包中的所有测试”。在该运行配置的设置中,我添加-Dspring.profiles.active=local到“VM 选项”字段。
我原以为这会local在测试期间激活配置文件,但事实并非如此。如果我停止本地 MySQL,测试仍然运行良好。
我在做什么?
我有一个应用程序,我想在不同的环境中测试 - 开发,登台等
我所做的?
我正在使用maven cargo插件来部署应用程序战以运行集成测试.
我需要的?
我需要在我的测试中推断spring.profiles.active基于货物设置的环境变量
<container>
<containerId>tomcat7x</containerId>
<systemProperties>
<spring.profiles.active>development</spring.profiles.active>
</systemProperties>
</container>
Run Code Online (Sandbox Code Playgroud)
为什么?
这样我就可以在集成测试中删除硬编码,@ActiveProfiles("development")测试可以从环境变量中推断出哪些活动配置文件
问题
- 我发现使用配置文件的Spring集成测试提到了使用ActiveProfilesResolver
- 我试图找到如何使用它,但找不到任何资源
我正在寻找关于如何使用的指导/建议ActiveProfilesResolver
使用Spring 4,我有以下测试设置:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JpaConfig.class)
@ActiveProfiles(resolver = TestResolver.class)
public class SimpleTest {
Run Code Online (Sandbox Code Playgroud)
TestResolver已实现为:
public class TestResolver implements ActiveProfilesResolver {
@Override
public String[] resolve(Class<?> aClass) {
String[] profiles = new String[1];
profiles[0] = "test";
return profiles;
}
}
Run Code Online (Sandbox Code Playgroud)
JpaConfig已经使用PropertySource注释
@Configuration
@PropertySource("classpath:properties/application-${spring.profiles.active:dev}.properties")
@EnableJpaRepositories(basePackages={"com.my.namespace.repositories"})
public class JpaConfig {
Run Code Online (Sandbox Code Playgroud)
每当我运行SimpleTest时,它会尝试找到:properties/application-dev.properties,而我期望它是properties/application-test.properties.
我在这里要完成的是基于以下帖子:使用profile进行Spring集成测试