JPA Datasorce会忽略属性文件中的用户名

时间:2018-09-04 07:09:45

标签: java database spring maven jpa

我有一个测试类,用于检查与数据库的连接是否建立。凭据保存在属性文件中。当我在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使用属性文件中的用户名?

1 个答案:

答案 0 :(得分:0)

$ {user}被maven替换为环境变量user。

如果运行mvn help:system

,您可以获取此信息

解决方案,将属性重命名为更具体,例如

db.username

副作用 user 在大型项目中非常含糊。如果重命名,则使用它会更清楚