我有一个测试类,用于检查与数据库的连接是否建立。凭据保存在属性文件中。当我在Eclipse中运行测试时,一切正常。但是,当我运行Maven构建时,测试失败,因为用于连接数据库的用户名不是我在属性文件中设置的用户名。这是Windows用户名。这是我的代码:
属性文件:
driverClassName=oracle.jdbc.driver.OracleDriver
user=database_dev1
password=password_dev1
url=jdbc:oracle:thin:@MyAwsomeDatabase:1521:DEV01
配置类:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("de.xxx.bvd.mobisl.service")
@PropertySource("classpath:database.properties")
@ComponentScan("de.xxx.bvd.mobisl.service")
public class JPAConfig {
@Value("${driverClassName}")
protected String driverClassName;
@Value("${url}")
protected String url;
@Value("${user}")
protected String username;
@Value("${password}")
protected String password;
private static final Logger logger = Logger.getLogger(JPAConfig.class);
@SuppressWarnings("unchecked")
@Lazy
@Bean
public DataSource dataSource() {
try {
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
Class<? extends Driver> driver = (Class<? extends Driver>) Class.forName(driverClassName);
dataSource.setDriverClass(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
logger.info("created DataSource with username " + username + " and password " + password);
return dataSource;
} catch (ClassNotFoundException e) {
logger.error("cannot create datasource!!", e);
return null;
}
}
正如我所说,从Eclipse中运行可以正常工作。日志文件说:
[[XXX-LOG]] 2018-09-04 08:27:23 INFO JPAConfig:57 - created DataSource with username database_dev1
[[XXX-LOG]] 2018-09-04 08:27:27 INFO JPAConfigTest:52 - got result from database
但是从maven运行时,日志文件显示:
[[XXX-LOG]] 2018-09-04 08:27:53 INFO JPAConfig:57 - created DataSource with username <<Windows-Username>>
如何告诉Maven使用属性文件中的用户名?
答案 0 :(得分:0)
$ {user}被maven替换为环境变量user。
如果运行mvn help:system
解决方案,将属性重命名为更具体,例如
db.username
副作用 user 在大型项目中非常含糊。如果重命名,则使用它会更清楚